Implement add/remove_constraints

master
Alinson S. Xavier 4 years ago
parent 9cc51e9702
commit 60e1c1dc0c

@ -109,6 +109,46 @@ function are_constraints_satisfied(
end end
function add_constraints(
data::JuMPSolverData;
lhs::Vector{Vector{Tuple{String, Float64}}},
rhs::Vector{Float64},
senses::Vector{String},
names::Vector{String},
)::Nothing
for (i, sense) in enumerate(senses)
lhs_expr = AffExpr(0.0)
for (varname, coeff) in lhs[i]
var = data.varname_to_var[varname]
add_to_expression!(lhs_expr, var, coeff)
end
if sense == "<"
constr = @constraint(data.model, lhs_expr <= rhs[i])
elseif sense == ">"
constr = @constraint(data.model, lhs_expr >= rhs[i])
else
constr = @constraint(data.model, lhs_expr == rhs[i])
end
set_name(constr, names[i])
data.cname_to_constr[names[i]] = constr
end
return
end
function remove_constraints(
data::JuMPSolverData,
names::Vector{String},
)::Nothing
for name in names
constr = data.cname_to_constr[name]
delete(data.model, constr)
delete!(data.cname_to_constr, name)
end
return
end
function solve( function solve(
data::JuMPSolverData; data::JuMPSolverData;
tee::Bool=false, tee::Bool=false,
@ -401,7 +441,13 @@ end
end end
add_constraints(self, cf) = add_constraints(self, cf) =
error("not implemented") add_constraints(
self.data,
lhs=[[term for term in constr] for constr in cf.lhs],
rhs=[r for r in cf.rhs],
senses=[s for s in cf.senses],
names=[n for n in cf.names],
)
are_constraints_satisfied(self, cf; tol=1e-5) = are_constraints_satisfied(self, cf; tol=1e-5) =
tuple(are_constraints_satisfied( tuple(are_constraints_satisfied(
@ -478,7 +524,10 @@ end
is_infeasible(self.data) is_infeasible(self.data)
remove_constraints(self, names) = remove_constraints(self, names) =
error("not implemented") remove_constraints(
self.data,
[n for n in names],
)
set_instance(self, instance, model) = set_instance(self, instance, model) =
set_instance!(self.data, instance, model) set_instance!(self.data, instance, model)

Loading…
Cancel
Save