def func(args):
a = 1
b = 2
c = 1
w_a, w_b, w_c = args
out = -((w_a * a) + (w_b * b) + (w_c * c))/(w_a + w_b + w_c)
if out > 1000 or out < -1000:
return 0
return out
from scipy.optimize import minimize
x0 = [0.1, 2, 3]
res = minimize(func, x0, method='Nelder-Mead', tol=1e-6)
我不知道参数是什么,你的函数可以达到无穷大,最大化是没有意义的。然而,这里有一种方法可以最大化函数
请注意,我将您的函数限制在-10001000范围内。我使用了Nelder Mead,但您也可以尝试其他优化算法。我还从函数返回了负数,因为我们使用的是最小化例程,这相当于函数的最大化
x0
是您对函数权重的初始猜测值跑步会给你带来以下好处:
res[x]
会给你的权重array([ 0.18709895, 4.98366926, -5.16577956])
,使你的函数最大化。现在你的函数被最大化了,它的值是res[fun] = -999.999999885923
相关问题 更多 >
编程相关推荐