1
- function dualize (model:: JuMP.Model , optimizer_constructor = nothing ; kwargs... )
1
+ # Copyright (c) 2017: Guilherme Bodin, and contributors
2
+ #
3
+ # Use of this source code is governed by an MIT-style license that can be found
4
+ # in the LICENSE.md file or at https://opensource.org/licenses/MIT.
5
+
6
+ module DualizationJuMPExt
7
+
8
+ import Dualization
9
+ import JuMP
10
+ import MathOptInterface as MOI
11
+
12
+ function Dualization. dualize (
13
+ model:: JuMP.Model ,
14
+ optimizer_constructor = nothing ;
15
+ kwargs... ,
16
+ )
2
17
mode = JuMP. mode (model)
3
18
if mode != JuMP. AUTOMATIC
4
19
error (" Dualization does not support solvers in $(mode) mode" )
5
20
end
6
21
dual_model = JuMP. Model ()
7
- dual_problem = DualProblem (JuMP. backend (dual_model))
8
- dualize (JuMP. backend (model), dual_problem; kwargs... )
22
+ dual_problem = Dualization . DualProblem (JuMP. backend (dual_model))
23
+ Dualization . dualize (JuMP. backend (model), dual_problem; kwargs... )
9
24
_fill_obj_dict_with_variables! (dual_model)
10
25
_fill_obj_dict_with_constraints! (dual_model)
11
26
if optimizer_constructor != = nothing
@@ -60,10 +75,13 @@ function _get_primal_dual_map(model::JuMP.Model)
60
75
return model. ext[:_Dualization_jl_PrimalDualMap ]
61
76
end
62
77
63
- function _get_dual_constraint (dual_model, primal_ref:: JuMP.VariableRef )
78
+ function Dualization. _get_dual_constraint (
79
+ dual_model,
80
+ primal_ref:: JuMP.VariableRef ,
81
+ )
64
82
map = _get_primal_dual_map (dual_model)
65
83
moi_primal_vi = JuMP. index (primal_ref)
66
- moi_dual_ci, idx = _get_dual_constraint (map, moi_primal_vi)
84
+ moi_dual_ci, idx = Dualization . _get_dual_constraint (map, moi_primal_vi)
67
85
# dual_model = nothing # TODO
68
86
if idx === nothing
69
87
# variables fixed at zero
@@ -72,27 +90,27 @@ function _get_dual_constraint(dual_model, primal_ref::JuMP.VariableRef)
72
90
return JuMP. constraint_ref_with_index (dual_model, moi_dual_ci), idx
73
91
end
74
92
75
- function _get_primal_constraint (
93
+ function Dualization . _get_primal_constraint (
76
94
dual_model:: JuMP.Model ,
77
95
primal_vi:: JuMP.VariableRef ,
78
96
)
79
97
primal_model = JuMP. owner_model (primal_vi)
80
98
map = _get_primal_dual_map (dual_model)
81
99
moi_primal_vi = JuMP. index (primal_vi)
82
- primal_ci, idx = _get_primal_constraint (map, moi_primal_vi)
100
+ primal_ci, idx = Dualization . _get_primal_constraint (map, moi_primal_vi)
83
101
if primal_ci === nothing
84
102
return nothing , idx
85
103
end
86
104
return JuMP. constraint_ref_with_index (primal_model, primal_ci), idx
87
105
end
88
106
89
- function _get_dual_variables (
107
+ function Dualization . _get_dual_variables (
90
108
dual_model:: JuMP.Model ,
91
109
primal_ref:: JuMP.ConstraintRef ,
92
110
)
93
111
map = _get_primal_dual_map (dual_model)
94
112
moi_primal_ci = JuMP. index (primal_ref)
95
- moi_dual_vis = _get_dual_variables (map, moi_primal_ci)
113
+ moi_dual_vis = Dualization . _get_dual_variables (map, moi_primal_ci)
96
114
if moi_dual_vis === nothing
97
115
# main constraint of a constrained variable
98
116
return nothing
@@ -101,13 +119,13 @@ function _get_dual_variables(
101
119
end
102
120
103
121
# this is a constrained variable constraint
104
- function _get_dual_constraint (
122
+ function Dualization . _get_dual_constraint (
105
123
dual_model:: JuMP.Model ,
106
124
primal_ref:: JuMP.ConstraintRef ,
107
125
)
108
126
map = _get_primal_dual_map (dual_model)
109
127
moi_primal_ci = JuMP. index (primal_ref)
110
- moi_dual_ci = _get_dual_constraint (map, moi_primal_ci)
128
+ moi_dual_ci = Dualization . _get_dual_constraint (map, moi_primal_ci)
111
129
if moi_dual_ci === nothing
112
130
# main constraint of a constrained variable
113
131
# or
@@ -117,13 +135,15 @@ function _get_dual_constraint(
117
135
return JuMP. constraint_ref_with_index (dual_model, moi_dual_ci)
118
136
end
119
137
120
- function _get_dual_parameter (
138
+ function Dualization . _get_dual_parameter (
121
139
dual_model:: JuMP.Model ,
122
140
primal_ref:: JuMP.VariableRef ,
123
141
)
124
142
map = _get_primal_dual_map (dual_model)
125
143
moi_primal_vi = JuMP. index (primal_ref)
126
- moi_dual_vi = _get_dual_parameter (map, moi_primal_vi)
144
+ moi_dual_vi = Dualization . _get_dual_parameter (map, moi_primal_vi)
127
145
# the above line might error
128
146
return JuMP. VariableRef (dual_model, moi_dual_vi)
129
147
end
148
+
149
+ end # module DualizationJuMPExt
0 commit comments