【问题标题】:Find a function maximum with scipy.minimize使用 scipy.minimize 查找函数最大值
【发布时间】:2022-01-15 09:30:23
【问题描述】:

我被指派通过 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 

【问题讨论】:

    标签: python function optimization lambda scipy-optimize-minimize


    【解决方案1】:

    由于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
    

    返回:

    array([ 0.99999975, -1.98841637])
    

    【讨论】:

    • 请注意,初始猜测 0 是任意的。如果你有一个很好的猜测开始使用它。
    • 感谢 AbbeGijlym,您帮了很多忙。我只有几个问题,我如何使它成为一个单行的回报?以及如何让它同时计算两个函数?
    • @AndrésOrtega 你说的太不精确了。 “如何 i[sic] 让它同时计算两个函数?”你想找到两个函数乘积的最小值吗?并行运行它们?
    • @AndrésOrtega :答案更新为单线形式和单线*矢量形式供您娱乐
    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 2021-01-24
    • 1970-01-01
    • 2016-08-12
    • 2013-09-28
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多