【问题标题】:Python optimization with a solver使用求解器进行 Python 优化
【发布时间】:2018-12-23 10:52:32
【问题描述】:

我有一个关于求解器的问题。我已经阅读了很多关于它们的内容以及关于 stackoverflow 的内容,但我对操作模式仍有一些疑问。

我想从一个简单的scipy.optimize.minimize 开始。因此我使用以下代码:

p_min = minimize(fun, p_start, method='BFGS', jac=None, hess=None, tol=None, options={ 'maxiter': 1000})

我使用 BFGS 方法进行了 1000 次迭代。 p_start 是我的起始值。我的功能是一个完整的现金流量计算,我必须找到最低价格,调整后的现值等于零。我需要一个求解器来解决这种情况,因为我有一个预测价格,并且始终将我的价格与预测进行比较并使用更高的价格。

我的问题是,如何定义函数?我的整个现金流计算应该是函数吗?我怎么能这样定义呢?非常感谢您的帮助!

【问题讨论】:

    标签: python optimization scipy solver minimize


    【解决方案1】:

    函数必须是整个流量计算(除非有一些常数部分,但这取决于您使用的公式)。该函数必须使用常规的 python 函数来定义。它只能是一个参数的函数。如果有附加参数,您可以使用选项args=(param1, param2) 例如:

    def cash_flow_calculation(p, param1, param2):
       # compute the cash_flow 
       return cash_flow
    
    p_start = 0
    param1, param2 = 4, 5
    p_min = minimize(cash_flow_calculation, p_start, method='BFGS', options={ 'maxiter': 1000}, args=(param1, param2))
    

    【讨论】:

    • 非常感谢@xdze2!那么p可以是未定义的吗?是否有必要,我在 CF 计算的开头写了p_start=p
    • p 不是未定义的。 minimize 函数将多次调用cash_flow_calculation 函数,当然从cash_flow_calculation(p_start) 开始,然后是由最小化算法自动确定的p 值。我现在不确定,“求解器”是什么意思?
    • 好的,是的,这是我的错...我没有在你的示例中看到args 命令。我也可以使用参数param1param2 时间序列数据吗?
    • 是的,附加参数也可以是数据,只要它们不是p的函数即可
    猜你喜欢
    • 2022-12-14
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多