【问题标题】:What is the difference between scipy.optimize.fminbound and scipy.optimize.minimize_scalar(bounds=(0,1))scipy.optimize.fminbound 和 scipy.optimize.minimize_scalar(bounds=(0,1)) 有什么区别
【发布时间】:2016-08-03 19:18:21
【问题描述】:

【问题讨论】:

    标签: python optimization scipy


    【解决方案1】:

    有时是,有时不是。这取决于您定义的功能和您选择的方法。主要区别在于定义的func 必须返回一个标量才能使用minimize_scalar。我认为这是因为它可以更快地返回结果。

    更具体的解释见下文:

    from scipy import optimize
    
    def func(x):
        return (x - 2) * (x + 2)**2
    
    def func2(x):
        return (x - 2) * x * (x + 2)**2
    
    min = 0
    max = 1
    
    res1 = optimize.fminbound(func, min, max)
    res2 = optimize.minimize_scalar(func, bounds=(min,max))
    res3 = optimize.fminbound(func2, min, max)
    res4 = optimize.minimize_scalar(func2, bounds=(min,max))
    
    print res1, res2.x
    print res3, res4.x
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    xaxis = np.arange(-15,15)
    
    plt.plot(xaxis, func(xaxis))
    plt.plot(xaxis, func2(xaxis))
    plt.scatter(res2.x, res2.fun)
    plt.scatter(res4.x, res4.fun)
    plt.show()
    

    如果您想查看函数轨迹和最小位置,可以查看这些图。打印输出为:

    0.666666844366 0.666666656734
    0.999994039139 1.28077640403
    

    【讨论】:

    • 有趣。从文档Objective function to be minimized (must accept and return scalars). 我了解到对于 fminbound func 也应该返回一个标量。
    • 所有“正常”优化软件都要求目标是标量。如果目标返回一个向量,我们最终会遇到一个多目标(或多标准)问题,这是一个相当专业的领域。
    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 2011-09-28
    • 2013-11-17
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    相关资源
    最近更新 更多