CDCS
CDCS.jl
is an interface to the CDCS
solver. It exports the cdcs
function that is a thin wrapper on top of the
cdcs
MATLAB function and use it to define the CDCS.Optimizer
object that
implements the solver-independent
MathOptInterface API.
To use it with JuMP, simply do
using JuMP
using CDCS
model = Model(optimizer_with_attributes(CDCS.Optimizer))
To suppress output, do either
set_silent(model)
or
model = Model(optimizer_with_attributes(CDCS.Optimizer, verbose=0))
Installation
You can install CDCS.jl
through the
Julia package manager:
] add CDCS
but you first need to make sure that you satisfy the requirements of the MATLAB.jl Julia package and that the CDCS software is installed in your MATLAB™ installation.
Troubleshooting
CDCS not in PATH
If you get the error:
Undefined function or variable 'cdcs'.
Error using save
Variable 'jx_cdcs_arg_out_1' not found.
Linear Programming example: Error During Test at /home/blegat/.julia/dev/CDCS/test/lp.jl:5
Got exception outside of a @test
MATLAB.MEngineError("failed to get variable jx_cdcs_arg_out_1 from MATLAB session")
Stacktrace:
[1] get_mvariable(session::MATLAB.MSession, name::Symbol)
@ MATLAB ~/.julia/packages/MATLAB/SVjnA/src/engine.jl:164
[2] mxcall(::MATLAB.MSession, ::Symbol, ::Int64, ::Matrix{Float64}, ::Vararg{Any})
@ MATLAB ~/.julia/packages/MATLAB/SVjnA/src/engine.jl:297
[3] mxcall
@ ~/.julia/packages/MATLAB/SVjnA/src/engine.jl:317 [inlined]
[4] cdcs(A::Matrix{Float64}, b::Vector{Float64}, c::Vector{Float64}, K::CDCS.Cone; kws::Base.Pairs{Symbol, Int64, Tuple{Symbol}, NamedTuple{(:verbose,), Tuple{Int64}}})
The error means that we try to find the cdcs
function with 1 output argument using the MATLAB C API but it wasn't found.
This most likely means that you did not add CDCS 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/CDCS/
is the directory where the CDCS
folder is located:
julia> using MATLAB
julia> cd("/path/to/CDCS/") do
mat"cdcsInstall"
end
This should make CDCS.jl
work for the Julia session in which this is run.
Alternatively, run
julia> mat"savepath"
to make CDCS.jl
work for future Julia sessions.