我正在尝试使用scipy.optimize.minimize来解决以下问题:
说我们给定f(x,y)= x + 2 * y,我们初步估计为(1,1)。我们想求解f(x,y)= 0,但是对于我的目标,任何能得到| f(x,y)|的解决方案<宽容度足够好。显然,有无数个解决方案,所以我的问题是:是否在optimize.minimize中有一种算法可以将其优先于最接近的(欧几里德距离)解决方案?也就是说,我正在想象从初始猜测开始,然后围绕初始猜测在一个圆圈中搜索,如果没有解决方案,则半径会增加,但是一旦它到达公差范围内的点,便会返回该点。
任何指针将不胜感激。
谢谢
答案 0 :(得分:0)
假定方程f(x,y)= 0至少有一个解决方案。那么您可以将其公式化为约束优化问题,以使解决方案最接近给定的初始猜测:
from scipy.optimize import minimize
import numpy as np
# We want to minimize ||f(x)-xinit|| subject to f(x) = 0
f = lambda x: x[0] + 2*x[1]
# the euclidean norm of f-xinit
objfun = lambda x, xinit: np.sqrt(np.sum((f(x)-xinit)**2))
# initial guess
xinit = [1, 1]
# constraint f(x) = 0:
constr = {"type": "eq", "fun": f}
minimize(fun=objfun, args=(xinit,), x0=xinit, constraints=constr)
在无解方程f(x,y)= 0的情况下,您可以尝试最小化| f(x,y)|。没有任何限制。