Skip to content

Commit 10807d5

Browse files
committed
format
1 parent edf42a0 commit 10807d5

File tree

2 files changed

+54
-21
lines changed

2 files changed

+54
-21
lines changed

src/dual_feasibility_checker.jl

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Use of this source code is governed by an MIT-style license that can be found
44
# in the LICENSE.md file or at https://opensource.org/licenses/MIT.
55

6-
function _last_dual_solution(model::GenericModel{T}) where T
6+
function _last_dual_solution(model::GenericModel{T}) where {T}
77
if !has_duals(model)
88
error(
99
"No dual solution is available. You must provide a point at " *
@@ -84,14 +84,16 @@ function dual_feasibility_report(
8484
end
8585
end
8686
dual_model = _dualize2(model)
87-
primal_con_dual_var = dual_model.ext[:dualization_primal_dual_map].primal_con_dual_var
87+
primal_con_dual_var =
88+
dual_model.ext[:dualization_primal_dual_map].primal_con_dual_var
8889

8990
# point is a:
9091
# dict mapping primal constraints to (dual) values
9192
# we need to convert it to a:
9293
# dict mapping the dual model variables to these (dual) values
9394

94-
primal_con_dual_convar = dual_model.ext[:dualization_primal_dual_map].primal_con_dual_con
95+
primal_con_dual_convar =
96+
dual_model.ext[:dualization_primal_dual_map].primal_con_dual_con
9597

9698
dual_point = Dict{GenericVariableRef{T},T}()
9799
for (jump_con, val) in point
@@ -104,7 +106,10 @@ function dual_feasibility_report(
104106
end
105107
elseif haskey(primal_con_dual_convar, moi_con)
106108
moi_convar = primal_con_dual_convar[moi_con]
107-
jump_var = JuMP.VariableRef(dual_model, MOI.VariableIndex(moi_convar.value))
109+
jump_var = JuMP.VariableRef(
110+
dual_model,
111+
MOI.VariableIndex(moi_convar.value),
112+
)
108113
dual_point[jump_var] = val
109114
else
110115
# careful with the case where bounds do not become variables
@@ -121,11 +126,14 @@ function dual_feasibility_report(
121126

122127
# some dual model constraints are associated with primal model variables (primal_con_dual_var)
123128
# if variable is free (almost a primal con = ConstraintIndex{MOI.VariableIndex, MOI.Reals})
124-
primal_var_dual_con = dual_model.ext[:dualization_primal_dual_map].primal_var_dual_con
129+
primal_var_dual_con =
130+
dual_model.ext[:dualization_primal_dual_map].primal_var_dual_con
125131
# if variable is bounded
126-
primal_convar_dual_con = dual_model.ext[:dualization_primal_dual_map].constrained_var_dual
132+
primal_convar_dual_con =
133+
dual_model.ext[:dualization_primal_dual_map].constrained_var_dual
127134
# other dual model constraints (bounds) are associated with primal model constraints (non-bounds)
128-
primal_con_dual_convar = dual_model.ext[:dualization_primal_dual_map].primal_con_dual_con
135+
primal_con_dual_convar =
136+
dual_model.ext[:dualization_primal_dual_map].primal_con_dual_con
129137

130138
dual_con_primal_all = _build_dual_con_primal_all(
131139
primal_var_dual_con,
@@ -144,7 +152,8 @@ function _build_dual_con_primal_all(
144152
primal_con_dual_con,
145153
)
146154
# MOI.VariableIndex here represents MOI.ConstraintIndex{MOI.VariableIndex, MOI.Reals}
147-
dual_con_primal_all = Dict{MOI.ConstraintIndex, Union{MOI.ConstraintIndex, MOI.VariableIndex}}()
155+
dual_con_primal_all =
156+
Dict{MOI.ConstraintIndex,Union{MOI.ConstraintIndex,MOI.VariableIndex}}()
148157
for (primal_var, dual_con) in primal_var_dual_con
149158
dual_con_primal_all[dual_con] = primal_var
150159
end
@@ -157,7 +166,11 @@ function _build_dual_con_primal_all(
157166
return dual_con_primal_all
158167
end
159168

160-
function _fix_ret(pre_ret, primal_model::GenericModel{T}, dual_con_primal_all) where {T}
169+
function _fix_ret(
170+
pre_ret,
171+
primal_model::GenericModel{T},
172+
dual_con_primal_all,
173+
) where {T}
161174
ret = Dict{Union{JuMP.ConstraintRef,JuMP.VariableRef},Union{T,Vector{T}}}()
162175
for (jump_dual_con, val) in pre_ret
163176
# v is a variable in the dual jump model
@@ -167,12 +180,16 @@ function _fix_ret(pre_ret, primal_model::GenericModel{T}, dual_con_primal_all) w
167180
if moi_primal_something isa MOI.VariableIndex
168181
# variable in the dual model
169182
# constraint in the primal model
170-
jump_primal_var = JuMP.VariableRef(primal_model, moi_primal_something)
183+
jump_primal_var =
184+
JuMP.VariableRef(primal_model, moi_primal_something)
171185
# ret[jump_primal_var] = T[val]
172186
ret[jump_primal_var] = val
173187
else
174188
# constraint in the primal model
175-
jump_primal_con = JuMP.constraint_ref_with_index(primal_model, moi_primal_something)
189+
jump_primal_con = JuMP.constraint_ref_with_index(
190+
primal_model,
191+
moi_primal_something,
192+
)
176193
# if val isa Vector
177194
# ret[jump_primal_con] = val
178195
# else
@@ -188,7 +205,7 @@ function _add_with_resize!(vec, val, i)
188205
if i > length(vec)
189206
resize!(vec, i)
190207
end
191-
vec[i] = val
208+
return vec[i] = val
192209
end
193210

194211
"""
@@ -275,11 +292,14 @@ function dual_feasibility_report(
275292

276293
# some dual model constraints are associated with primal model variables (primal_con_dual_var)
277294
# if variable is free
278-
primal_var_dual_con = dual_model.ext[:dualization_primal_dual_map].primal_var_dual_con
295+
primal_var_dual_con =
296+
dual_model.ext[:dualization_primal_dual_map].primal_var_dual_con
279297
# if variable is bounded
280-
primal_convar_dual_con = dual_model.ext[:dualization_primal_dual_map].constrained_var_dual
298+
primal_convar_dual_con =
299+
dual_model.ext[:dualization_primal_dual_map].constrained_var_dual
281300
# other dual model constraints (bounds) are associated with primal model constraints (non-bounds)
282-
primal_con_dual_con = dual_model.ext[:dualization_primal_dual_map].primal_con_dual_con
301+
primal_con_dual_con =
302+
dual_model.ext[:dualization_primal_dual_map].primal_con_dual_con
283303

284304
dual_con_primal_all = _build_dual_con_primal_all(
285305
primal_var_dual_con,
@@ -294,7 +314,7 @@ end
294314

295315
function _reverse_primal_con_dual_var_map(primal_con_dual_var)
296316
dual_var_primal_con =
297-
Dict{MOI.VariableIndex,Tuple{MOI.ConstraintIndex,Int}}()
317+
Dict{MOI.VariableIndex,Tuple{MOI.ConstraintIndex,Int}}()
298318
for (moi_con, vec_vars) in primal_con_dual_var
299319
for (i, moi_var) in enumerate(vec_vars)
300320
dual_var_primal_con[moi_var] = (moi_con, i)

test/dual_feasibility_checker.jl

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ function test_only_bounds()
4242
@objective(model, Min, x)
4343
# md = Dualization.dualize(model)
4444
# print(md)
45-
report = ModelAnalyzer.dual_feasibility_report(model, Dict(LowerBoundRef(x) => 1.0))
45+
report = ModelAnalyzer.dual_feasibility_report(
46+
model,
47+
Dict(LowerBoundRef(x) => 1.0),
48+
)
4649
@test isempty(report)
4750
end
4851

@@ -62,7 +65,8 @@ function test_simple()
6265
@test isempty(report)
6366
report = ModelAnalyzer.dual_feasibility_report(model, Dict(c => [1.0]))
6467
@test isempty(report)
65-
@show report = ModelAnalyzer.dual_feasibility_report(model, Dict(c => [3.3]))
68+
@show report =
69+
ModelAnalyzer.dual_feasibility_report(model, Dict(c => [3.3]))
6670
@test report[x] == 2.3
6771
end
6872

@@ -78,11 +82,20 @@ function test_simple2()
7882
# y >= 0 (as a bound) # from c, a ">=" constraint
7983
# mayber force fail here
8084
# @test_throws ErrorException
81-
report = ModelAnalyzer.dual_feasibility_report(model, Dict(c => 1.0, LowerBoundRef(x) => 0.0))
85+
report = ModelAnalyzer.dual_feasibility_report(
86+
model,
87+
Dict(c => 1.0, LowerBoundRef(x) => 0.0),
88+
)
8289
@test isempty(report)
83-
report = ModelAnalyzer.dual_feasibility_report(model, Dict(c => [1.0], LowerBoundRef(x) => [0.0]))
90+
report = ModelAnalyzer.dual_feasibility_report(
91+
model,
92+
Dict(c => [1.0], LowerBoundRef(x) => [0.0]),
93+
)
8494
@test isempty(report)
85-
report = ModelAnalyzer.dual_feasibility_report(model, Dict(c => [3.3], LowerBoundRef(x) => [0.0]))
95+
report = ModelAnalyzer.dual_feasibility_report(
96+
model,
97+
Dict(c => [3.3], LowerBoundRef(x) => [0.0]),
98+
)
8699
@test report[LowerBoundRef(x)] == 2.3
87100
end
88101

0 commit comments

Comments
 (0)