Skip to content

Commit 6dfbcb4

Browse files
committed
minor changes
1 parent 6b37cf7 commit 6dfbcb4

File tree

6 files changed

+35
-18
lines changed

6 files changed

+35
-18
lines changed

examples/ex1.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ print(m)
2020
# Subject to
2121
# XOR(disj_y) : y[1] + y[2] == 1.0 <- XOR constraint
2222
# y[1] ∨ y[2] : y[1] + y[2] >= 1.0 <- reformulated logical proposition (name is the proposition)
23-
# disj_y[1][lb] : -x + 5 y[1] <= 5.0 <- left-side of constraint in 1st disjunct (name is assigned to disj_y[1][lb])
24-
# disj_y[1][ub] : x + 7 y[1] <= 10.0 <- right-side of constraint in 1st disjunct (name is assigned to disj_y[1][ub])
25-
# disj_y[2][lb] : -x + 10 y[2] <= 5.0 <- left-side of constraint in 2nd disjunct (name is assigned to disj_y[2][lb])
26-
# disj_y[2][ub] : x + y[2] <= 10.0 <- right-side of constraint in 2nd disjunct (name is assigned to disj_y[2][ub])
23+
# disj_y[1,lb] : -x + 5 y[1] <= 5.0 <- left-side of constraint in 1st disjunct (name is assigned to disj_y[1][lb])
24+
# disj_y[1,ub] : x + 7 y[1] <= 10.0 <- right-side of constraint in 1st disjunct (name is assigned to disj_y[1][ub])
25+
# disj_y[2,lb] : -x + 10 y[2] <= 5.0 <- left-side of constraint in 2nd disjunct (name is assigned to disj_y[2][lb])
26+
# disj_y[2,ub] : x + y[2] <= 10.0 <- right-side of constraint in 2nd disjunct (name is assigned to disj_y[2][ub])
2727
# x >= -5.0 <- variable lower bound
2828
# x <= 10.0 <- variable upper bound
2929
# y[1] >= 0.0 <- lower bound on binary

examples/ex2.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ print(m)
2222
# Feasibility
2323
# Subject to
2424
# XOR(disj_y) : y[1] + y[2] == 1.0 <- XOR constraint
25-
# con1[1][lb] : -x[1] + 5 y[1] <= 5.0 <- left-side of con1[1]
26-
# con1[1][ub] : x[1] + 7 y[1] <= 10.0 <- right-side of con1[1]
27-
# con1[2][lb] : -x[2] + 5 y[1] <= 5.0 <- left-side of con1[2]
28-
# con1[2][ub] : x[2] + 6 y[1] <= 10.0 <- right-side of con1[2]
29-
# con2[1][lb] : -x[1] + 10 y[2] <= 5.0 <- left-side of con2[1]
30-
# con2[1][ub] : x[1] + y[2] <= 10.0 <- right-side of con2[1]
31-
# con2[2][lb] : -x[2] + 9 y[2] <= 5.0 <- left-side of con2[2]
32-
# con2[2][ub] : x[2] + 4 y[2] <= 10.0 <- right-side of con2[2]
25+
# con1[1,lb] : -x[1] + 5 y[1] <= 5.0 <- left-side of con1[1]
26+
# con1[1,ub] : x[1] + 7 y[1] <= 10.0 <- right-side of con1[1]
27+
# con1[2,lb] : -x[2] + 5 y[1] <= 5.0 <- left-side of con1[2]
28+
# con1[2,ub] : x[2] + 6 y[1] <= 10.0 <- right-side of con1[2]
29+
# con2[1,lb] : -x[1] + 10 y[2] <= 5.0 <- left-side of con2[1]
30+
# con2[1,ub] : x[1] + y[2] <= 10.0 <- right-side of con2[1]
31+
# con2[2,lb] : -x[2] + 9 y[2] <= 5.0 <- left-side of con2[2]
32+
# con2[2,ub] : x[2] + 4 y[2] <= 10.0 <- right-side of con2[2]
3333
# x[1] >= -5.0 <- varaible bounds
3434
# x[2] >= -5.0 <- variable bounds
3535
# x[1] <= 10.0 <- variable bounds

