SDPT3
SDPT3.jl is an interface to the SDPT3
solver. It exports the sdpt3 function that is a thin wrapper on top of the
sdpt3 MATLAB function and use it to define the SDPT3.Optimizer object that
implements the solver-independent MathOptInterface API.
To use it with JuMP, simply do
using JuMP
using SDPT3
model = Model(SDPT3.Optimizer)To suppress output, do
model = Model(optimizer_with_attributes(SDPT3.Optimizer, printlevel=0))Installation
You can install SDPT3.jl through the Julia package manager:
] add SDPT3but you first need to make sure that you satisfy the requirements of the MATLAB.jl Julia package and that the SDPT3 software is installed in your MATLAB™ installation.
Troubleshooting
SDPT3 not in PATH
If you get the error:
Error using save
Variable 'jx_sdpt3_arg_out_1' not found.
ERROR: LoadError: MATLAB.MEngineError("failed to get variable jx_sdpt3_arg_out_1 from MATLAB session")
Stacktrace:
[1] get_mvariable(::MATLAB.MSession, ::Symbol) at /home/blegat/.julia/packages/MATLAB/cVrxc/src/engine.jl:164
[2] mxcall(::MATLAB.MSession, ::Symbol, ::Int64, ::Array{Any,2}, ::Vararg{Any,N} where N) at /home/blegat/.julia/packages/MATLAB/cVrxc/src/engine.jl:297
[3] mxcall at /home/blegat/.julia/packages/MATLAB/cVrxc/src/engine.jl:317 [inlined]
[4] sdpt3(::Array{Any,2}, ::Array{Array{Float64,2},1}, ::Array{Array{Float64,1},1}, ::Array{Float64,1}; kws::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /home/blegat/.julia/dev/SDPT3/src/SDPT3.jl:57
[5] sdpt3(::Array{Any,2}, ::Array{Array{Float64,2},1}, ::Array{Array{Float64,1},1}, ::Array{Float64,1}) at /home/blegat/.julia/dev/SDPT3/src/SDPT3.jl:51
The error means that we try to find the sdpt3 function with 1 output argument using the MATLAB C API but it wasn't found.
This most likely means that you did not add SDPT3 to the MATLAB's path (i.e. the toolbox/local/pathdef.m file).
If modifying toolbox/local/pathdef.m does not work, the following should work where /path/to/sdpt3/ is the directory where the sdpt3 folder is located:
julia> using MATLAB
julia> cd("/path/to/sdpt3/") do
mat"install_sdpt3"
endThis should make SDPT3.jl work for the Julia session in which this is run.
Alternatively, run
julia> mat"savepath"to make SDPT3.jl work for future Julia sessions.
An alternative fix is suggested in the following issue.
Error in validate
If you get the error:
Brace indexing is not supported for variables of this type.
Error in validate
Error in sdpt3 (line 171)
[blk,At,C,b,blkdim,numblk,parbarrier] = validate(blk,At,C,b,par,parbarrier);
Error using save
Variable 'jx_sdpt3_arg_out_1' not found.
It might means that you have added SDPNAL in addition to SDPT3 in the MATLAB's path (i.e. the toolbox/local/pathdef.m file).
As SDPNAL also define a validate function, this makes sdpt3 calls SDPNAL's validate function instead of SDPT3's validate function which causes the issue.
One way to fix this from the Julia REPL is to reset the search path to the factory-installed state using restoredefaultpath:
julia> using MATLAB
julia> restoredefaultpathFor this to affect future Julia sessions, use
julia> mat"savepath"