GiulioRomualdi / scs-eigen

Simple Eigen-C++ wrapper for scs library
https://giulioromualdi.github.io/scs-eigen
MIT License
6 stars 1 forks source link

Implement the embedding algorithm for a set of well known Convex Optimization problems #1

Open GiulioRomualdi opened 3 years ago

GiulioRomualdi commented 3 years ago

SCS solves the problem in this form

 minimize     cᵀx
 subject to   A x + s = b
              s in K

where the cone K can be any Cartesian product of the following primitive cones:

  1. zero cone {x | x = 0 } (dual to the free cone {x | x in R})
  2. positive orthant {x | x >= 0}
  3. second-order cone {(t,x) | ||x||_2 <= t}
  4. positive semidefinite cone { X | min(eig(X)) >= 0, X = Xᵀ }
  5. exponential cone {(x,y,z) | y e^(x/y) <= z, y>0 }
  6. dual exponential cone {(u,v,w) | −u e^(v/u) <= e w, u<0}
  7. power cone {(x,y,z) | x^a * y^(1-a) >= |z|, x>=0, y>=0}
  8. dual power cone {(u,v,w) | (u/a)^a * (v/(1-a))^(1-a) >= |w|, u>=0, v>=0}

In order to use scs to solve simple optimization problems, we should implement the so-called embedding procedure to convert cost and constraints in a form that can be digested by scs

For each component, I should modify the Solver class. I also plan to document the mathematical passages required to perform the conversion