MOSEK / Mosek.jl

Interface to the Mosek solver in Julia
MIT License
49 stars 28 forks source link

UndefVarError: MosekError not defined #135

Closed MFairley closed 6 years ago

MFairley commented 6 years ago

I'm getting the following error: UndefVarError: MosekError not defined

Here is the solver output for the model I'm trying to solve and the stack trace. I assume that there is some Mosek error but I cannot see the error because Julia is not seeing the MosekError type.

I'm using JuMP to define my model.

Problem Name :
Objective sense : max
Type : GECO (general convex optimization problem) Constraints : 10
Cones : 0
Scalar variables : 11
Matrix variables : 0
Integer variables : 0

Optimizer - threads : 4
Optimizer - solved problem : the primal
Optimizer - Constraints : 10 Optimizer - Cones : 0 Optimizer - Scalar variables : 11 conic : 0
Optimizer - Semi-definite variables: 0 scalarized : 0
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 : 16 after factor : 16
Factor - dense dim. : 0 flops : 2.10e+01
ITE PFEAS DFEAS GFEAS PRSTATUS POBJ DOBJ MU TIME
UndefVarError: MosekError not defined

Stacktrace: [1] optimize!(::Mosek.MosekMathProgSolverInterface.MosekLinearQuadraticModel) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:647 [2] optimize!(::Mosek.MosekMathProgSolverInterface.MosekNonlinearModel) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:1237 [3] #solvenlp#165(::Bool, ::Function, ::JuMP.Model, ::JuMP.ProblemTraits) at /Users/mfairley/.julia/v0.6/JuMP/src/nlp.jl:1271 [4] (::JuMP.#kw##solvenlp)(::Array{Any,1}, ::JuMP.#solvenlp, ::JuMP.Model, ::JuMP.ProblemTraits) at ./:0 [5] #solve#116(::Bool, ::Bool, ::Bool, ::Array{Any,1}, ::Function, ::JuMP.Model) at /Users/mfairley/.julia/v0.6/JuMP/src/solvers.jl:172 [6] #online_cpcam#1(::Int64, ::Function, ::Int64, ::Int64, ::Array{Float64,1}, ::online_lp.##2#8{Int64}, ::online_lp.##3#9{Array{Int64,1}}, ::online_lp.##4#10{Int64}) at /Users/mfairley/Source/mse310/online_lp.jl:35 [7] simulation_q3(::Int64, ::Int64) at /Users/mfairley/Source/mse310/online_lp.jl:80 [8] include_string(::String, ::String) at ./loading.jl:522

MFairley commented 6 years ago

Changing line 647 of MosekLPQCQPInterface.jl to

if isa(err, Mosek.MosekError)

fixed the UndefVarError and then resulted in the following error:

SYSTEM: show(lasterr) caused an error

Stacktrace: [1] msk_nl_getva_wrapper_mpb(::Ptr{Void}, ::Ptr{Float64}, ::Float64, ::Ptr{Float64}, ::Ptr{Float64}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}, ::Int32, ::Ptr{Int32}, ::Ptr{Float64}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}, ::Ptr{Float64}, ::Int32, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:976 [2] macro expansion at /Users/mfairley/.julia/v0.6/Mosek/src/Mosek.jl:19 [inlined] [3] #343 at /Users/mfairley/.julia/v0.6/Mosek/src/msk_functions.jl:5066 [inlined] [4] disable_sigint(::Mosek.##343#344{Mosek.Task,Array{Int32,1}}) at ./c.jl:340 [5] optimize(::Mosek.Task) at /Users/mfairley/.julia/v0.6/Mosek/src/msk_functions.jl:5065 [6] optimize!(::Mosek.MosekMathProgSolverInterface.MosekLinearQuadraticModel) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:644 [7] optimize!(::Mosek.MosekMathProgSolverInterface.MosekNonlinearModel) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:1237 [8] #solvenlp#165(::Bool, ::Function, ::JuMP.Model, ::JuMP.ProblemTraits) at /Users/mfairley/.julia/v0.6/JuMP/src/nlp.jl:1271 [9] (::JuMP.#kw##solvenlp)(::Array{Any,1}, ::JuMP.#solvenlp, ::JuMP.Model, ::JuMP.ProblemTraits) at ./:0 [10] #solve#116(::Bool, ::Bool, ::Bool, ::Array{Any,1}, ::Function, ::JuMP.Model) at /Users/mfairley/.julia/v0.6/JuMP/src/solvers.jl:172 [11] #online_cpcam#1(::Int64, ::Function, ::Int64, ::Int64, ::Array{Float64,1}, ::online_lp.##2#8{Int64}, ::online_lp.##3#9{Array{Int64,1}}, ::online_lp.##4#10{Int64}) at /Users/mfairley/Source/mse310/online_lp.jl:35 [12] simulation_q3(::Int64, ::Int64) at /Users/mfairley/Source/mse310/online_lp.jl:80 [13] include_string(::String, ::String) at ./loading.jl:522

