使用 scipy 个库进行有界优化

Bounded Optimization using scipy Libraries

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

此外,更重要的是,该方法不考虑变量的界限,并且 returnx、y 和 z 的值在某些情况下不在界限内。我

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

根据 the scipy.optimize.minimize documentation(查找 "bounds" 参数),只有 L-BFGS-B、TNC、SLSQP 和 trust-constr 方法支持边界。 L-BFGS-B 应该是您的首选,它通常可以很好地解决大多数问题。