Skip to content

Commit c321f0d

Browse files
authored
[FileFormats.CBF] use add_constrained_variables when reading (#2476)
1 parent 8356e1c commit c321f0d

File tree

1 file changed

+16
-24
lines changed

1 file changed

+16
-24
lines changed

src/FileFormats/CBF/read.jl

+16-24
Original file line numberDiff line numberDiff line change
@@ -133,40 +133,32 @@ end
133133
function _read_PSDVAR(io::IO, model::Model, data::_CBFReadData)
134134
for _ in 1:_read(io, Int)
135135
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)
144139
end
145140
return
146141
end
147142

148143
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)
152145
for _ in 1:num_lines
153146
cone_str, cone_dim = _read(io, String, Int)
147+
set = _cbf_to_moi_cone(data, cone_str, cone_dim)
154148
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)
161160
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
168161
end
169-
@assert var_idx == num_var
170162
return
171163
end
172164

0 commit comments

Comments
 (0)