code
import numpy as np
from scipy.optimize import minimize
# optimize 1
# f(x) = 2xy + 2x - x^2 - 2y^2; x^3 - y = 0; y - 1 >=0
def func(x, sign=1.0):
return sign * (2*x[0]*x[1] + 2*x[0] -x[0]**2 -2*x[1]**2)
def func_deriv (x, sign=1.0):
dfdx0 = sign * (-2*x[0] + 2*x[1] + 2)
dfdx1 = sign * (-4*x[1] + 2*x[0])
return np.array([dfdx0, dfdx1])
cons = (
{ 'type':'eq',
'fun': lambda x: np.array([x[0] ** 3 - x[1]]),
'jac': lambda x: np.array([3*x[0]**2, -1])
},
{'type':'ineq',
'fun': lambda x: np.array([x[1] - 1]),
'jac': lambda x: np.array([0, 1])}
)
res = minimize( func, [-1.0, 1.0], args=(-1.0,), jac = func_deriv,
method='SLSQP',