使用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.])