Using Juniper with Convex.jl

I am trying to solve a MISOCP, modeled using Convex.jl, and I thought that trying to solve it with Juniper would be great since it is one of the non-commercial solvers that can handle this problem. However, when I call solve! I got this error

ERROR: LoadError: MathOptInterface.AddConstraintNotAllowed{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives}: Adding `MathOptInterface.VectorAffineFunction{Float64}`-in-`MathOptInterface.Nonnegatives` constraints cannot be performed: MatrixOfConstraints does not allow modifications to be made to the model once
`MOI.Utilities.final_touch` has been called. This is called at the end of
`MOI.copy_to` and in `MOI.Utilities.attach_optimizer` (which is called by
`MOI.optimize!` in a `MOI.Utilities.CachingOptimizer`). In order to be able to
apply modifications to this model, you should add a layer
`MOI.Utilities.CachingOptimizer(MOI.Utilities.Model{Float64}(), model)`
where `model` is the current model. This will automatically empty `model` when
modifications are done after `MOI.Utilities.final_touch` is called and copy the
model again in `MOI.Utilities.attach_optimizer`.
 You may want to use a `CachingOptimizer` in `AUTOMATIC` mode or you may need to call `reset_optimizer` before doing this operation if the `CachingOptimizer` is in `MANUAL` mode.

This is a MWE to reproduce the error (example taken from the Convex.jl docs):

using Convex, Juniper, ECOS
const MOI = Convex.MOI

w = [23; 31; 29; 44; 53; 38; 63; 85; 89; 82]
C = 165
p = [92; 57; 49; 68; 60; 43; 67; 84; 87; 72];
n = length(w)
x = Variable(n, BinVar)
problem = maximize(dot(p, x), dot(w, x) <= C)
opt = MOI.OptimizerWithAttributes(Juniper.Optimizer,
    "nl_solver" => MOI.OptimizerWithAttributes(ECOS.Optimizer, MOI.Silent() => true))
solve!(problem, opt)

Is this something expected (e.g., Convex.jl does not support Juniper) or am I missing something?

I don’t know if I have tested Juniper with Convex.

Do you want to open an issue? Issues · jump-dev/Convex.jl · GitHub

Yes, sure. I’ll do it now

1 Like