MFairley commented 6 years ago

Printing err as so:

starting at line 646 of MosekLPQCQPInterface.jl

    catch err
        println(err)
        if isa(err, Mosek.MosekError)
            # println(err.rcode)
            # println(err.msg)
            m.lasttrm = err.rcode
        else
            rethrow()
        end
    end

gives

TypeError(:msk_nl_getsp_wrapper_mpb, "typeassert", Mosek.MosekMathProgSolverInterface.CallbackData, Any[Core.Inference.Const(|, false), UInt32, Core.Inference.Const(0xe0, false)])

MFairley commented 6 years ago

I printed a model that caused the above typeassert error to help with debugging. Here it is:

Max 32.02254714336948 x_k + subexpression[1] Subject to x_k + s[1] = 655.0001373681782 s[2] = 671.0001243202364 x_k + s[3] = 663.0001489903432 s[4] = 667.0001283079266 s[5] = 669.0001269672142 s[6] = 658.0001227147532 x_k + s[7] = 682.0001102896189 s[8] = 667.000118820137 x_k + s[9] = 678.0000706341123 x_k + s[10] = 643.0001303589524 s[i] ≥ 0 ∀ i ∈ {1,2,…,9,10} 0 ≤ x_k ≤ 1 subexpression[1]: (10.0 / 10.0) (log(s[1]) + log(s[2]) + log(s[3]) + log(s[4]) + log(s[5]) + log(s[6]) + log(s[7]) + log(s[8]) + log(s[9]) + log(s[10]))

MFairley commented 6 years ago

Another possibly important point is that I am solving a sequence of non-linear models in a for loop. In each for loop I create a new model as follows:

model = Model(solver=MosekSolver())

chriscoey commented 6 years ago

I am unfamiliar with the GECO interface and it seems poorly tested and rarely used through Mosek.jl. If your model is not LP/QP then it seems as though it should not be going through the LP/(QC)QP (i.e. quadratic) interface MosekLPQCQPInterface.

@mlubin @ulfworsoe

MFairley commented 6 years ago

For the majority of models in the same form as above (just with different constraint rhs), Mosek solves the model correctly. For example, I ran 680 iterations of solving models without error until I got to the 681st iteration (the above model) and the TypeAssert error occurred.

MFairley commented 6 years ago

There appears to be some randomness to the error. I've run my code multiple times in the same Julia session with the same random seed with the same number of iterations and observed

The iteration at which the error occurs also varies between runs of my code.

