def test_xexp(self) -> None: x = cvxpy.Variable(2, pos=True) b = np.array([1, 0.5]) expr = cvxpy.xexp(x) x.value = b self.assertItemsAlmostEqual(expr.value, [np.e, 0.5 * np.e**.5]) prob = cvxpy.Problem(cvxpy.Minimize(cvxpy.prod(expr)), [x >= b]) prob.solve(solver=SOLVER, gp=True) self.assertItemsAlmostEqual(expr.value, [np.e, 0.5 * np.e**.5])
def test_prod(self): X = np.arange(12).reshape((4, 3)) np.testing.assert_almost_equal(np.prod(X), cvxpy.prod(X).value) np.testing.assert_almost_equal(np.prod(X, axis=0), cvxpy.prod(X, axis=0).value) np.testing.assert_almost_equal(np.prod(X, axis=1), cvxpy.prod(X, axis=1).value) np.testing.assert_almost_equal( np.prod(X, axis=0, keepdims=True), cvxpy.prod(X, axis=0, keepdims=True).value) np.testing.assert_almost_equal( np.prod(X, axis=1, keepdims=True), cvxpy.prod(X, axis=1, keepdims=True).value) prod = cvxpy.prod(X) X_canon, _ = dgp_atom_canon.prod_canon(prod, prod.args) np.testing.assert_almost_equal(np.sum(X), X_canon.value) prod = cvxpy.prod(X, axis=0) X_canon, _ = dgp_atom_canon.prod_canon(prod, prod.args) np.testing.assert_almost_equal(np.sum(X, axis=0), X_canon.value) prod = cvxpy.prod(X, axis=1) X_canon, _ = dgp_atom_canon.prod_canon(prod, prod.args) np.testing.assert_almost_equal(np.sum(X, axis=1), X_canon.value) prod = cvxpy.prod(X, axis=0, keepdims=True) X_canon, _ = dgp_atom_canon.prod_canon(prod, prod.args) np.testing.assert_almost_equal(np.sum(X, axis=0, keepdims=True), X_canon.value) prod = cvxpy.prod(X, axis=1, keepdims=True) X_canon, _ = dgp_atom_canon.prod_canon(prod, prod.args) np.testing.assert_almost_equal(np.sum(X, axis=1, keepdims=True), X_canon.value) X = np.arange(12) np.testing.assert_almost_equal(np.prod(X), cvxpy.prod(X).value) np.testing.assert_almost_equal(np.prod(X, keepdims=True), cvxpy.prod(X, keepdims=True).value) prod = cvxpy.prod(X) X_canon, _ = dgp_atom_canon.prod_canon(prod, prod.args) np.testing.assert_almost_equal(np.sum(X), X_canon.value) x = cvxpy.Variable(pos=True) y = cvxpy.Variable(pos=True) posy1 = x * y**0.5 + 3.0 * x * y**0.5 posy2 = x * y**0.5 + 3.0 * x**2 * y**0.5 self.assertTrue(cvxpy.prod([posy1, posy2]).is_log_log_convex()) self.assertFalse(cvxpy.prod([posy1, posy2]).is_log_log_concave()) self.assertFalse(cvxpy.prod([posy1, 1 / posy1]).is_dgp()) m = x * y**0.5 self.assertTrue(cvxpy.prod([m, m]).is_log_log_affine()) self.assertTrue(cvxpy.prod([m, 1 / posy1]).is_log_log_concave()) self.assertFalse(cvxpy.prod([m, 1 / posy1]).is_log_log_convex())
import numpy as np import cvxpy as cp from scipy.stats import bernoulli from progressbar import progressbar # Retrieve data path = "../storage/max-volume-rectangle.csv" A = np.genfromtxt(path, skip_footer=1, delimiter=" ") b = np.genfromtxt(path, skip_header=len(A), delimiter=" ") # Problem definition n = A.shape[1] lower = cp.Variable(n) upper = cp.Variable(n) sides = upper - lower volume = cp.prod(sides) objective = cp.Maximize(cp.geo_mean(sides)) A_u = np.maximum(A, 0) A_l = np.maximum(-A, 0) constraints = [ sides >= 0, A_u @ upper - A_l @ lower <= b, ] problem = cp.Problem(objective, constraints) problem.solve() volume.value # constraints checker checks = 1000000 print(f"Starting {checks} random corner checks...") for _ in progressbar(range(checks)):
#!/usr/bin/env python3 import cvxpy as cp import numpy as np # Problem data. # Glove eqn 18/8 m = 30 n = 20 np.random.seed(1) X = np.random.randn(n, n) fX = np.random.randn(n, n) B = np.random.randn(n, n) # Construct the problem. W = cp.Variable((n, n)) objective = cp.Maximize(cp.prod(fX, cp.sum(W @ W.T + B - np.log(X)))) #objective = cp.Minimize(cp.sum_squares(A@x - b)) # constraints = [0 <= x, x <= 1] contraints = [W >= 0] prob = cp.Problem(objective, constraints) # The optimal objective value is returned by `prob.solve()`. result = prob.solve() # The optimal value for x is stored in `x.value`. print(x.value) # The optimal Lagrange multiplier for a constraint is stored in # `constraint.dual_value`. print(constraints[0].dual_value)