【问题标题】:Bounded Optimization using scipy Libraries使用 scipy 库的有界优化
【发布时间】:2019-05-09 22:56:41
【问题描述】:

让我们假设一个对数似然函数f(x, y, z) = prob(k0)* log((1-x)^(1-y)) + prob(k1)*log((1-x)^(1-z)) 并且存在约束使得 x、y 和 z 的可能值应位于 0 和 1 之间。 目标是最小化函数并在该最小值处返回 x、y 和 z 的值。

我尝试使用共轭梯度法 scipy 库。

   params = sp.optimize.minimize(fun=f, x0=initial_params, args=(data,), method='CG',
                                     jac=df,options={'gtol': 1e-05,'disp': True})

该方法在第一次迭代中失败。

Warning: Desired error not necessarily achieved due to precision loss.

是否需要提供 Hessian 矩阵,因为有两个以上的变量?

我也尝试过 Nelder-mead 方法,但需要很多时间。

params = sp.optimize.minimize(fun=f, x0=initial_params, method='Nelder-Mead', args=(data,),  options={'disp': True})

此外,更重要的是,该方法不考虑变量的边界,并且在某些情况下返回未绑定的 x、y 和 z 的值。我

在 scipy 或任何其他考虑这种类型的有界优化的包中还有其他方法。请帮忙。

【问题讨论】:

    标签: numpy optimization mathematical-optimization expectation-maximization


    【解决方案1】:

    根据the scipy.optimize.minimize documentation(查找“bounds”参数),边界仅受 L-BFGS-B、TNC、SLSQP 和 trust-constr 方法支持。 L-BFGS-B 应该是您的首选,它通常在大多数问题上都非常有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-11
      • 2013-08-15
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多