【发布时间】:2023-04-03 20:47:02
【问题描述】:
我正在 scipy 中寻找一种优化方法,它允许我最小化对象函数 f(x,y)(返回向量),受约束 g(x,y)
我尝试使用 scipy.optimize.least_squares、scipy.optimize.leastsq 和 scipy.optimize.minimize 来解决我的问题。问题是 minimumsq 和 least_squares 允许对象函数是非标量的,但不给我实现约束的可能性(仅限边界)。另一方面,minimize 给了我实现约束和边界的可能性,但是 f(x,y) 必须返回一个标量。因此,我正在寻找一种将两者结合起来的解决方案。有谁知道这样的事情是否存在?
我要最小化的函数是
def my_cost(p,f_noise):
x,y = p[0], p[1]
f = #some function that returns a 3x1 array
return (f - fnoise)**2
我用最小二乘法做到了这一点。
opti.least_squares(my_cost, p0[:], args = (f_noise,),gtol=1e-2, bounds=bounds)
但是在这里我有一个问题,我无法约束 p 中的变量。我需要约束 p 以使其满足
def constraint(p)
x = p[0]
return fy(x) - y <= 0.1 #variable y therefore becomes a function of variable x
为了实现约束,我测试了 scipy 的最小化函数
opti.minimize(my_cost, p0[:], args = (f_noise,), bounds = bounds, constraints={'type': 'eq', 'fun': constraint})
但在这里我似乎找不到让 my_cost 和 f_noise 成为 3x1 数组的方法。
对于任何帮助,我都非常感激! 为你的时间干杯!
【问题讨论】:
标签: python optimization scipy least-squares scipy-optimize-minimize