使用python scipy.Optimize.minimize优化具有多个输出的函数
我在网上搜索了一下,没有找到任何解决这个问题的方法,所以我决定在这里正式提问 我有一个具有多个输出的函数:使用python scipy.Optimize.minimize优化具有多个输出的函数,python,scipy,mathematical-optimization,Python,Scipy,Mathematical Optimization,我在网上搜索了一下,没有找到任何解决这个问题的方法,所以我决定在这里正式提问 我有一个具有多个输出的函数: f(input1,input2,... ,inputn) = output1,ouput2,output3 我希望尽量减少对其他输出的约束,例如: output2 >= 0 and output3 <= 7 (*constraints*) 现在我相信答案应该在Scipy函数的文档中 事实上,据我所知,我只能约束我的函数输入,而不能约束函数的一些输出。我遗漏了什么吗?下面
f(input1,input2,... ,inputn) = output1,ouput2,output3
我希望尽量减少对其他输出的约束,例如:
output2 >= 0 and output3 <= 7 (*constraints*)
现在我相信答案应该在Scipy函数的文档中
事实上,据我所知,我只能约束我的函数输入,而不能约束函数的一些输出。我遗漏了什么吗?下面是一个带约束的优化示例:
from scipy.optimize import minimize
def f(xy):
x, y = xy
return x**2 + y**2
def constraint1(xy):
x, y = xy
return x-1
def constraint2(xy):
x, y = xy
return y-2
constraints = ({'type': 'ineq', 'fun': constraint1},
{'type': 'ineq', 'fun': constraint2})
xy_start = [0, 0]
res = minimize(f, xy_start, method='SLSQP', constraints=constraints)
其中:
fun: 4.999999999999997
jac: array([2., 4.])
message: 'Optimization terminated successfully.'
nfev: 13
nit: 3
njev: 3
status: 0
success: True
x: array([1., 2.])
其思想是,要最小化的函数是标量函数:返回值必须仅为output1
。为了定义每个约束,必须添加其他函数:constraint1(输入)->output2
,constraint2(输入)->output3
。。。等
也许您可以将代码的“非常机密的部分”分成不同的函数,目标函数和约束函数都将使用这些函数
fun: 4.999999999999997
jac: array([2., 4.])
message: 'Optimization terminated successfully.'
nfev: 13
nit: 3
njev: 3
status: 0
success: True
x: array([1., 2.])