lanl-ansi / Juniper.jl

A JuMP-based Nonlinear Integer Program Solver
https://lanl-ansi.github.io/Juniper.jl/stable/
MIT License
179 stars 22 forks source link

MOSEK error 3915: There is no barx available for the solution type 2. #246

Closed GabrielPonte closed 2 years ago

GabrielPonte commented 2 years ago

Hi, I'm trying to solver a problem with a logdet objective function. The continuous relaxation can be solved by Mosek using LogDetTriangle, but when I'm using Juniper with Mosek, it throws to me an error. Could you please help me with it?

using JuMP, LinearAlgebra, MosekTools
function lower_triangular(A)
    return [A[i, j] for i = 1:size(A, 1) for j = 1:i]
end
nl_solver = optimizer_with_attributes(Mosek.Optimizer);
minlp_solver = optimizer_with_attributes(Juniper.Optimizer, "nl_solver"=>nl_solver)
model = Model(minlp_solver);
@variable(model,t);
@variable(model, x[1:n],Int);
@constraint(model, nu, s-sum(x)==0);
@constraint(model, theta[i in (1:n)], x[i] >= 0);
@constraint(model, lambda[i in (1:n)], u[i] - x[i] >= 0);
B = lower_triangular(A'*diagm(x)*A);
@constraint(model, [t; 1; B] in MOI.LogDetConeTriangle(m));
@objective(model, Max, t);
optimize!(model)
MOSEK error 3915: There is no barx available for the solution type 2.
Mosek.MosekError(3915, "There is no barx available for the solution type 2.")
Stacktrace:
  [1] getbarxj(task_::Mosek.Task, whichsol_::Mosek.Soltype, j_::Int32)
    @ Mosek C:\Users\Cliente\.julia\packages\Mosek\au3Cq\src\msk_functions.jl:2105
  [2] getbarxj
    @ C:\Users\Cliente\.julia\packages\Mosek\au3Cq\src\msk_functions.jl:2095 [inlined]
  [3] matrix_solution(m::MosekModel, sol::Mosek.Soltype)
    @ MosekTools C:\Users\Cliente\.julia\packages\MosekTools\sppJY\src\MosekTools.jl:268
  [4] optimize!(m::MosekModel)
    @ MosekTools C:\Users\Cliente\.julia\packages\MosekTools\sppJY\src\MosekTools.jl:275
  [5] optimize!(b::MathOptInterface.Bridges.LazyBridgeOptimizer{MosekModel})
    @ MathOptInterface.Bridges C:\Users\Cliente\.julia\packages\MathOptInterface\YDdD3\src\Bridges\bridge_optimizer.jl:319
  [6] solve_root_incumbent_model(jp::Juniper.JuniperProblem)
    @ Juniper C:\Users\Cliente\.julia\packages\Juniper\8wso7\src\model.jl:37
  [7] optimize!(model::Juniper.Optimizer)
    @ Juniper C:\Users\Cliente\.julia\packages\Juniper\8wso7\src\MOI_wrapper\MOI_wrapper.jl:248
  [8] optimize!(b::MathOptInterface.Bridges.LazyBridgeOptimizer{Juniper.Optimizer})
    @ MathOptInterface.Bridges C:\Users\Cliente\.julia\packages\MathOptInterface\YDdD3\src\Bridges\bridge_optimizer.jl:319
  [9] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.AbstractOptimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}})
    @ MathOptInterface.Utilities C:\Users\Cliente\.julia\packages\MathOptInterface\YDdD3\src\Utilities\cachingoptimizer.jl:252
 [10] optimize!(model::Model, optimizer_factory::Nothing; bridge_constraints::Bool, ignore_optimize_hook::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ JuMP C:\Users\Cliente\.julia\packages\JuMP\klrjG\src\optimizer_interface.jl:185
 [11] optimize! (repeats 2 times)
    @ C:\Users\Cliente\.julia\packages\JuMP\klrjG\src\optimizer_interface.jl:157 [inlined]
 [12] top-level scope
    @ In[62]:1
 [13] eval
    @ .\boot.jl:373 [inlined]
 [14] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base .\loading.jl:1196
ccoffrin commented 2 years ago

@odow maybe you have some insights on this?

odow commented 2 years ago

What's the Mosek log look like?

GabrielPonte commented 2 years ago

To the integer problem I received:

nl_solver         : MathOptInterface.OptimizerWithAttributes(Mosek.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[])
feasibility_pump  : false
log_levels        : [:Options, :Table, :Info]

#Variables: 21
#IntBinVar: 20
Obj Sense: Max

Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 112             
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer started.
Presolve started.
Eliminator - tries                  : 0                 time                   : 0.00            
Lin. dep.  - tries                  : 0                 time                   : 0.00            
Lin. dep.  - number                 : 0               
Presolve terminated. Time: 0.00    
Optimizer terminated. Time: 0.00    

MOSEK error 3915: There is no barx available for the solution type 2.
Mosek.MosekError(3915, "There is no barx available for the solution type 2.")

But if I try to solve the continuous relaxation problem using Juniper, I get this
nl_solver         : MathOptInterface.OptimizerWithAttributes(Mosek.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[])
feasibility_pump  : false
log_levels        : [:Options, :Table, :Info]

#Variables: 21
#IntBinVar: 0
Obj Sense: Max

Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 112             
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer started.
Presolve started.
Linear dependency checker started.
Linear dependency checker terminated.
Eliminator started.
Freed constraints in eliminator : 0
Eliminator terminated.
Eliminator - tries                  : 1                 time                   : 0.00            
Lin. dep.  - tries                  : 1                 time                   : 0.00            
Lin. dep.  - number                 : 0               
Presolve terminated. Time: 0.00    
Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 112             
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer  - threads                : 4               
Optimizer  - solved problem         : the primal      
Optimizer  - Constraints            : 56
Optimizer  - Cones                  : 6
Optimizer  - Scalar variables       : 42                conic                  : 26              
Optimizer  - Semi-definite variables: 1                 scalarized             : 55              
Factor     - setup time             : 0.00              dense det. time        : 0.00            
Factor     - ML order time          : 0.00              GP order time          : 0.00            
Factor     - nonzeros before factor : 1556              after factor           : 1556            
Factor     - dense dim.             : 0                 flops                  : 7.33e+04        
ITE PFEAS    DFEAS    GFEAS    PRSTATUS   POBJ              DOBJ              MU       TIME  
0   1.0e+01  1.3e+00  9.2e+00  0.00e+00   -4.139191995e+00  4.025510008e+00   1.0e+00  0.00  
1   3.6e+00  4.7e-01  2.3e+00  1.30e-01   -6.292682594e-01  3.070976911e+00   3.6e-01  0.00  
2   8.8e-01  1.1e-01  3.1e-01  6.58e-01   2.878837892e+00   3.897308677e+00   8.8e-02  0.00  
3   3.7e-01  4.8e-02  9.8e-02  7.52e-01   4.542779248e+00   5.021396013e+00   3.7e-02  0.00  
4   1.1e-01  1.4e-02  1.6e-02  8.61e-01   5.330785460e+00   5.474247778e+00   1.1e-02  0.00  
5   3.7e-02  4.8e-03  3.5e-03  9.04e-01   5.657260601e+00   5.708623052e+00   3.7e-03  0.00  
6   5.6e-03  7.2e-04  2.1e-04  9.79e-01   5.770077355e+00   5.777792726e+00   5.6e-04  0.00  
7   1.2e-03  1.6e-04  2.2e-05  9.93e-01   5.795726539e+00   5.797452819e+00   1.2e-04  0.00  
8   3.4e-04  4.4e-05  3.3e-06  9.98e-01   5.800510299e+00   5.800985510e+00   3.4e-05  0.00  
9   5.3e-05  6.8e-06  2.0e-07  1.00e+00   5.802054044e+00   5.802126387e+00   5.3e-06  0.00  
10  6.5e-06  8.4e-07  8.6e-09  1.00e+00   5.802315285e+00   5.802324181e+00   6.5e-07  0.00  
11  5.0e-07  6.4e-08  1.8e-10  1.00e+00   5.802348461e+00   5.802349140e+00   5.0e-08  0.00  
12  2.9e-08  3.7e-09  2.6e-12  1.00e+00   5.802351018e+00   5.802351057e+00   2.9e-09  0.00  
Optimizer terminated. Time: 0.00    

MOSEK error 3915: There is no barx available for the solution type 2.
Mosek.MosekError(3915, "There is no barx available for the solution type 2.")

Stacktrace:
  [1] getbarxj(task_::Mosek.Task, whichsol_::Mosek.Soltype, j_::Int32)
    @ Mosek C:\Users\Cliente\.julia\packages\Mosek\au3Cq\src\msk_functions.jl:2105
  [2] getbarxj
    @ C:\Users\Cliente\.julia\packages\Mosek\au3Cq\src\msk_functions.jl:2095 [inlined]
  [3] matrix_solution(m::MosekModel, sol::Mosek.Soltype)
    @ MosekTools C:\Users\Cliente\.julia\packages\MosekTools\sppJY\src\MosekTools.jl:268
  [4] optimize!(m::MosekModel)
    @ MosekTools C:\Users\Cliente\.julia\packages\MosekTools\sppJY\src\MosekTools.jl:275
  [5] optimize!(b::MathOptInterface.Bridges.LazyBridgeOptimizer{MosekModel})
    @ MathOptInterface.Bridges C:\Users\Cliente\.julia\packages\MathOptInterface\YDdD3\src\Bridges\bridge_optimizer.jl:319
  [6] solve_root_incumbent_model(jp::Juniper.JuniperProblem)
    @ Juniper C:\Users\Cliente\.julia\packages\Juniper\8wso7\src\model.jl:37
  [7] optimize!(model::Juniper.Optimizer)
    @ Juniper C:\Users\Cliente\.julia\packages\Juniper\8wso7\src\MOI_wrapper\MOI_wrapper.jl:248
  [8] optimize!(b::MathOptInterface.Bridges.LazyBridgeOptimizer{Juniper.Optimizer})
    @ MathOptInterface.Bridges C:\Users\Cliente\.julia\packages\MathOptInterface\YDdD3\src\Bridges\bridge_optimizer.jl:319
  [9] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.AbstractOptimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}})
    @ MathOptInterface.Utilities C:\Users\Cliente\.julia\packages\MathOptInterface\YDdD3\src\Utilities\cachingoptimizer.jl:252
 [10] optimize!(model::Model, optimizer_factory::Nothing; bridge_constraints::Bool, ignore_optimize_hook::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ JuMP C:\Users\Cliente\.julia\packages\JuMP\klrjG\src\optimizer_interface.jl:185
 [11] optimize! (repeats 2 times)
    @ C:\Users\Cliente\.julia\packages\JuMP\klrjG\src\optimizer_interface.jl:157 [inlined]
 [12] top-level scope
    @ In[53]:1
 [13] eval
    @ .\boot.jl:373 [inlined]
 [14] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base .\loading.jl:1196
odow commented 2 years ago

Already reported: https://github.com/jump-dev/MosekTools.jl/issues/72

GabrielPonte commented 2 years ago

Thank you! This solved my initial issue, but now I'm receiving a wrong solution to my problem

nl_solver         : MathOptInterface.OptimizerWithAttributes(Mosek.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[])
feasibility_pump  : false
log_levels        : [:Options, :Table, :Info]

#Variables: 21
#IntBinVar: 20
Obj Sense: Max

Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 72              
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer started.
Presolve started.
Eliminator - tries                  : 0                 time                   : 0.00            
Lin. dep.  - tries                  : 0                 time                   : 0.00            
Lin. dep.  - number                 : 0               
Presolve terminated. Time: 0.00    
Optimizer terminated. Time: 0.00    

Start values are not feasible.
Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 72              
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer started.
Optimizer terminated. Time: 0.00    

Status of relaxation: OPTIMAL
Time for relaxation: 0.01100015640258789
Relaxation Obj: 0.0
Obj: 0.0
objective_value(model)

I get a zero solution. When I try the continuous relaxation, there's no errors and the Mosek log is correct, but I also receive a zero solution

nl_solver         : MathOptInterface.OptimizerWithAttributes(Mosek.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[])
feasibility_pump  : false
log_levels        : [:Options, :Table, :Info]

#Variables: 21
#IntBinVar: 0
Obj Sense: Max

Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 72              
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer started.
Presolve started.
Linear dependency checker started.
Linear dependency checker terminated.
Eliminator started.
Freed constraints in eliminator : 0
Eliminator terminated.
Eliminator - tries                  : 1                 time                   : 0.00            
Lin. dep.  - tries                  : 1                 time                   : 0.00            
Lin. dep.  - number                 : 0               
Presolve terminated. Time: 0.00    
Problem
  Name                   :                 
  Objective sense        : max             
  Type                   : CONIC (conic optimization problem)
  Constraints            : 72              
  Cones                  : 5               
  Scalar variables       : 56              
  Matrix variables       : 1               
  Integer variables      : 0               

Optimizer  - threads                : 4               
Optimizer  - solved problem         : the primal      
Optimizer  - Constraints            : 56
Optimizer  - Cones                  : 6
Optimizer  - Scalar variables       : 42                conic                  : 26              
Optimizer  - Semi-definite variables: 1                 scalarized             : 55              
Factor     - setup time             : 0.00              dense det. time        : 0.00            
Factor     - ML order time          : 0.00              GP order time          : 0.00            
Factor     - nonzeros before factor : 1556              after factor           : 1556            
Factor     - dense dim.             : 0                 flops                  : 7.33e+04        
ITE PFEAS    DFEAS    GFEAS    PRSTATUS   POBJ              DOBJ              MU       TIME  
0   1.0e+01  1.3e+00  9.2e+00  0.00e+00   -4.139191995e+00  4.025510008e+00   1.0e+00  0.00  
1   3.6e+00  4.7e-01  2.3e+00  1.30e-01   -6.292682594e-01  3.070976911e+00   3.6e-01  0.01  
2   8.8e-01  1.1e-01  3.1e-01  6.58e-01   2.878837892e+00   3.897308677e+00   8.8e-02  0.01  
3   3.7e-01  4.8e-02  9.8e-02  7.52e-01   4.542779248e+00   5.021396013e+00   3.7e-02  0.01  
4   1.1e-01  1.4e-02  1.6e-02  8.61e-01   5.330785460e+00   5.474247778e+00   1.1e-02  0.01  
5   3.7e-02  4.8e-03  3.5e-03  9.04e-01   5.657260601e+00   5.708623052e+00   3.7e-03  0.01  
6   5.6e-03  7.2e-04  2.1e-04  9.79e-01   5.770077355e+00   5.777792726e+00   5.6e-04  0.01  
7   1.2e-03  1.6e-04  2.2e-05  9.93e-01   5.795726539e+00   5.797452819e+00   1.2e-04  0.01  
8   3.4e-04  4.4e-05  3.3e-06  9.98e-01   5.800510299e+00   5.800985510e+00   3.4e-05  0.01  
9   5.3e-05  6.8e-06  2.0e-07  1.00e+00   5.802054044e+00   5.802126387e+00   5.3e-06  0.01  
10  6.5e-06  8.4e-07  8.6e-09  1.00e+00   5.802315285e+00   5.802324181e+00   6.5e-07  0.01  
11  5.0e-07  6.4e-08  1.8e-10  1.00e+00   5.802348461e+00   5.802349140e+00   5.0e-08  0.01  
12  2.9e-08  3.7e-09  2.6e-12  1.00e+00   5.802351018e+00   5.802351057e+00   2.9e-09  0.01  
Optimizer terminated. Time: 0.01    

Incumbent using start values: 0.0
Optimizer started.
Optimizer terminated. Time: 0.00    

Status of relaxation: OPTIMAL
Time for relaxation: 0.019999980926513672
Relaxation Obj: 0.0
Obj: 0.0
odow commented 2 years ago

I don't have a Mosek license, so it's pretty hard for me to debug this.

GabrielPonte commented 2 years ago

No problem! The link that you gave me was really helpful for me to debug it and now I'm able to get the value of the continuous relaxation using Juniper with Mosek. Thanks! Now I'm facing a new issue when trying to use the integer problem, not only from Mosek, but from SCS as well. Thanks a lot for your help!