norm(u,v) <= radii*c # rctheta is going to be a diagonal matrix # rctheta[i]*c[i] <= u[i] implemented with rctheta a diag matrix rctheta*c <= u """) # More natural formulation would be: # minimize 1/(sqrt(2)*noisesigma) * (data - (dictc*c + dictu(u + dictv*v)) + lambda'*c) # subject to # sqrt(u.^2 + v.^2) <= radii.*c # radii.*cos(theta) <= u raw_input("press ENTER to canonicalize....") p.canonicalize() raw_input("press ENTER to generate code....") if m and n: p.dims = {'m': m, 'n': n} p.codegen(args.codegen) raw_input("press ENTER for raw code....") p.printsource() #socp_data = p.prob2socp(params=locals()) #import ecos #sol = ecos.ecos(**socp_data) #my_vars = p.socp2prob(sol['x']) #pr.disable() #ps = pstats.Stats(pr) #ps.sort_stats('cumulative').print_stats(.5)
# 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 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']
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)
# # 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) ps.sort_stats("cumulative").print_stats(0.5)
Ap*r >= Lp Ap*r <= Up A*r >= 0 """ 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 python code....") p.dims = {'m': m, 'n': n, 'pb': pb, 'sb': sb} p.codegen("python") raw_input("press ENTER to solve with ECOS....") socp_data = p.prob2socp(params=locals()) import ecos sol = ecos.solve(**socp_data) optval = sol.get("info").get("pcost") print "The minimum attenuation in the stop band is " + str( 10 * log10(optval)) + " dB." vars = p.socp2prob(sol['x']) r = transpose(asmatrix(vars['r'])) # Spectral Factorization jay = complex(0, 1)
Ap*r >= Lp Ap*r <= Up A*r >= 0 """ 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 python code....") p.dims = {'m': m, 'n': n, 'pb': pb, 'sb': sb} p.codegen("python") raw_input("press ENTER to solve with ECOS....") socp_data = p.prob2socp(params=locals()) import ecos sol = ecos.solve(**socp_data) optval = sol.get("info").get("pcost") print "The minimum attenuation in the stop band is " + str(10*log10(optval)) + " dB." vars = p.socp2prob(sol['x']) r = transpose(asmatrix(vars['r'])) # Spectral Factorization jay = complex(0,1) mult_factor = 100