ERROR: TypeError: Stacktrace: [1] msk_nl_getva_wrapper_mpb(::Ptr{Void}, ::Ptr{Float64}, ::Float64, ::Ptr{Float64}, ::Ptr{Float64}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}, ::Int32, ::Ptr{Int32}, ::Ptr{Float64}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}, ::Ptr{Float64}, ::Int32, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:979 [2] macro expansion at /Users/mfairley/.julia/v0.6/Mosek/src/Mosek.jl:19 [inlined] [3] #223 at /Users/mfairley/.julia/v0.6/Mosek/src/msk_functions.jl:3354 [inlined] [4] disable_sigint(::Mosek.##223#224{Mosek.Task,Mosek.Soltype,Array{Float64,1}}) at ./c.jl:340 [5] getprimalobj(::Mosek.Task, ::Mosek.Soltype) at /Users/mfairley/.julia/v0.6/Mosek/src/msk_functions.jl:3353 [6] getobjval(::Mosek.MosekMathProgSolverInterface.MosekNonlinearModel) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:1228 [7] #solvenlp#165(::Bool, ::Function, ::JuMP.Model, ::JuMP.ProblemTraits) at /Users/mfairley/.julia/v0.6/JuMP/src/nlp.jl:1275 [8] (::JuMP.#kw##solvenlp)(::Array{Any,1}, ::JuMP.#solvenlp, ::JuMP.Model, ::JuMP.ProblemTraits) at ./:0 [9] #solve#116(::Bool, ::Bool, ::Bool, ::Array{Any,1}, ::Function, ::JuMP.Model) at /Users/mfairley/.julia/v0.6/JuMP/src/solvers.jl:172 [10] #online_cpcam#1(::Int64, ::Function, ::Int64, ::Int64, ::Array{Float64,1}, ::online_lp.##3#9{Int64,MersenneTwister}, ::online_lp.##4#10{Array{Int64,1},MersenneTwister}, ::online_lp.##5#11{Int64}) at /Users/mfairley/Source/mse310/online_lp.jl:38 [11] #simulation_q3#2(::Int64, ::Function, ::Int64, ::Int64) at /Users/mfairley/Source/mse310/online_lp.jl:84 [12] simulation_q3(::Int64, ::Int64) at /Users/mfairley/Source/mse310/online_lp.jl:73SYSTEM: show(lasterr) caused an error TypeError(:Tuple, "parameter", Type, signal (11): Segmentation fault: 11 while loading no file, in expression starting on line 0 jl_typemap_level_assoc_exact at /Users/vagrant/buildbot/worker/package_osx64/build/src/typemap.c:849 jl_typemap_assoc_exact at /Users/vagrant/buildbot/worker/package_osx64/build/src/./julia_internal.h:896 [inlined] jl_typemap_level_assoc_exact at /Users/vagrant/buildbot/worker/package_osx64/build/src/typemap.c:851 jl_typemap_assoc_exact at /Users/vagrant/buildbot/worker/package_osx64/build/src/./julia_internal.h:896 [inlined] jl_lookupgeneric at /Users/vagrant/buildbot/worker/package_osx64/build/src/gf.c:1871 jl_apply_generic at /Users/vagrant/buildbot/worker/package_osx64/build/src/gf.c:1923 show_default at ./show.jl:128 unknown function (ip: 0x10967d6b6) show at ./show.jl:125 unknown function (ip: 0x10967cb76) show_default at ./show.jl:140 unknown function (ip: 0x10967aa36) print at ./strings/io.jl:29 unknown function (ip: 0x109679f76) print at ./strings/io.jl:40 print_response at ./REPL.jl:158 unknown function (ip: 0x10965bf5d) print_response at ./REPL.jl:129 unknown function (ip: 0x10965bbdd) do_respond at ./REPL.jl:646 unknown function (ip: 0x1095e8791) do_call at /Users/vagrant/buildbot/worker/package_osx64/build/src/interpreter.c:75 eval at /Users/vagrant/buildbot/worker/package_osx64/build/src/interpreter.c:242 eval_body at /Users/vagrant/buildbot/worker/package_osx64/build/src/interpreter.c:539 jl_toplevel_eval_body at /Users/vagrant/buildbot/worker/package_osx64/build/src/interpreter.c:511 jl_toplevel_eval_flex at /Users/vagrant/buildbot/worker/package_osx64/build/src/toplevel.c:571 jl_toplevel_eval_in at /Users/vagrant/buildbot/worker/package_osx64/build/src/builtins.c:496 eval at ./boot.jl:235 jlcall_eval_18068 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line) run_interface at ./LineEdit.jl:1583 jlcall_run_interface_20155 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line) run_frontend at ./REPL.jl:945 run_repl at ./REPL.jl:180 unknown function (ip: 0x109582302) _start at ./client.jl:413 jlcall__start_18944 at /Applications/Julia-0.6.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line) true_main at /Applications/Julia-0.6.app/Contents/Resources/julia/bin/julia (unknown line) main at /Applications/Julia-0.6.app/Contents/Resources/julia/bin/julia (unknown line) Allocations: 34306841 (Pool: 34289281; Big: 17560); GC: 72 Segmentation fault: 11

