我已经在网上进行了一些搜索,但没有找到解决此问题的任何方法,因此我决定在这里正式提出。
我有一个具有多个输出的函数:
f(input1,input2,... ,inputn) = output1,ouput2,output3
我希望最小化output1
约束其他输出,例如:
output2 >= 0 and output3 <= 7 (*constraints*)
我的想法是具有以下程序结构:
def function(input1,input2,...,inputn):
#very secret part of code
return(output1,ouput2,output3)
inputs=[1,31,22]
_res = optimize.minimize(function, inputs, method='nelder-mead',
options=options,*constraints*)
现在,我认为答案应该在Scipy minimize
函数的文档中。
事实是,据我了解,我只能约束函数输入,而不能约束函数的某些输出。我想念什么吗?
答案 0 :(得分:0)
这是有约束的优化示例:
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(inputs)->output2
,constraint2(inputs)->output3
...等等
也许您可以将代码的“非常秘密的部分”分成不同的功能,这将由目标功能和约束功能共同使用