nikcleju@65
|
1
|
nikcleju@65
|
2 import numpy
|
nikcleju@65
|
3 import cvxopt
|
nikcleju@65
|
4 import cvxopt.solvers
|
nikcleju@65
|
5 import cvxopt.msk
|
nikcleju@65
|
6 import mosek
|
nikcleju@65
|
7
|
nikcleju@65
|
8 def cvxopt_lp(y, A):
|
nikcleju@65
|
9
|
nikcleju@65
|
10 N = A.shape[1]
|
nikcleju@65
|
11 AA = numpy.hstack((A, -A))
|
nikcleju@65
|
12 c = numpy.ones((2*N, 1))
|
nikcleju@65
|
13
|
nikcleju@65
|
14 G = numpy.vstack((numpy.zeros((2*N,2*N)), -numpy.eye(2*N)))
|
nikcleju@65
|
15 h = numpy.zeros((4*N,1))
|
nikcleju@65
|
16
|
nikcleju@65
|
17 # Convert numpy arrays to cvxopt matrices
|
nikcleju@65
|
18 cvx_c = cvxopt.matrix(c)
|
nikcleju@65
|
19 cvx_G = cvxopt.matrix(G)
|
nikcleju@65
|
20 cvx_h = cvxopt.matrix(h)
|
nikcleju@65
|
21 cvx_AA = cvxopt.matrix(AA)
|
nikcleju@65
|
22 cvx_y = cvxopt.matrix(y.reshape(y.size,1))
|
nikcleju@65
|
23
|
nikcleju@65
|
24 # Options
|
nikcleju@65
|
25 cvxopt.solvers.options['show_progress'] = False
|
nikcleju@65
|
26 #cvxopt.solvers.options['MOSEK'] = {mosek.iparam.log: 0}
|
nikcleju@65
|
27
|
nikcleju@65
|
28 # Solve
|
nikcleju@65
|
29 #res = cvxopt.solvers.lp(cvx_c, cvx_G, cvx_h, A=cvx_AA, b=cvx_y, solver='mosek')
|
nikcleju@65
|
30 res = cvxopt.solvers.lp(cvx_c, cvx_G, cvx_h, A=cvx_AA, b=cvx_y)
|
nikcleju@65
|
31
|
nikcleju@65
|
32 primal = numpy.squeeze(numpy.array(res['x']))
|
nikcleju@65
|
33 gamma = primal[:N] - primal[N:]
|
nikcleju@65
|
34 return gamma
|
nikcleju@65
|
35
|
nikcleju@65
|
36 #lb = zeros(2*N,1);
|
nikcleju@65
|
37 #ub = Inf*ones(2*N,1);
|
nikcleju@65
|
38 ##[primal,obj,exitflag,output2,dual] = linprog(c,[],[],A,y,lb,ub,[],opt);
|
nikcleju@65
|
39 ##[primal,~,~,~,~] = linprog(c,[],[],A,aggy,lb,ub);
|
nikcleju@65
|
40 #[primal,obj,exitflag,output2,dual] = linprog(c,[],[],A,aggy,lb,ub);
|
nikcleju@65
|
41 #gamma = primal(1:N) - primal((N+1):(2*N)); |