erling-d-andersen commented 6 years ago

The model below should be solved on conic form using the exponential cone.The upcoming MOSEK version 9 supports that. If you want to try that then contact MOSEK support.

Max 32.02254714336948 x_k + subexpression[1] Subject to x_k + s[1] = 655.0001373681782 s[2] = 671.0001243202364 x_k + s[3] = 663.0001489903432 s[4] = 667.0001283079266 s[5] = 669.0001269672142 s[6] = 658.0001227147532 x_k + s[7] = 682.0001102896189 s[8] = 667.000118820137 x_k + s[9] = 678.0000706341123 x_k + s[10] = 643.0001303589524 s[i] ≥ 0 ∀ i ∈ {1,2,…,9,10} 0 ≤ x_k ≤ 1 subexpression[1]: (10.0 / 10.0) (log(s[1]) + log(s[2]) + log(s[3]) + log(s[4]) + log(s[5]) + log(s[6]) + log(s[7]) + log(s[8]) + log(s[9]) + log(s[10]))

2017-11-28 3:27 GMT+01:00 Michael Fairley notifications@github.com:

There appears to be some randomness to the error. I've run my code multiple times in the same Julia session with the same random seed with the same number of iterations and observed

  • no errors
  • the error I put above
  • a seg fault (output below)

The iteration at which the error occurs also varies between runs of my code.

