找到 scipy.minimize 的函数最大值
Find a function maximum with scipy.minimize
我被指派用 scipy.minimize 通过使用 lambda 的 BFGS 方法找到给定函数的最大值。我已经发现,为了做到这一点,我需要最小化 -(f) 函数,但我无法更改函数本身,只能更改它在最小化中的调用方式。另外,asnwer 必须是一个浮点数。
A abd B 是要最大化的两个函数
在此先感谢您的帮助!!
def A(x):
return -(x-1)**2
B = lambda x: -(x+2)**4
#This is where the minimize is called
def argmax(f):
from scipy.optimize import minimize
return
由于A
函数必须进行符号反转,创建另一个调用-A(x)
的函数,例如:
from scipy.optimize import minimize
res = minimize(lambda t: -A(t), 0)
print(res.x[0])
打印
0.9999999925496535
同样必须翻转 B
以便最小化找到 B
的 argmax:
res = minimize(lambda t: -A(t), 0)
print(res.x[0])
打印
-1.987949853410927
这两个答案都接近正确(预期为 1 和 -2),尽管 B 的结果有相当大的误差 0.012。
两种最大化(通过最小化)的单行形式是
return minimize(lambda t: -A(t), 0).x[0]
(对于 B 也类似)
要同时最小化这两个函数,请创建一个采用向量的函数:
return minimize(lambda v: -A(v[0])-B(v[1]), [0, 0]).x
哪个returns:
array([ 0.99999975, -1.98841637])
我被指派用 scipy.minimize 通过使用 lambda 的 BFGS 方法找到给定函数的最大值。我已经发现,为了做到这一点,我需要最小化 -(f) 函数,但我无法更改函数本身,只能更改它在最小化中的调用方式。另外,asnwer 必须是一个浮点数。
A abd B 是要最大化的两个函数
在此先感谢您的帮助!!
def A(x):
return -(x-1)**2
B = lambda x: -(x+2)**4
#This is where the minimize is called
def argmax(f):
from scipy.optimize import minimize
return
由于A
函数必须进行符号反转,创建另一个调用-A(x)
的函数,例如:
from scipy.optimize import minimize
res = minimize(lambda t: -A(t), 0)
print(res.x[0])
打印
0.9999999925496535
同样必须翻转 B
以便最小化找到 B
的 argmax:
res = minimize(lambda t: -A(t), 0)
print(res.x[0])
打印
-1.987949853410927
这两个答案都接近正确(预期为 1 和 -2),尽管 B 的结果有相当大的误差 0.012。
两种最大化(通过最小化)的单行形式是
return minimize(lambda t: -A(t), 0).x[0]
(对于 B 也类似)
要同时最小化这两个函数,请创建一个采用向量的函数:
return minimize(lambda v: -A(v[0])-B(v[1]), [0, 0]).x
哪个returns:
array([ 0.99999975, -1.98841637])