# Control in Python - Update for SDP / LMI

matthias on 2013/02/03

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) ))

prob.set_objective('max', cc.T*xx)
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()
print Xp.value