import cvxopt p = QCML() rows = (m - 1) * n cols = m * n s = ''' dimension cols dimension rows variable y(cols) parameter top(rows,cols) parameter bottom(rows,cols) parameter left(rows,cols) parameter right(rows,cols) parameter diff_down(rows) parameter diff_right(rows) parameter s_down(rows,rows) y >= 0 minimize ( sum(square(s_down*(top*y - bottom*y - diff_down))) + sum(square( left*y - bottom*y - diff_right )) ) ''' p.parse(s) # <codecell> sol = p.solve()
p = QCML() rows = (m-1)*n cols = m*n s = ''' dimension cols dimension rows variable y(cols) parameter top(rows,cols) parameter bottom(rows,cols) parameter left(rows,cols) parameter right(rows,cols) parameter diff_down(rows) parameter diff_right(rows) parameter s_down(rows,rows) y >= 0 minimize ( sum(square(s_down*(top*y - bottom*y - diff_down))) + sum(square( left*y - bottom*y - diff_right )) ) ''' p.parse(s) # <codecell> sol = p.solve()
# # x(:,i+1) == A(:,:,i)*x(:,i) + B*u(:,i) for i = 1,...,T # # sum_{ij in E} # # # # matrix X # # A*X is map(A*x, X) # # X*A minimize (norm(a) + gamma*sum(pos(1 - X*a + b) + pos(1 + Y*a - b))) # minimize c'*a # norm(X*a,Y*a,Z*a, W*a) <= 1 """ ) # TODO: sum(norms(X)) # A*x # p.solve() pr = cProfile.Profile() pr.enable() p.canonicalize() p.dims = {"n": n, "m": m} p.codegen("python") print p.prob2socp.source socp_data = p.prob2socp(params=locals()) import ecos sol = ecos.solve(**socp_data) my_vars = p.socp2prob(sol["x"]) pr.disable()
variable x(n) parameters A(m,n) b(m) parameter gamma positive minimize (square(norm(A*x - b)) + gamma*norm1(x)) """ print s raw_input("press ENTER to parse....") p = QCML(debug=True) p.parse(s) raw_input("press ENTER to canonicalize....") p.canonicalize() raw_input("press ENTER to solve the problem....") res = p.solve() raw_input("press ENTER to generate C code and save it....") p.codegen("C") print p.prob2socp.source p.save("lasso") raw_input("press ENTER to write the test C program....") c_template = """ #include <stdio.h> #include "lasso.h" #include "ecos.h" int read_file(const char * file, void *x, size_t size, size_t num) { FILE *f;
variable x(n) parameters A(m,n) b(m) parameter gamma positive minimize (square(norm(A*x - b)) + gamma*norm1(x)) """ print s raw_input("press ENTER to parse....") p = QCML(debug=True) p.parse(s) raw_input("press ENTER to canonicalize....") p.canonicalize() raw_input("press ENTER to solve the problem....") res = p.solve() raw_input("press ENTER to generate C code and save it....") p.codegen("C") p.save("lasso") raw_input("press ENTER to write the test C program....") c_template = """ #include <stdio.h> #include "lasso.h" #include "ecos.h" int read_file(const char * file, void *x, size_t size, size_t num) { FILE *f; f = fopen(file, "rb");
# x + z == 5 # # x(:,i+1) == A(:,:,i)*x(:,i) + B*u(:,i) for i = 1,...,T # # sum_{ij in E} # # # # matrix X # # A*X is map(A*x, X) # # X*A minimize (norm(a) + gamma*sum(pos(1 - X*a + b) + pos(1 + Y*a - b))) # minimize c'*a # norm(X*a,Y*a,Z*a, W*a) <= 1 """) # TODO: sum(norms(X)) # A*x # p.solve() pr = cProfile.Profile() pr.enable() p.canonicalize() p.dims = {'n': n, 'm': m} p.codegen("python") print p.prob2socp.source socp_data = p.prob2socp(params=locals()) import ecos sol = ecos.solve(**socp_data) my_vars = p.socp2prob(sol['x']) pr.disable() ps = pstats.Stats(pr)