@@ -133,40 +133,32 @@ end
133
133
function _read_PSDVAR (io:: IO , model:: Model , data:: _CBFReadData )
134
134
for _ in 1 : _read (io, Int)
135
135
side_dim = _read (io, Int)
136
- cone_dim = div (side_dim * (side_dim + 1 ), 2 )
137
- psd_vars_k = MOI. add_variables (model, cone_dim)
138
- push! (data. psd_vars, psd_vars_k)
139
- MOI. add_constraint (
140
- model,
141
- MOI. VectorOfVariables (psd_vars_k),
142
- MOI. PositiveSemidefiniteConeTriangle (side_dim),
143
- )
136
+ set = MOI. PositiveSemidefiniteConeTriangle (side_dim)
137
+ x, _ = MOI. add_constrained_variables (model, set)
138
+ push! (data. psd_vars, x)
144
139
end
145
140
return
146
141
end
147
142
148
143
function _read_VAR (io:: IO , model:: Model , data:: _CBFReadData )
149
- num_var, num_lines = _read (io, Int, Int)
150
- append! (data. scalar_vars, MOI. add_variables (model, num_var))
151
- var_idx = 0
144
+ _, num_lines = _read (io, Int, Int)
152
145
for _ in 1 : num_lines
153
146
cone_str, cone_dim = _read (io, String, Int)
147
+ set = _cbf_to_moi_cone (data, cone_str, cone_dim)
154
148
if cone_str == " F"
155
- var_idx += cone_dim
156
- continue # Free cones (no constraint).
157
- end
158
- indices = 1 : cone_dim
159
- if cone_str == " EXP" || cone_str == " EXP*"
160
- indices = (3 : - 1 : 1 )
149
+ # Free cones (no constraint).
150
+ append! (data. scalar_vars, MOI. add_variables (model, cone_dim))
151
+ elseif cone_str == " EXP" || cone_str == " EXP*"
152
+ # The convention in CBF is the reverse of MOI, so we cannot use
153
+ # add_constrained_variables.
154
+ x = MOI. add_variables (model, 3 )
155
+ append! (data. scalar_vars, x)
156
+ MOI. add_constraint (model, MOI. VectorOfVariables (reverse (x)), set)
157
+ else
158
+ x, _ = MOI. add_constrained_variables (model, set)
159
+ append! (data. scalar_vars, x)
161
160
end
162
- MOI. add_constraint (
163
- model,
164
- MOI. VectorOfVariables (data. scalar_vars[var_idx.+ indices]),
165
- _cbf_to_moi_cone (data, cone_str, cone_dim),
166
- )
167
- var_idx += cone_dim
168
161
end
169
- @assert var_idx == num_var
170
162
return
171
163
end
172
164
0 commit comments