Python cvxpy.Variable() Examples
The following are 30
code examples of cvxpy.Variable().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
cvxpy
, or try the search function
.
Example #1
Source File: rocket_landing_3d.py From SCvx with MIT License | 7 votes |
def __init__(self): """ A large r_scale for a small scale problem will ead to numerical problems as parameters become excessively small and (it seems) precision is lost in the dynamics. """ self.set_random_initial_state() self.x_init = np.concatenate(((self.m_wet,), self.r_I_init, self.v_I_init, self.q_B_I_init, self.w_B_init)) self.x_final = np.concatenate(((self.m_dry,), self.r_I_final, self.v_I_final, self.q_B_I_final, self.w_B_final)) self.r_scale = np.linalg.norm(self.r_I_init) self.m_scale = self.m_wet # slack variable for linear constraint relaxation self.s_prime = cvx.Variable((K, 1), nonneg=True) # slack variable for lossless convexification # self.gamma = cvx.Variable(K, nonneg=True)
Example #2
Source File: models.py From optnet with Apache License 2.0 | 6 votes |
def get_sudoku_matrix(n): X = np.array([[cp.Variable(n**2) for i in range(n**2)] for j in range(n**2)]) cons = ([x >= 0 for row in X for x in row] + [cp.sum(x) == 1 for row in X for x in row] + [sum(row) == np.ones(n**2) for row in X] + [sum([row[i] for row in X]) == np.ones(n**2) for i in range(n**2)] + [sum([sum(row[i:i+n]) for row in X[j:j+n]]) == np.ones(n**2) for i in range(0,n**2,n) for j in range(0, n**2, n)]) f = sum([cp.sum(x) for row in X for x in row]) prob = cp.Problem(cp.Minimize(f), cons) A = np.asarray(prob.get_problem_data(cp.ECOS)[0]["A"].todense()) A0 = [A[0]] rank = 1 for i in range(1,A.shape[0]): if np.linalg.matrix_rank(A0+[A[i]], tol=1e-12) > rank: A0.append(A[i]) rank += 1 return np.array(A0)
Example #3
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 6 votes |
def test_simple_batch_socp(self): set_seed(243) n = 5 m = 1 batch_size = 4 P_sqrt = cp.Parameter((n, n), name='P_sqrt') q = cp.Parameter((n, 1), name='q') A = cp.Parameter((m, n), name='A') b = cp.Parameter((m, 1), name='b') x = cp.Variable((n, 1), name='x') objective = 0.5 * cp.sum_squares(P_sqrt @ x) + q.T @ x constraints = [A@x == b, cp.norm(x) <= 1] prob = cp.Problem(cp.Minimize(objective), constraints) prob_tch = CvxpyLayer(prob, [P_sqrt, q, A, b], [x]) P_sqrt_tch = torch.randn(batch_size, n, n, requires_grad=True) q_tch = torch.randn(batch_size, n, 1, requires_grad=True) A_tch = torch.randn(batch_size, m, n, requires_grad=True) b_tch = torch.randn(batch_size, m, 1, requires_grad=True) torch.autograd.gradcheck(prob_tch, (P_sqrt_tch, q_tch, A_tch, b_tch))
Example #4
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 6 votes |
def test_example(self): n, m = 2, 3 x = cp.Variable(n) A = cp.Parameter((m, n)) b = cp.Parameter(m) constraints = [x >= 0] objective = cp.Minimize(0.5 * cp.pnorm(A @ x - b, p=1)) problem = cp.Problem(objective, constraints) assert problem.is_dpp() cvxpylayer = CvxpyLayer(problem, parameters=[A, b], variables=[x]) A_tch = torch.randn(m, n, requires_grad=True) b_tch = torch.randn(m, requires_grad=True) # solve the problem solution, = cvxpylayer(A_tch, b_tch) # compute the gradient of the sum of the solution with respect to A, b solution.sum().backward()
Example #5
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 6 votes |
def test_entropy_maximization(self): set_seed(243) n, m, p = 5, 3, 2 tmp = np.random.rand(n) A_np = np.random.randn(m, n) b_np = A_np.dot(tmp) F_np = np.random.randn(p, n) g_np = F_np.dot(tmp) + np.random.rand(p) x = cp.Variable(n) A = cp.Parameter((m, n)) b = cp.Parameter(m) F = cp.Parameter((p, n)) g = cp.Parameter(p) obj = cp.Maximize(cp.sum(cp.entr(x)) - .01 * cp.sum_squares(x)) constraints = [A * x == b, F * x <= g] prob = cp.Problem(obj, constraints) layer = CvxpyLayer(prob, [A, b, F, g], [x]) A_tch, b_tch, F_tch, g_tch = map( lambda x: torch.from_numpy(x).requires_grad_(True), [ A_np, b_np, F_np, g_np]) torch.autograd.gradcheck( lambda *x: layer(*x, solver_args={"eps": 1e-12, "max_iters": 10000}), (A_tch, b_tch, F_tch, g_tch), eps=1e-4, atol=1e-3, rtol=1e-3)
Example #6
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 6 votes |
def test_lml(self): tf.random.set_seed(0) k = 2 x = cp.Parameter(4) y = cp.Variable(4) obj = -x * y - cp.sum(cp.entr(y)) - cp.sum(cp.entr(1. - y)) cons = [cp.sum(y) == k] problem = cp.Problem(cp.Minimize(obj), cons) lml = CvxpyLayer(problem, [x], [y]) x_tf = tf.Variable([1., -1., -1., -1.], dtype=tf.float64) with tf.GradientTape() as tape: y_opt = lml(x_tf, solver_args={'eps': 1e-10})[0] loss = -tf.math.log(y_opt[1]) def f(): problem.solve(solver=cp.SCS, eps=1e-10) return -np.log(y.value[1]) grad = tape.gradient(loss, [x_tf]) numgrad = numerical_grad(f, [x], [x_tf]) np.testing.assert_almost_equal(grad, numgrad, decimal=3)
Example #7
Source File: cvxpy_examples.py From cvxpylayers with Apache License 2.0 | 6 votes |
def running_example(): print("running example") m = 20 n = 10 x = cp.Variable((n, 1)) F = cp.Parameter((m, n)) g = cp.Parameter((m, 1)) lambd = cp.Parameter((1, 1), nonneg=True) objective_fn = cp.norm(F @ x - g) + lambd * cp.norm(x) constraints = [x >= 0] problem = cp.Problem(cp.Minimize(objective_fn), constraints) assert problem.is_dcp() assert problem.is_dpp() print("is_dpp: ", problem.is_dpp()) F_t = torch.randn(m, n, requires_grad=True) g_t = torch.randn(m, 1, requires_grad=True) lambd_t = torch.rand(1, 1, requires_grad=True) layer = CvxpyLayer(problem, parameters=[F, g, lambd], variables=[x]) x_star, = layer(F_t, g_t, lambd_t) x_star.sum().backward() print("F_t grad: ", F_t.grad) print("g_t grad: ", g_t.grad)
Example #8
Source File: cvxpylayer.py From cvxpylayers with Apache License 2.0 | 6 votes |
def __call__(self, *parameters, solver_args={}): """Solve problem (or a batch of problems) corresponding to `parameters` Args: parameters: a sequence of tf.Tensors; the n-th Tensor specifies the value for the n-th CVXPY Parameter. These Tensors can be batched: if a Tensor has 3 dimensions, then its first dimension is interpreted as the batch size. solver_args: a dict of optional arguments, to send to `diffcp`. Keys should be the names of keyword arguments. Returns: a list of optimal variable values, one for each CVXPY Variable supplied to the constructor. """ if len(parameters) != len(self.params): raise ValueError('A tensor must be provided for each CVXPY ' 'parameter; received %d tensors, expected %d' % ( len(parameters), len(self.params))) compute = tf.custom_gradient( lambda *parameters: self._compute(parameters, solver_args)) return compute(*parameters)
Example #9
Source File: scproblem.py From SuccessiveConvexificationFreeFinalTime with MIT License | 6 votes |
def get_variable(self, name): """ :param name: Name of the variable. :return The value of the variable. The following variables can be accessed: X U sigma nu """ if name in self.var: return self.var[name].value else: print(f'Variable \'{name}\' does not exist.') return None
Example #10
Source File: cvxpy_examples.py From cvxpylayers with Apache License 2.0 | 6 votes |
def relu(): # print(f'--- {sys._getframe().f_code.co_name} ---') print('relu') npr.seed(0) n = 4 _x = cp.Parameter(n) _y = cp.Variable(n) obj = cp.Minimize(cp.sum_squares(_y - _x)) cons = [_y >= 0] prob = cp.Problem(obj, cons) _x.value = npr.randn(n) prob.solve(solver=cp.SCS) print(_y.value)
Example #11
Source File: cvxpy_examples.py From cvxpylayers with Apache License 2.0 | 6 votes |
def ball_con(): # print(f'--- {sys._getframe().f_code.co_name} ---') print('ball con') npr.seed(0) n = 2 A = cp.Parameter((n, n)) z = cp.Parameter(n) p = cp.Parameter(n) x = cp.Variable(n) t = cp.Variable(n) obj = cp.Minimize(0.5 * cp.sum_squares(x - p)) # TODO automate introduction of variables. cons = [0.5 * cp.sum_squares(A * t) <= 1, t == (x - z)] prob = cp.Problem(obj, cons) L = npr.randn(n, n) A.value = L.T z.value = npr.randn(n) p.value = npr.randn(n) prob.solve(solver=cp.SCS) print(x.value)
Example #12
Source File: measure_utils.py From ambient-gan with MIT License | 6 votes |
def get_inpaint_func_tv(): def inpaint_func(image, mask): """Total variation inpainting""" inpainted = np.zeros_like(image) for c in range(image.shape[2]): image_c = image[:, :, c] mask_c = mask[:, :, c] if np.min(mask_c) > 0: # if mask is all ones, no need to inpaint inpainted[:, :, c] = image_c else: h, w = image_c.shape inpainted_c_var = cvxpy.Variable(h, w) obj = cvxpy.Minimize(cvxpy.tv(inpainted_c_var)) constraints = [cvxpy.mul_elemwise(mask_c, inpainted_c_var) == cvxpy.mul_elemwise(mask_c, image_c)] prob = cvxpy.Problem(obj, constraints) # prob.solve(solver=cvxpy.SCS, max_iters=100, eps=1e-2) # scs solver prob.solve() # default solver inpainted[:, :, c] = inpainted_c_var.value return inpainted return inpaint_func
Example #13
Source File: test_prox_fn.py From ProxImaL with MIT License | 6 votes |
def test_diff_fn(self): """Test generic differentiable function operator. """ # Least squares. tmp = Variable(10) fn = diff_fn(tmp, lambda x: np.square(x).sum(), lambda x: 2 * x) rho = 1 v = np.arange(10) * 1.0 - 5.0 x = fn.prox(rho, v.copy()) self.assertItemsAlmostEqual(x, v / (2 + rho)) # -log n = 5 tmp = Variable(n) fn = diff_fn(tmp, lambda x: -np.log(x).sum(), lambda x: -1.0 / x) rho = 2 v = np.arange(n) * 2.0 + 1 x = fn.prox(rho, v.copy()) val = (v + np.sqrt(v**2 + 4 / rho)) / 2 self.assertItemsAlmostEqual(x, val)
Example #14
Source File: models.py From optnet with Apache License 2.0 | 6 votes |
def forward(self, puzzles): nBatch = puzzles.size(0) x = puzzles.view(nBatch,-1) x = self.fc_in(x) e = Variable(torch.Tensor()) h = self.G.mv(self.z)+self.s x = QPFunction(verbose=False)( self.Q, x, self.G, h, e, e, ) x = self.fc_out(x) x = x.view_as(puzzles) return x # if __name__=="__main__": # sudoku = SolveSudoku(2, 0.2) # puzzle = [[4, 0, 0, 0], [0,0,4,0], [0,2,0,0], [0,0,0,1]] # Y = Variable(torch.DoubleTensor(np.array([[np.array(np.eye(5,4,-1)[i,:]) for i in row] for row in puzzle])).cuda()) # solution = sudoku(Y.unsqueeze(0)) # print(solution.view(1,4,4,4))
Example #15
Source File: models.py From optnet with Apache License 2.0 | 6 votes |
def __init__(self, n, Qpenalty, nineq): super().__init__() nx = (n**2)**3 self.Q = Variable(Qpenalty*torch.eye(nx).double().cuda()) self.G1 = Variable(-torch.eye(nx).double().cuda()) self.h1 = Variable(torch.zeros(nx).double().cuda()) # if trueInit: # self.A = Parameter(torch.DoubleTensor(get_sudoku_matrix(n)).cuda()) # else: # # t = get_sudoku_matrix(n) # # self.A = Parameter(torch.rand(t.shape).double().cuda()) # # import IPython, sys; IPython.embed(); sys.exit(-1) self.A = Parameter(torch.rand(50,nx).double().cuda()) self.G2 = Parameter(torch.Tensor(128, nx).uniform_(-1,1).double().cuda()) self.z2 = Parameter(torch.zeros(nx).double().cuda()) self.s2 = Parameter(torch.ones(128).double().cuda()) # self.b = Variable(torch.ones(self.A.size(0)).double().cuda())
Example #16
Source File: models.py From optnet with Apache License 2.0 | 6 votes |
def __init__(self, n, Qpenalty, qp_solver, trueInit=False): super().__init__() self.qp_solver = qp_solver nx = (n**2)**3 self.Q = Variable(Qpenalty*torch.eye(nx).double().cuda()) self.Q_idx = spa.csc_matrix(self.Q.detach().cpu().numpy()).nonzero() self.G = Variable(-torch.eye(nx).double().cuda()) self.h = Variable(torch.zeros(nx).double().cuda()) t = get_sudoku_matrix(n) if trueInit: self.A = Parameter(torch.DoubleTensor(t).cuda()) else: self.A = Parameter(torch.rand(t.shape).double().cuda()) self.log_z0 = Parameter(torch.zeros(nx).double().cuda()) # self.b = Variable(torch.ones(self.A.size(0)).double().cuda()) if self.qp_solver == 'osqpth': t = torch.cat((self.A, self.G), dim=0) self.AG_idx = spa.csc_matrix(t.detach().cpu().numpy()).nonzero() # @profile
Example #17
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_not_enough_parameters(self): x = cp.Variable(1) lam = cp.Parameter(1, nonneg=True) lam2 = cp.Parameter(1, nonneg=True) objective = lam * cp.norm(x, 1) + lam2 * cp.sum_squares(x) prob = cp.Problem(cp.Minimize(objective)) with self.assertRaisesRegex(ValueError, "The layer's parameters.*"): CvxpyLayer(prob, [lam], [x]) # noqa: F841
Example #18
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_logistic_regression(self): np.random.seed(243) N, n = 10, 2 def sigmoid(z): return 1 / (1 + np.exp(-z)) X_np = np.random.randn(N, n) a_true = np.random.randn(n, 1) y_np = np.round(sigmoid(X_np @ a_true + np.random.randn(N, 1) * 0.5)) X_tf = tf.Variable(X_np) lam_tf = tf.Variable(1.0 * tf.ones(1)) a = cp.Variable((n, 1)) X = cp.Parameter((N, n)) lam = cp.Parameter(1, nonneg=True) y = y_np log_likelihood = cp.sum( cp.multiply(y, X @ a) - cp.log_sum_exp(cp.hstack([np.zeros((N, 1)), X @ a]).T, axis=0, keepdims=True).T ) prob = cp.Problem( cp.Minimize(-log_likelihood + lam * cp.sum_squares(a))) fit_logreg = CvxpyLayer(prob, [X, lam], [a]) with tf.GradientTape(persistent=True) as tape: weights = fit_logreg(X_tf, lam_tf, solver_args={'eps': 1e-8})[0] summed = tf.math.reduce_sum(weights) grad_X_tf, grad_lam_tf = tape.gradient(summed, [X_tf, lam_tf]) def f_train(): prob.solve(solver=cp.SCS, eps=1e-8) return np.sum(a.value) numgrad_X_tf, numgrad_lam_tf = numerical_grad( f_train, [X, lam], [X_tf, lam_tf], delta=1e-6) np.testing.assert_allclose(grad_X_tf, numgrad_X_tf, atol=1e-2) np.testing.assert_allclose(grad_lam_tf, numgrad_lam_tf, atol=1e-2)
Example #19
Source File: calibration_tools.py From natural-adv-examples with MIT License | 5 votes |
def tune_temp(logits, labels, binary_search=True, lower=0.2, upper=5.0, eps=0.0001): logits = np.array(logits) if binary_search: import torch import torch.nn.functional as F logits = torch.FloatTensor(logits) labels = torch.LongTensor(labels) t_guess = torch.FloatTensor([0.5*(lower + upper)]).requires_grad_() while upper - lower > eps: if torch.autograd.grad(F.cross_entropy(logits / t_guess, labels), t_guess)[0] > 0: upper = 0.5 * (lower + upper) else: lower = 0.5 * (lower + upper) t_guess = t_guess * 0 + 0.5 * (lower + upper) t = min([lower, 0.5 * (lower + upper), upper], key=lambda x: float(F.cross_entropy(logits / x, labels))) else: import cvxpy as cx set_size = np.array(logits).shape[0] t = cx.Variable() expr = sum((cx.Minimize(cx.log_sum_exp(logits[i, :] * t) - logits[i, labels[i]] * t) for i in range(set_size))) p = cx.Problem(expr, [lower <= t, t <= upper]) p.solve() # p.solve(solver=cx.SCS) t = 1 / t.value return t
Example #20
Source File: reinforcement_learning.py From safe_learning with MIT License | 5 votes |
def _run_cvx_optimization(self, next_states, rewards, **solver_options): """Tensorflow wrapper around a cvxpy value function optimization. Parameters ---------- next_states : ndarray rewards : ndarray Returns ------- values : ndarray The optimal values at the states. """ # Define random variables; convert index from np.int64 to regular # python int to avoid strange cvxpy error; see: # https://github.com/cvxgrp/cvxpy/issues/380 values = cvxpy.Variable(rewards.shape) value_matrix = self.value_function.tri.parameter_derivative( next_states) # Make cvxpy work with sparse matrices value_matrix = cvxpy.Constant(value_matrix) objective = cvxpy.Maximize(cvxpy.sum(values)) constraints = [values <= rewards + self.gamma * value_matrix * values] prob = cvxpy.Problem(objective, constraints) # Solve optimization problem prob.solve(**solver_options) # Some error checking if not prob.status == cvxpy.OPTIMAL: raise OptimizationError('Optimization problem is {}' .format(prob.status)) return np.array(values.value)
Example #21
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_not_enough_parameters_at_call_time(self): x = cp.Variable(1) lam = cp.Parameter(1, nonneg=True) lam2 = cp.Parameter(1, nonneg=True) objective = lam * cp.norm(x, 1) + lam2 * cp.sum_squares(x) prob = cp.Problem(cp.Minimize(objective)) layer = CvxpyLayer(prob, [lam, lam2], [x]) with self.assertRaisesRegex( ValueError, 'A tensor must be provided for each CVXPY parameter.*'): layer(lam)
Example #22
Source File: mpc_modeling_with_ECOS.py From PyAdvancedControl with MIT License | 5 votes |
def use_modeling_tool(A, B, N, Q, R, P, x0, umax=None, umin=None, xmin=None, xmax=None): """ solve MPC with modeling tool for test """ (nx, nu) = B.shape # mpc calculation x = cvxpy.Variable((nx, N + 1)) u = cvxpy.Variable((nu, N)) costlist = 0.0 constrlist = [] for t in range(N): costlist += 0.5 * cvxpy.quad_form(x[:, t], Q) costlist += 0.5 * cvxpy.quad_form(u[:, t], R) constrlist += [x[:, t + 1] == A * x[:, t] + B * u[:, t]] if xmin is not None: constrlist += [x[:, t] >= xmin[:, 0]] if xmax is not None: constrlist += [x[:, t] <= xmax[:, 0]] costlist += 0.5 * cvxpy.quad_form(x[:, N], P) # terminal cost if xmin is not None: constrlist += [x[:, N] >= xmin[:, 0]] if xmax is not None: constrlist += [x[:, N] <= xmax[:, 0]] constrlist += [x[:, 0] == x0[:, 0]] # inital state constraints if umax is not None: constrlist += [u <= umax] # input constraints if umin is not None: constrlist += [u >= umin] # input constraints prob = cvxpy.Problem(cvxpy.Minimize(costlist), constrlist) prob.solve(verbose=True) return x.value, u.value
Example #23
Source File: inverted_pendulum_mpc_control.py From PyAdvancedControl with MIT License | 5 votes |
def mpc_control(x0): x = cvxpy.Variable((nx, T + 1)) u = cvxpy.Variable((nu, T)) A, B = get_model_matrix() cost = 0.0 constr = [] for t in range(T): cost += cvxpy.quad_form(x[:, t + 1], Q) cost += cvxpy.quad_form(u[:, t], R) constr += [x[:, t + 1] == A * x[:, t] + B * u[:, t]] # print(x0) constr += [x[:, 0] == x0[:, 0]] prob = cvxpy.Problem(cvxpy.Minimize(cost), constr) start = time.time() prob.solve(verbose=False) elapsed_time = time.time() - start print("calc time:{0} [sec]".format(elapsed_time)) if prob.status == cvxpy.OPTIMAL: ox = get_nparray_from_matrix(x.value[0, :]) dx = get_nparray_from_matrix(x.value[1, :]) theta = get_nparray_from_matrix(x.value[2, :]) dtheta = get_nparray_from_matrix(x.value[3, :]) ou = get_nparray_from_matrix(u.value[0, :]) return ox, dx, theta, dtheta, ou
Example #24
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_least_squares(self): set_seed(243) m, n = 100, 20 A = cp.Parameter((m, n)) b = cp.Parameter(m) x = cp.Variable(n) obj = cp.sum_squares(A@x - b) + cp.sum_squares(x) prob = cp.Problem(cp.Minimize(obj)) prob_th = CvxpyLayer(prob, [A, b], [x]) A_th = torch.randn(m, n).double().requires_grad_() b_th = torch.randn(m).double().requires_grad_() x = prob_th(A_th, b_th, solver_args={"eps": 1e-10})[0] def lstsq( A, b): return torch.solve( (A_th.t() @ b_th).unsqueeze(1), A_th.t() @ A_th + torch.eye(n).double())[0] x_lstsq = lstsq(A_th, b_th) grad_A_cvxpy, grad_b_cvxpy = grad(x.sum(), [A_th, b_th]) grad_A_lstsq, grad_b_lstsq = grad(x_lstsq.sum(), [A_th, b_th]) self.assertAlmostEqual( torch.norm( grad_A_cvxpy - grad_A_lstsq).item(), 0.0) self.assertAlmostEqual( torch.norm( grad_b_cvxpy - grad_b_lstsq).item(), 0.0)
Example #25
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_logistic_regression(self): set_seed(243) N, n = 10, 2 X_np = np.random.randn(N, n) a_true = np.random.randn(n, 1) y_np = np.round(sigmoid(X_np @ a_true + np.random.randn(N, 1) * 0.5)) X_tch = torch.from_numpy(X_np) X_tch.requires_grad_(True) lam_tch = 0.1 * torch.ones(1, requires_grad=True, dtype=torch.double) a = cp.Variable((n, 1)) X = cp.Parameter((N, n)) lam = cp.Parameter(1, nonneg=True) y = y_np log_likelihood = cp.sum( cp.multiply(y, X @ a) - cp.log_sum_exp(cp.hstack([np.zeros((N, 1)), X @ a]).T, axis=0, keepdims=True).T ) prob = cp.Problem( cp.Minimize(-log_likelihood + lam * cp.sum_squares(a))) fit_logreg = CvxpyLayer(prob, [X, lam], [a]) def layer_eps(*x): return fit_logreg(*x, solver_args={"eps": 1e-12}) torch.autograd.gradcheck(layer_eps, (X_tch, lam_tch), eps=1e-4, atol=1e-3, rtol=1e-3)
Example #26
Source File: models.py From optnet with Apache License 2.0 | 5 votes |
def forward(self, puzzles): nBatch = puzzles.size(0) p = -puzzles.view(nBatch,-1) h2 = self.G2.mv(self.z2)+self.s2 G = torch.cat((self.G1, self.G2), 0) h = torch.cat((self.h1, h2), 0) e = Variable(torch.Tensor()) return QPFunction(verbose=False)( self.Q, p.double(), G, h, e, e ).float().view_as(puzzles)
Example #27
Source File: models.py From optnet with Apache License 2.0 | 5 votes |
def __init__(self, n, Qpenalty, trueInit=False): super().__init__() nx = (n**2)**3 self.nx = nx spTensor = torch.cuda.sparse.DoubleTensor iTensor = torch.cuda.LongTensor dTensor = torch.cuda.DoubleTensor self.Qi = iTensor([range(nx), range(nx)]) self.Qv = Variable(dTensor(nx).fill_(Qpenalty)) self.Qsz = torch.Size([nx, nx]) self.Gi = iTensor([range(nx), range(nx)]) self.Gv = Variable(dTensor(nx).fill_(-1.0)) self.Gsz = torch.Size([nx, nx]) self.h = Variable(torch.zeros(nx).double().cuda()) t = get_sudoku_matrix(n) neq = t.shape[0] if trueInit: I = t != 0 self.Av = Parameter(dTensor(t[I])) Ai_np = np.nonzero(t) self.Ai = torch.stack((torch.LongTensor(Ai_np[0]), torch.LongTensor(Ai_np[1]))).cuda() self.Asz = torch.Size([neq, nx]) else: # TODO: This is very dense: self.Ai = torch.stack((iTensor(list(range(neq))).unsqueeze(1).repeat(1, nx).view(-1), iTensor(list(range(nx))).repeat(neq))) self.Av = Parameter(dTensor(neq*nx).uniform_()) self.Asz = torch.Size([neq, nx]) self.b = Variable(torch.ones(neq).double().cuda())
Example #28
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_sdp(self): set_seed(2) n = 3 p = 3 C = cp.Parameter((n, n)) A = [cp.Parameter((n, n)) for _ in range(p)] b = [cp.Parameter((1, 1)) for _ in range(p)] C_tch = torch.randn(n, n, requires_grad=True).double() A_tch = [torch.randn(n, n, requires_grad=True).double() for _ in range(p)] b_tch = [torch.randn(1, 1, requires_grad=True).double() for _ in range(p)] X = cp.Variable((n, n), symmetric=True) constraints = [X >> 0] constraints += [ cp.trace(A[i]@X) == b[i] for i in range(p) ] prob = cp.Problem(cp.Minimize(cp.trace(C@X) + cp.sum_squares(X)), constraints) layer = CvxpyLayer(prob, [C] + A + b, [X]) torch.autograd.gradcheck(lambda *x: layer(*x, solver_args={'eps': 1e-12}), [C_tch] + A_tch + b_tch, eps=1e-6, atol=1e-3, rtol=1e-3)
Example #29
Source File: test_cvxpylayer.py From cvxpylayers with Apache License 2.0 | 5 votes |
def test_not_enough_parameters(self): x = cp.Variable(1) lam = cp.Parameter(1, nonneg=True) lam2 = cp.Parameter(1, nonneg=True) objective = lam * cp.norm(x, 1) + lam2 * cp.sum_squares(x) prob = cp.Problem(cp.Minimize(objective)) with self.assertRaises(ValueError): layer = CvxpyLayer(prob, [lam], [x]) # noqa: F841
Example #30
Source File: cvxpy_examples.py From cvxpylayers with Apache License 2.0 | 5 votes |
def full_qp(): # print(f'--- {sys._getframe().f_code.co_name} ---') print('full qp') npr.seed(0) nx, ncon_eq, ncon_ineq = 5, 2, 3 Q = cp.Parameter((nx, nx)) p = cp.Parameter((nx, 1)) A = cp.Parameter((ncon_eq, nx)) b = cp.Parameter(ncon_eq) G = cp.Parameter((ncon_ineq, nx)) h = cp.Parameter(ncon_ineq) x = cp.Variable(nx) # obj = cp.Minimize(0.5*cp.quad_form(x, Q) + p.T * x) obj = cp.Minimize(0.5 * cp.sum_squares(Q@x) + p.T * x) cons = [A * x == b, G * x <= h] prob = cp.Problem(obj, cons) x0 = npr.randn(nx) s0 = npr.randn(ncon_ineq) G.value = npr.randn(ncon_ineq, nx) h.value = G.value.dot(x0) + s0 A.value = npr.randn(ncon_eq, nx) b.value = A.value.dot(x0) L = npr.randn(nx, nx) Q.value = L.T # L.dot(L.T) p.value = npr.randn(nx, 1) prob.solve(solver=cp.SCS) print(x.value)