#
# Python equivalent of the ComplexUserFunction.c example in examples/nonlinear/c directory
#
# Define objective and constraint as user functions that return
# derivatives
#
# Minimize myobj (y,z,v,w)
# s.t.
# ball (x,t) <= 730
# 1 <= x <= 2
# 2 <= y <= 3
# 3 <= z <= 4
# 4 <= v <= 5
# 5 <= w <= 6
#
# where
#
# myobj (y,z,v,w) = y**2 + z - v + w**2
# ball (x,t) = x**2 + t**2
import xpress
def myobj (y,z,v,w):
return (y**2 + z - v + w**2, # value of the function
2*y, # derivatives w.r.t. y
1, # z
-1, # v
2*w) # w
def ball (x,t):
return (x**2 + t**2,
2*x,
2*t)
x = xpress.var (lb = 1, ub = 2)
y = xpress.var (lb = 2, ub = 3)
z = xpress.var (lb = 3, ub = 4)
v = xpress.var (lb = 4, ub = 5)
w = xpress.var (lb = 5, ub = 6)
t = xpress.var (lb = -xpress.infinity) # free variable
p = xpress.problem ()
p.addVariable (x,y,z,v,w,t)
p.setObjective (t)
p.addConstraint (t == xpress.user (myobj, y,z,v,w))
p.addConstraint (xpress.user (ball, x, t) <= 730)
p.solve ()
print ('objective:', p.getObjVal(), '; solution:', p.getSolution ())
|