Exemplo n.º 1
0
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']
Exemplo n.º 2
0
    # 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)
Exemplo n.º 3
0
    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)






Exemplo n.º 4
0
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']
Exemplo n.º 5
0
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)