Skip to content

Latest commit

 

History

History
56 lines (43 loc) · 2.56 KB

README.md

File metadata and controls

56 lines (43 loc) · 2.56 KB

MultiConvex

Build Status

MultiConvex.jl is a Julia package for disciplined multi-convex programming. MultiConvex.jl can detect and (heuristically) solve multi-convex problems using alternating minimization. It solves the subproblems it encounters using Convex.jl and so can use any solver supported by Convex.jl, including Mosek, Gurobi, ECOS, SCS, GLPK, through the MathProgBase interface.

More resources:

Installation: Clone the MultiConvex repository, and install Convex.

julia> Pkg.clone("https://github.com/madeleineudell/MultiConvex.jl.git")
julia> Pkg.add("Convex")

Quick Example

Here's a quick example of code that solves a nonnegative matrix factorization problem

# Let us first make the Convex and MultiConvex modules available
using Convex, MultiConvex

# initialize nonconvex problem
n, k = 10, 1
A = rand(n, k) * rand(k, n)
x = Variable(n, k)
y = Variable(k, n)
problem = minimize(sum_squares(A - x*y), x>=0, y>=0)

# perform alternating minimization on the problem by calling altmin!
altmin!(problem)

# Check the status of the last subproblem solved
problem.status # :Optimal, :Infeasible, :Unbounded etc.

# Get the objective value
problem.optval

Citing this package

If you use MultiConvex.jl for published work, we encourage you to cite the software using the following BibTeX citation:

@article{shen2016disciplined,
  title={Disciplined Multi-Convex Programming},
  author={Shen, Xinyue and Diamond, Steven and Udell, Madeleine and Gu, Yuantao and Boyd, Stephen},
  journal={arXiv preprint arXiv:1609.03285},
  year={2016}
}