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.