It has been a while that CPLEX can solve nonconvex quadratic programming problems. But I am wondering if that has been considered in JuMP.
The reason I am asking is that I coded the following:
Q=[-50.0    0.0    0.0    0.0    0.0  42.0
   0.0  -50.0    0.0    0.0    0.0  44.0
   0.0    0.0  -50.0    0.0    0.0  45.0
   0.0    0.0    0.0  -50.0    0.0  47.0
   0.0    0.0    0.0    0.0  -50.0  47.5
  42.0   44.0   45.0   47.0   47.5  -0.0];
  A_x=[ 1.0   0.0   0.0  0.0  0.0   0.0
  0.0   1.0   0.0  0.0  0.0   0.0
  0.0   0.0   1.0  0.0  0.0   0.0
  0.0   0.0   0.0  1.0  0.0   0.0
  0.0   0.0   0.0  0.0  1.0   0.0
  0.0   0.0   0.0  0.0  0.0   1.0
  0.0   0.0   0.0  0.0  0.0  -1.0
 20.0  12.0  11.0  7.0  4.0   0.0];
 b_x=[1.0
  1.0
  1.0
  1.0
  1.0
  0.5
 -0.5
 40.0]
n=6;
model = Model(CPLEX.Optimizer)
@variable(model, x[1:n]>=0)
@objective(model, Min, x'*Q*x)
con = @constraint(model, A_x*x .<= b_x)
sol_cplex=optimize!(model)
in Julia 1.5.3 using JuMP 0.21.5 and CPLEX 12.10, and got the following error:
ERROR: LoadError: CPLEX Error  5002: %s is not convex.
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] _check_ret(::CPLEX.Env, ::Int32) at C:\Users\20176914\.julia\packages\CPLEX\uUjlQ\src\MOI\MOI_wrapper.jl:126
 [3] _check_ret at C:\Users\20176914\.julia\packages\CPLEX\uUjlQ\src\MOI\MOI_wrapper.jl:243 [inlined]
 [4] _optimize!(::CPLEX.Optimizer) at C:\Users\20176914\.julia\packages\CPLEX\uUjlQ\src\MOI\MOI_wrapper.jl:2431
 [5] optimize!(::CPLEX.Optimizer) at C:\Users\20176914\.julia\packages\CPLEX\uUjlQ\src\MOI\MOI_wrapper.jl:2488
 [6] optimize!(::MathOptInterface.Bridges.LazyBridgeOptimizer{CPLEX.Optimizer}) at C:\Users\20176914\.julia\packages\MathOptInterface\ZJFKw\src\Bridges\bridge_optimizer.jl:264
 [7] optimize!(::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.AbstractOptimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}) at C:\Users\20176914\.julia\packages\MathOptInterface\ZJFKw\src\Utilities\cachingoptimizer.jl:215
 [8] optimize!(::Model, ::Nothing; bridge_constraints::Bool, ignore_optimize_hook::Bool, kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at C:\Users\20176914\.julia\packages\JuMP\qhoVb\src\optimizer_interface.jl:130
 [9] optimize! at C:\Users\20176914\.julia\packages\JuMP\qhoVb\src\optimizer_interface.jl:106 [inlined] (repeats 2 times)
 [10] top-level scope at C:\Users\20176914\surfdrive\scientific\University\Codes\MATLAB\Bilinearprog\readLP.jl:46
 [11] include(::String) at .\client.jl:457
 [12] top-level scope at REPL[2]:1
in expression starting at C:\Users\20176914\surfdrive\scientific\University\Codes\MATLAB\Bilinearprog\readLP.jl:46
I know from past experience that there are different functions to make the distinction between convex and non-convex. So, I am now wondering if it is only possible to solve convex QPs in JuMP using CPLEX.
Does anyone have any experience with that?