You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/hull.jl
+17-10Lines changed: 17 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -16,13 +16,13 @@ function hull_reformulation!(constr::ConstraintRef{<:AbstractModel, MOI.Constrai
16
16
m = constr.model
17
17
i = args[2] #get disjunct index
18
18
bin_var_ref = m[bin_var][i]
19
-
#replace each variable with its disaggregated version
20
-
for var_ref inget_constraint_variables(constr)
19
+
#replace each variable with its disaggregated version (skip disaggregated vars)
20
+
for var_ref infilter!(!in(values(m.ext[:disaggregated_variables])), get_constraint_variables(constr))#setdiff(get_constraint_variables(constr), values(m.ext[:disaggregated_variables]))
21
21
is_binary(var_ref) &&continue#NOTE: binaries from nested disjunctions are not disaggregated and don't need to be swapped out
22
-
var_ref invalues(m.ext[:disaggregated_variables]) &&continue#disaggregated variables are not touched
22
+
#var_ref in values(m.ext[:disaggregated_variables]) && continue #disaggregated variables are not touched
var_i_ref =m.ext[:disaggregated_variables][var_name_i] #NOTE: currently containerized variables are disaggregated individually, which makes this work and does not require using variable_by_name(m, var_name_i)
26
26
#check var_ref is present in the constraint
27
27
coeff =normalized_coefficient(constr, var_ref)
28
28
iszero(coeff) &&continue#if not present, skip
@@ -83,15 +83,15 @@ function disaggregate_variables(m::Model, disj, bin_var)
83
83
#reformulate variables
84
84
obj_dict =object_dictionary(m)
85
85
bounds_dict =:variable_bounds_dictinkeys(obj_dict) ? obj_dict[:variable_bounds_dict] :Dict() #NOTE: should pass as an keyword argument
86
-
for var in var_refs
87
-
is_binary(var) &&continue#NOTE: don't disaggregate binary variables from nested disjunctions
88
-
var invalues(m.ext[:disaggregated_variables]) &&continue#skip already disaggregated variables
86
+
for var infilter!(!in(values(m.ext[:disaggregated_variables])), var_refs) #skip already disaggregated variables
87
+
is_binary(var) &&continue#NOTE: don't disaggregate binary variables (comes up when nesting disjunctions)
88
+
#var in values(m.ext[:disaggregated_variables]) && continue #skip already disaggregated variables
89
89
#define UB and LB
90
90
LB, UB =get_bounds(var, bounds_dict)
91
91
#disaggregate variable and add bounding constraints
92
92
sum_vars =AffExpr(0) #initialize sum of disaggregated variables
0 commit comments