for i in range(m): a = np.random.randn(n) a = a / np.linalg.norm(a) bi = 1 + np.random.rand(1) A[i, :] = a b[i] = bi q = QCML() q.parse(''' dimensions m n variables x(n) r parameters A(m,n) b(m) maximize r A*x + r <= b ''') q.canonicalize() q.dims = {'m': m, 'n': n} q.codegen("python") socp_data = q.prob2socp(locals()) # stuffed variable size n = socp_data['G'].shape[1] ecos_sol = ecos.solve(**socp_data) socp_sol = ecos_sol['x'] prob_sol_x = q.socp2prob(ecos_sol['x'])['x'] prob_sol_r = q.socp2prob(ecos_sol['x'])['r']
# a QCML model is specified by strings # the parser parses each model line by line and builds an internal # representation of an SOCP s = """ dimensions m n variable a(n) variable b parameter X(m,n) # positive samples parameter Y(m,n) # negative samples parameter gamma positive minimize (norm(a) + gamma*sum(pos(1 - X*a + b) + pos(1 + Y*a - b))) """ 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 generate code....") p.dims = {'n': n, 'm': m} p.codegen("python") raw_input("press ENTER to solve with ECOS....") socp_data = p.prob2socp(params=locals()) import ecos sol = ecos.solve(**socp_data)
for i in xrange(T): objective += ["square(norm(Q*x%i)) + square(norm(R*u%i))" % (i,i)] #objective += ["square(norm(Q*x%i))" % T] problem += ["minimize (1/2)*(" + ' + '.join(objective) + ")"] s = '\n'.join(map(lambda x:' ' + x, problem)) 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 generate code....") p.dims = {'n': n, 'm': m} p.codegen("python") raw_input("press ENTER to solve with ECOS....") socp_data = p.prob2socp(params=locals()) import ecos sol = ecos.solve(**socp_data)
b = np.random.randn(m) q = QCML() q.parse(''' dimensions m n variable x(n) parameters A(m,n) b(m) minimize norm1(x) A*x == b ''') q.canonicalize() q.dims = {'m': m, 'n': n} q.codegen('python') socp_vars = q.prob2socp(locals()) # convert to CSR for fast row slicing to distribute problem socp_vars['A'] = socp_vars['A'].tocsr() socp_vars['G'] = socp_vars['G'].tocsr() # the size of the stuffed x or v n = socp_vars['A'].shape[1] ecos_sol = ecos.solve(**socp_vars) # solution to transformed socp (stuffed) socp_sol = ecos_sol['x'] # solution to original problem (unstuffed) prob_sol = q.socp2prob(ecos_sol['x'])['x']
parameter D(two_mn, mn) parameter blurmat(mn,mn) minimize mu*norm(blurmat*x - g) + norm(D*x) """ D = sp.vstack([dxmat, dymat]).tocsc() blurred = blurmat*imgvec + 5*np.random.randn(rows*cols) from qcml import QCML import ecos p = QCML() p.parse(text) p.canonicalize() dims = {'mn':rows*cols, 'two_mn':D.shape[0]} p.codegen("python") # this creates a solver in Python calling CVXOPT socp_data = p.prob2socp({'blurmat':blurmat, 'g':blurred, 'D':D, 'mu':25}, dims) # sol = ecos.solve(**socp_data) print socp_data A = socp_data['G'] c = socp_data['c'] b = socp_data['h'] data = {'A':A, 'c':c, 'b':b} cone = socp_data['dims'] sol = scs.solve(data, cone, opts = None, USE_INDIRECT = False) my_vars = p.socp2prob(sol['x'], {'mn': rows*cols}) print my_vars x = my_vars['x'].reshape(rows,cols) #sol = ecos.solve(**socp_data) #my_vars = p.socp2prob(sol['x'], dims)