Good news.

I found a better way to declare linear matrix inequalities (LMI) and semi-definite programs (SDP) than the direct interface of cvxopt that I mentioned before”).

Picos makes this much easier and it interfaces to other solvers as well. So far, I have only tested cvxopt, but the possibility of using Gurobi for mixed integer programs is quite nice.

Here are a couple of examples of how simple it really is. This code snippet solves a bogus problem.

```
def testAx_less_b():
A = cvx.matrix(s.eye(3))
c = cvx.matrix(s.ones( (3,1) ) )
prob=pic.Problem()
AA = pic.new_param('A', A)
cc = pic.new_param('c', c)
bb = pic.new_param('b', s.ones( (3,1) ))
xx = prob.add_variable('x', 3)
prob.set_objective('max', cc.T*xx)
prob.add_constraint(AA*xx < bb)
print prob
# prob.solve(verbose=1, solver='cvxopt')
prob.solve()
x = xx.value
print x
```

And here’s an example with an LMI to be solved. Final tip: you will probably need vertical (//) and horizontal (&) concatenation. Took me a while to find these two. More details are in http://picos.zib.de/tuto.html

```
def testLMI():
Ap = pic.new_param('A', s.eye(3) )
Bp = pic.new_param('B', 2*s.eye(3) )
sdp = pic.Problem()
Xp = sdp.add_variable('X', (3,3), vtype='symmetric')
sdp.add_constraint(Xp>>0)
sdp.add_constraint(Ap*Xp << Bp)
print sdp
sdp.solve()
print Xp.value
```