scipy求解带约束的最优化问题

金融科技面试题目

1 试编程求解下列目标的最优解,可以调用相关的库:
min :x2+3xy+2y2+4x+5y
subject to:x+y=1
x>0
y>0

import numpy as np
import scipy.optimize as opt
e = 1e-10 # 非常接近0的值
fun = lambda x : (x[0] - 0.667) / (x[0] + x[1] + x[2] - 2) # fun约束函数 x[o]代表x,x[1]代表y
fun = lambda x : (x[0]**2 +3 * x[0] * x[1] + 4 * x[0] + 5 * x[1])# 约束函数
#constraints定义了约束条件,每个约束定义为一个词典,键值对如下:
cons = ({'type': 'eq', 'fun': lambda x: x[0] + x[1] - 1}, # x+y=1 ,type:约束类型,‘eq’是等式约束,‘ineq’是不等式约束;
        {'type': 'ineq', 'fun': lambda x: x[0] - e}, # x>=e,即 x > 0
        {'type': 'ineq', 'fun': lambda x: x[1] - e},
       )
x0 = np.array((0.5, 0.5)) # 设置初始值
res = minimize(fun, x0, method='SLSQP', constraints=cons)#SLSQP:使用顺序最小二乘编程(SLSQP)最小化一个或多个变量的标量函数;
print('最小值:',res.fun)
print('最优解:',res.x)
print('迭代终止是否成功:', res.success)
print('迭代终止原因:', res.message)
#scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
#函数官网链接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize
最小值: 5.5
最优解: [0.5 0.5]
迭代终止是否成功: True
迭代终止原因: Optimization terminated successfully

你可能感兴趣的:(scipy,python,序列最小化优化算法)