找到 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])