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
158167end
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
192209end
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,
294314
295315function _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)
0 commit comments