Skip to content

Commit 550ec85

Browse files
committed
clean code; fixes Variable Lower Bound #18
1 parent 0f678ca commit 550ec85

File tree

1 file changed

+2
-51
lines changed

1 file changed

+2
-51
lines changed

src/reformulate.jl

Lines changed: 2 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ function CHR!(m, constr, bin_var, i, k, eps)
162162
for var in m[:original_model_variables]
163163
#get bounds for disaggregated variable
164164
@assert has_upper_bound(var) || is_binary(var) "Variable $var does not have an upper bound."
165-
@assert has_lower_bound(var) || is_binary(var) "Variable $var does not have a lower bound."
165+
# @assert has_lower_bound(var) || is_binary(var) "Variable $var does not have a lower bound."
166166
UB = is_binary(var) ? 1 : upper_bound(var)
167-
LB = is_binary(var) ? 0 : lower_bound(var)
167+
LB = has_lower_bound(var) ? lower_bound(var) : 0 #set lower bound for disaggregated variable to 0 if binary or no lower bound given
168168
#create disaggregated variable
169169
var_i = Symbol("$(var)_$i")
170170
if !(var_i in keys(object_dictionary(m)))
@@ -236,12 +236,6 @@ function nl_perspective_function(ref, bin_var_ref, i, eps)
236236
pers_func = simplify(pers_func)
237237

238238
replace_NLconstraint(ref, pers_func, op, rhs)
239-
240-
#NOTE: the new NLconstraint cannot be assigned a name (not an option in add_NL_constraint)
241-
# disj_name = replace("$(bin_var_ref)", "_binary" => "")
242-
# j = ismissing(j) ? "" : "_$j"
243-
# k = ismissing(k) ? "" : "_$k"
244-
# pers_func_name = Symbol("perspective_func_$(disj_name)$(j)$(k)")
245239
end
246240

247241
function parse_NLconstraint(ref)
@@ -340,46 +334,3 @@ function add_disaggregated_constr(m, disj, vars)
340334
!isempty(d_vars) && eval(:(@constraint($m, $var == sum($d_vars))))
341335
end
342336
end
343-
344-
################################################################################
345-
### DEPRECATED ###
346-
################################################################################
347-
function infer_BigM(ref)
348-
constr_set = constraint_object(ref).set
349-
set_fields = fieldnames(typeof(constr_set))
350-
@assert length(set_fields) == 1 "A reformulation cannot be done on constraint $ref because it is not one of the following GreaterThan, LessThan, or EqualTo."
351-
@assert :value in set_fields || :lower in set_fields || :upper in set_fields "$ref must be one the following: GreaterThan, LessThan, or EqualTo."
352-
vars = all_variables(ref.model) #get all variable names
353-
M = 0 #initialize M
354-
for var in vars
355-
coeff = normalized_coefficient(ref,var)
356-
iszero(coeff) && continue
357-
has_bounds = (has_lower_bound(var), has_upper_bound(var))
358-
if coeff > 0
359-
if :lower in set_fields && has_bounds[1]
360-
bound = lower_bound(var)
361-
elseif :upper in set_fields || :value in set_fields && has_bounds[2]
362-
bound = upper_bound(var)
363-
else
364-
error("M parameter cannot be infered due to lack of variable bounds for variable $var.")
365-
end
366-
M += coeff*bound
367-
elseif coeff < 0
368-
if :lower in set_fields && has_bounds[2]
369-
bound = upper_bound(var)
370-
elseif :upper in set_fields || :value in set_fields && has_bounds[1]
371-
bound = lower_bound(var)
372-
else
373-
error("M parameter cannot be infered due to lack of variable bounds for variable $var.")
374-
end
375-
M += coeff*bound
376-
end
377-
end
378-
if :lower in set_fields
379-
M -= constr_set.lower
380-
elseif :upper in set_fields
381-
M -= constr_set.upper
382-
elseif :value in set_fields
383-
M -= constr_set.value
384-
end
385-
end

0 commit comments

Comments
 (0)