@@ -162,9 +162,9 @@ function CHR!(m, constr, bin_var, i, k, eps)
162
162
for var in m[:original_model_variables ]
163
163
# get bounds for disaggregated variable
164
164
@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."
166
166
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
168
168
# create disaggregated variable
169
169
var_i = Symbol (" $(var) _$i " )
170
170
if ! (var_i in keys (object_dictionary (m)))
@@ -236,12 +236,6 @@ function nl_perspective_function(ref, bin_var_ref, i, eps)
236
236
pers_func = simplify (pers_func)
237
237
238
238
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)")
245
239
end
246
240
247
241
function parse_NLconstraint (ref)
@@ -340,46 +334,3 @@ function add_disaggregated_constr(m, disj, vars)
340
334
! isempty (d_vars) && eval (:(@constraint ($ m, $ var == sum ($ d_vars))))
341
335
end
342
336
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