例如
from scipy.optimize import differential_evolution
import numpy as np
def func(parameters, *data):
a,b,c = parameters
x,y = data
result = (a*x**2 + b*x+ c - y)**2
return sum(result)
bounds = [(0.5, 1), (0.5, 1), (0.5, 1)]
x = np.array([1,2,3,4,5])
y = np.array([1,4,9,16,25])
args = (x,y)
parameters = differential_evolution(func, bounds, args=args,seed=np.random.seed(7))
print(parameters.x)
那么 a, b, c = [0.85699693 0.5 0.5]
现在,如果有人想强制c 必须大于a,即c>a 用于参数拟合结果。我怎么能做到这一点?
我自己的解决方案是对定义的函数使用条件返回,所以替换return sum(result)
为return sum(result) if c>a else np.Inf
. 这给了我一组新的 a, b, c = [0.83454878 0.50031474 0.83487768]