#
# 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
Lin_sys = xp.Dot (A,x) <= np.array([3,4,1,4,8,7]) # 6 constraints (rows of A)
Conv_c = xp.Dot (x,Q,x) <= 1 # one quadratic constraint
p = xp.problem ()
p.addVariable (x)
p.addConstraint (Lin_sys, Conv_c)
p.setObjective (xp.Dot (x-x0, x-x0))
p.solve ()
|