Specs: JuMP version 0.20.1, MOI version 0.9.12, CPLEX version 12.10, CPLEX.jl version 0.6.3.
When using JuMP and CPLEX to solve a problem via outer approximation (using a generic lazy callback), I’m getting the following error at the first fractional node the callback is called at (the callback works fine the first 5-6 times its called at strictly integral points).
CPLEX Error 1811: Attempt to invoke unsupported operation…
Got exception outside of a @test
CPLEX.CplexError(1811, “CPLEX Error 1811: Attempt to invoke unsupported operation…\n”)
Stacktrace:
[1] return_status_or_throw at /Users/ryangeorgecory-wright/.julia/packages/CPLEX/VVr3o/src/cpx_generic_callbacks.jl:24 [inlined]
[2] cbrejectcandidate(::CPLEX.CallbackContext, ::Int32, ::Int32, ::Array{Float64,1}, ::Array{Int8,1}, ::Array{Int32,1}, ::Array{Int32,1}, ::Array{Float64,1}) at /Users/ryangeorgecory-wright/.julia/packages/CPLEX/VVr3o/src/cpx_generic_callbacks.jl:161
[3] submit(::CPLEX.Optimizer, ::MathOptInterface.LazyConstraint{CPLEX.CallbackContext}, ::MathOptInterface.ScalarAffineFunction{Float64}, ::MathOptInterface.LessThan{Float64}) at /Users/ryangeorgecory-wright/.julia/packages/CPLEX/VVr3o/src/MOI/MOI_callbacks.jl:142
[4] submit(::MathOptInterface.Bridges.LazyBridgeOptimizer{CPLEX.Optimizer}, ::MathOptInterface.LazyConstraint{CPLEX.CallbackContext}, ::MathOptInterface.ScalarAffineFunction{Float64}, ::MathOptInterface.LessThan{Float64}) at /Users/ryangeorgecory-wright/.julia/packages/MathOptInterface/XiH8D/src/Bridges/bridge_optimizer.jl:1195
Note that I’m rounding the fractional solution to be integral and then generating the cut at the integral point, since I don’t have a cheap way of generating the cut at a strictly fractional point. I was wondering whether this is a known issue/something which people could maybe propose a workaround for (e.g. is there an equivalent of “fractional=false” in new JuMP?).
I think this might be a bug in either CPLEX or the bridge between JuMP and CPLEX, since the same code works correctly when using Gurobi 9.0 and JuMP.
I can also cook up a minimal working example if requested