Exemple #1
0
    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])
Exemple #2
0
    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())
Exemple #3
0
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)):
Exemple #4
0
#!/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)