Convex.jl <https://github.com/JuliaOpt/Convex.jl> is a Julia library for 
mathematical programming that makes it easy to formulate and fast to solve 
nonlinear convex optimization problems. Convex.jl 
<https://github.com/JuliaOpt/Convex.jl> is a member of the JuliaOpt 
<https://github.com/JuliaOpt> umbrella group and can use (nearly) any 
solver that complies with the MathProgBase interface, including Mosek 
<https://github.com/JuliaOpt/Mosek.jl>, Gurobi 
<https://github.com/JuliaOpt/gurobi.jl>, ECOS 
<https://github.com/JuliaOpt/ECOS.jl>, SCS 
<https://github.com/JuliaOpt/SCS.jl>, and GLPK 
<https://github.com/JuliaOpt/GLPK.jl>.

Here's a quick example of code that solves a non-negative least-squares 
problem.

using Convex

# Generate random problem data
m = 4;  n = 5
A = randn(m, n); b = randn(m, 1)

# Create a (column vector) variable of size n x 1.
x = Variable(n)

# The problem is to minimize ||Ax - b||^2 subject to x >= 0
problem = minimize(sum_squares(A * x + b), [x >= 0])

solve!(problem)

We could instead solve a robust approximation problem by replacing 
sum_squares(A 
* x + b) by sum(norm(A * x + b, 1)) or sum(huber(A * x + b)); it's that 
easy.

Convex.jl <https://github.com/JuliaOpt/Convex.jl> is different from JuMP 
<https://github.com/JuliaOpt/JuMP.jl> in that it allows (and prioritizes) 
linear algebraic and functional constructions in objectives and constraints 
(like max(x,y) < A*z). Under the hood, it converts problems to a standard 
conic form, which requires (and certifies) that the problem is convex, and 
guarantees global optimality of the resulting solution.

Reply via email to