Julia wrapper for the ECOS conic optimization solver
Clone or download
juan-pablo-vielma and mlubin BinaryBuilder (#76)
* Update build.jl

* Update REQUIRE

* Update build.jl

* Update build.jl

* Update REQUIRE

* Update build.jl

* Update build.jl

* Update .gitignore

* Update REQUIRE

* Update build.jl

* Update REQUIRE

* Update REQUIRE

* downgrade to 2.0.5

* updated binaries installation

make sure updated versions of binaries are installed

* Update MOIWrapper.jl

* Update MPBWrapper.jl

* Update README.md

* Fix WIN32 tests

* custom install instructions
Latest commit db356d4 Sep 10, 2018
Permalink
Failed to load latest commit information.
deps BinaryBuilder (#76) Sep 10, 2018
src BinaryBuilder (#76) Sep 10, 2018
test BinaryBuilder (#76) Sep 10, 2018
.travis.yml Fixes for Julia v1.0 Aug 28, 2018
LICENSE.md Update README Jul 29, 2014
README.md BinaryBuilder (#76) Sep 10, 2018
REQUIRE BinaryBuilder (#76) Sep 10, 2018
appveyor.yml Fixes for Julia v1.0 Aug 28, 2018

README.md

ECOS.jl

PackageEvaluator Build Status
Build Status Build Status
Coveralls branch Codecov branch

Julia wrapper for the ECOS embeddable conic optimization interior point solver.

Installation

You can install ECOS.jl through the Julia package manager:

julia> Pkg.add("ECOS")

ECOS.jl will automatically install and setup the ECOS solver itself using BinaryProvider.jl.

Custom Installation

After ECOS.jl is installed and built, you can replace the installed binary dependencies with custom builds by overwritting the binaries and libraries in ECOS.jl's deps/usr folder (e.g. in Julia v0.6 $HOME/.julia/v0.6/ECOS/deps/usr).

Note that the custom binaries will not be overwritten by subsequent builds of the currently installed version of ECOS.jl. However, if ECOS.jl is updated and the update includes new BinaryProvider versions of the ECOS binaries, then the custom binaries will be overwritten by the new BinaryProvider versions.

Usage

The ECOS interface is completely wrapped. ECOS functions corresponding to the C API are available as ECOS.setup, ECOS.solve, ECOS.cleanup, and ECOS.ver (these are not exported from the module). Function arguments are extensively documented in the source, and an example of usage can be found in test/direct.jl.

ECOS.jl also supports the JuliaOpt MathProgBase standard solver interface. Thanks to this support ECOS can be used as a solver with both the JuMP and Convex.jl modeling languages.

All ECOS solver options can be set through the direct interface and through MathProgBase. The list of options is defined the ecos.h header, which we reproduce here:

gamma          # scaling the final step length
delta          # regularization parameter
eps            # regularization threshold
feastol        # primal/dual infeasibility tolerance
abstol         # absolute tolerance on duality gap
reltol         # relative tolerance on duality gap
feastol_inacc  # primal/dual infeasibility relaxed tolerance
abstol_inacc   # absolute relaxed tolerance on duality gap
reltol_inacc   # relative relaxed tolerance on duality gap
nitref         # number of iterative refinement steps
maxit          # maximum number of iterations
verbose        # verbosity bool for PRINTLEVEL < 3

To use these settings you can either pass them as keyword arguments to setup (direct interface) or as arguments to the ECOSSolver constructor (MathProgBase interface), e.g.

# Direct
my_prob = ECOS.setup(n, m, ..., c, h, b; maxit=10, feastol=1e-5)
# MathProgBase (with JuMP)
m = Model(solver=ECOS.ECOSSolver(maxit=10, feastol=1e-5))

JuMP example

This example shows how we can model a simple knapsack problem with JuMP and use ECOS to solve it.

using JuMP
using ECOS

items  = [:Gold, :Silver, :Bronze]
values = Dict(:Gold => 5.0,  :Silver => 3.0,  :Bronze => 1.0)
weight = Dict(:Gold => 2.0,  :Silver => 1.5,  :Bronze => 0.3)

m = Model(solver=ECOSSolver())
@variable(m, 0 <= take[items] <= 1)  # Define a variable for each item
@objective(m, Max, sum(values[item] * take[item] for item in items))
@constraint(m, sum(weight[item] * take[item] for item in items) <= 3)
solve(m)

println(getvalue(take))
# take
# [  Gold] = 0.9999999680446406
# [Silver] = 0.46666670881026834
# [Bronze] = 0.9999999633898735

ECOS.jl is licensed under the MIT License (see LICENSE.md), but note that ECOS itself is GPL v3.