ERROR: TypeError: Stacktrace: [1] msk_nl_getva_wrapper_mpb(::Ptr{Void}, ::Ptr{Float64}, ::Float64, ::Ptr{Float64}, ::Ptr{Float64}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}, ::Int32, ::Ptr{Int32}, ::Ptr{Float64}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}, ::Ptr{Float64}, ::Int32, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Int32}, ::Ptr{Float64}) at /Users/mfairley/.julia/v0.6/ Mosek/src/MosekLPQCQPInterface.jl:979 [2] macro expansion at /Users/mfairley/.julia/v0.6/Mosek/src/Mosek.jl:19 [inlined] [3] #223 at /Users/mfairley/.julia/v0.6/Mosek/src/msk_functions.jl:3354 [inlined] [4] disable_sigint(::Mosek.##223#224{Mosek.Task,Mosek.Soltype,Array{Float64,1}}) at ./c.jl:340 [5] getprimalobj(::Mosek.Task, ::Mosek.Soltype) at /Users/mfairley/.julia/v0.6/Mosek/src/msk_functions.jl:3353 [6] getobjval(::Mosek.MosekMathProgSolverInterface.MosekNonlinearModel) at /Users/mfairley/.julia/v0.6/Mosek/src/MosekLPQCQPInterface.jl:1228 [7] #solvenlp#165(::Bool, ::Function, ::JuMP.Model, ::JuMP.ProblemTraits) at /Users/mfairley/.julia/v0.6/JuMP/src/nlp.jl:1275 [8] (::JuMP.#kw##solvenlp)(::Array{Any,1}, ::JuMP.#solvenlp, ::JuMP.Model, ::JuMP.ProblemTraits) at ./:0 [9] #solve#116(::Bool, ::Bool, ::Bool, ::Array{Any,1}, ::Function, ::JuMP.Model) at /Users/mfairley/.julia/v0.6/JuMP/src/solvers.jl:172 [10] #online_cpcam#1(::Int64, ::Function, ::Int64, ::Int64, ::Array{Float64,1}, ::online_lp.##3 https://github.com/JuliaOpt/Mosek.jl/issues/3#9{Int64,MersenneTwister}, ::online_lp.##4 https://github.com/JuliaOpt/Mosek.jl/pull/4#10{Array{Int64,1},MersenneTwister}, ::online_lp.##5 https://github.com/JuliaOpt/Mosek.jl/pull/5#11{Int64}) at /Users/mfairley/Source/mse310/online_lp.jl:38 [11] #simulation_q3#2(::Int64, ::Function, ::Int64, ::Int64) at /Users/mfairley/Source/mse310/online_lp.jl:84 [12] simulation_q3(::Int64, ::Int64) at /Users/mfairley/Source/mse310/online_lp.jl:73SYSTEM: show(lasterr) caused an error TypeError(:Tuple, "parameter", Type, signal (11): Segmentation fault: 11 while loading no file, in expression starting on line 0 jl_typemap_level_assoc_exact at /Users/vagrant/buildbot/ worker/package_osx64/build/src/typemap.c:849 jl_typemap_assoc_exact at /Users/vagrant/buildbot/ worker/package_osx64/build/src/./julia_internal.h:896 [inlined] jl_typemap_level_assoc_exact at /Users/vagrant/buildbot/ worker/package_osx64/build/src/typemap.c:851 jl_typemap_assoc_exact at /Users/vagrant/buildbot/ worker/package_osx64/build/src/./julia_internal.h:896 [inlined] jl_lookupgeneric at /Users/vagrant/buildbot/worker/package_osx64/build/ src/gf.c:1871 jl_apply_generic at /Users/vagrant/buildbot/worker/package_osx64/build/ src/gf.c:1923 show_default at ./show.jl:128 unknown function (ip: 0x10967d6b6) show at ./show.jl:125 unknown function (ip: 0x10967cb76) show_default at ./show.jl:140 unknown function (ip: 0x10967aa36) print at ./strings/io.jl:29 unknown function (ip: 0x109679f76) print at ./strings/io.jl:40 print_response at ./REPL.jl:158 unknown function (ip: 0x10965bf5d) print_response at ./REPL.jl:129 unknown function (ip: 0x10965bbdd) do_respond at ./REPL.jl:646 unknown function (ip: 0x1095e8791) do_call at /Users/vagrant/buildbot/worker/package_osx64/build/ src/interpreter.c:75 eval at /Users/vagrant/buildbot/worker/package_osx64/build/ src/interpreter.c:242 eval_body at /Users/vagrant/buildbot/worker/package_osx64/build/ src/interpreter.c:539 jl_toplevel_eval_body at /Users/vagrant/buildbot/ worker/package_osx64/build/src/interpreter.c:511 jl_toplevel_eval_flex at /Users/vagrant/buildbot/ worker/package_osx64/build/src/toplevel.c:571 jl_toplevel_eval_in at /Users/vagrant/buildbot/worker/package_osx64/build/ src/builtins.c:496 eval at ./boot.jl:235 jlcall_eval_18068 at /Applications/Julia-0.6.app/ Contents/Resources/julia/lib/julia/sys.dylib (unknown line) run_interface at ./LineEdit.jl:1583 jlcall_run_interface_20155 at /Applications/Julia-0.6.app/ Contents/Resources/julia/lib/julia/sys.dylib (unknown line) run_frontend at ./REPL.jl:945 run_repl at ./REPL.jl:180 unknown function (ip: 0x109582302) _start at ./client.jl:413 jlcall__start_18944 at /Applications/Julia-0.6.app/ Contents/Resources/julia/lib/julia/sys.dylib (unknown line) true_main at /Applications/Julia-0.6.app/Contents/Resources/julia/bin/julia (unknown line) main at /Applications/Julia-0.6.app/Contents/Resources/julia/bin/julia (unknown line) Allocations: 34306841 (Pool: 34289281; Big: 17560); GC: 72 Segmentation fault: 11

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/JuliaOpt/Mosek.jl/issues/135#issuecomment-347393575, or mute the thread https://github.com/notifications/unsubscribe-auth/AJwCccYTKjCdx33u8lq-0crMZpP2y0XTks5s62-KgaJpZM4Qq8rL .