#
# Example: use numpy to print the product of a matrix by a random vector.
#
# Uses xpress.Dot to on a matrix and a vector. Note that the NumPy dot operator
# works perfectly fine here.
#
from __future__ import print_function
import numpy as np
import xpress as xp
x = [xp.var() for i in range(5)]
p = xp.problem()
p.addVariable(x)
p.addConstraint(xp.Sum(x) >= 2)
p.setObjective(xp.Sum(x[i]**2 for i in range(5)))
p.solve()
A = np.array(range(30)).reshape(6, 5) # A is a 6x5 matrix
sol = np.array(p.getSolution()) # suppose it's a vector of size 5
columns = A*sol # not a matrix-vector product!
v = xp.Dot(A, sol) # this is a matrix-vector product A*sol
print(v)
|
#
# An example of a problem formulation that uses the xpress.Dot() operator
# to formulate constraints simply. Note that the NumPy dot operator is not
# suitable here as the result is an expression in the Xpress variables.
#
import xpress as xp
import numpy as np
A = np.random.random(30).reshape(6, 5) # A is a 6x5 matrix
Q = np.random.random(25).reshape(5, 5) # Q is a 5x5 matrix
x = np.array([xp.var() for i in range(5)]) # vector of variables
x0 = np.random.random(5) # random vector
Q += 4 * np.eye(5) # add 5 * the identity matrix
# 6 constraints (rows of A)
Lin_sys = xp.Dot(A, x) <= np.array([3, 4, 1, 4, 8, 7])
# One quadratic constraint
Conv_c = xp.Dot(x, Q, x) <= 1
p = xp.problem()
p.addVariable(x)
p.addConstraint(Lin_sys, Conv_c)
p.setObjective(xp.Dot(x-x0, x-x0))
p.solve()
|