examples/ex3.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ print(m)
3737
# x <= 10.0 <- upper-bound on x
3838
# x_z1 <= 10.0 <- upper-bound on x_z1 (disaggregated x in 1st disjunct)
3939
# x_z2 <= 10.0 <- upper-bound on x_z2 (disaggregated x in 2nd disjunct)
40+
# z[1] >= 0.0 <- lower bound on binary
41+
# z[2] >= 0.0 <- lower bound on binary
42+
# z[1] <= 1.0 <- upper bound on binary
43+
# z[2] <= 1.0 <- upper bound on binary
4044
# z[1] binary <- indicator variable (1st disjunct) is binary
4145
# z[2] binary <- indicator variable (2nd disjunct) is binary
4246
# Perspective Functions:

src/constraint.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,11 @@ function split_interval_constraint(m, constr, constr_name = name(constr))
9292
lb = constr_obj.set.lower
9393
ub = constr_obj.set.upper
9494
ex = constr_obj.func
95+
lb_name = name_split_constraint(constr_name, :lb)
96+
ub_name = name_split_constraint(constr_name, :ub)
9597
return [
96-
@constraint(m, lb <= ex, base_name = "$(constr_name)[lb]"),
97-
@constraint(m, ex <= ub, base_name = "$(constr_name)[ub]")
98+
@constraint(m, lb <= ex, base_name = lb_name),
99+
@constraint(m, ex <= ub, base_name = ub_name)
98100
]
99101
end
100102
end

src/convex_hull.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ function sum_disaggregated_variables(m, disj, bin_var)
7777
for var in m[:gdp_variable_refs]
7878
dis_vars = []
7979
for i in eachindex(disj)
80-
var_name_i = name_disaggregated(var, bin_var, i)
80+
var_name_i = name_disaggregated_variable(var, bin_var, i)
8181
var_i = variable_by_name(m, var_name_i)
8282
push!(dis_vars, var_i)
8383
end
@@ -113,7 +113,7 @@ function linear_perspective_function(ref, bin_var, i)
113113
#replace each variable with its disaggregated version
114114
for var_ref in ref.model[:gdp_variable_refs]
115115
#get disaggregated variable reference
116-
var_name_i = name_disaggregated(var_ref, bin_var, i)
116+
var_name_i = name_disaggregated_variable(var_ref, bin_var, i)
117117
var_i_ref = variable_by_name(ref.model, var_name_i)
118118
#check var_ref is present in the constraint
119119
coeff = normalized_coefficient(ref, var_ref)
@@ -131,7 +131,7 @@ end
131131
function nonlinear_perspective_function(ref, bin_var, i, eps)
132132
#create symbolic variables (using Symbolics.jl)
133133
sym_vars = Dict(
134-
symbolic_variable(var_ref) => symbolic_variable(name_disaggregated(var_ref, bin_var, i))
134+
symbolic_variable(var_ref) => symbolic_variable(name_disaggregated_variable(var_ref, bin_var, i))
135135
for var_ref in ref.model[:gdp_variable_refs]
136136
)
137137
ϵ = eps #epsilon parameter for perspective function (See Furman, Sawaya, Grossmann [2020] perspecive function)

src/utils.jl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ function symbolic_variable(var_ref)
162162
return eval(:(Symbolics.@variables($var_sym)[1]))
163163
end
164164

165-
function name_disaggregated(var_ref, bin_var, i)
165+
function name_disaggregated_variable(var_ref, bin_var, i)
166166
#get disaggregated variable reference
167167
if occursin("[", string(var_ref))
168168
var_name_i = replace(string(var_ref), "[" => "_$bin_var$i[")
@@ -173,6 +173,17 @@ function name_disaggregated(var_ref, bin_var, i)
173173
return var_name_i
174174
end
175175

176+
function name_split_constraint(con_name, side)
177+
#get disaggregated variable reference
178+
if occursin("[", string(con_name))
179+
con_name = replace(string(con_name), "]" => ",$side]")
180+
else
181+
con_name = "$(con_name)[$side]"
182+
end
183+
184+
return con_name
185+
end
186+
176187
# function is_linear_func(expr::Expr, m)
177188
# m = eval(m)
178189
# if expr.head == :call

0 commit comments

Comments
 (0)