购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
基于Python的优化问题

2.1 数值优化

在做参数敏感性分析时,我们一般用的是穷举法(全部计算)或网格法(间隔计算),得到所有值后,通过排序、绘制热力图或3D表面图的方式筛选出合适的参数。我们需要的并不是最优值,而是综合考虑下的最合适的区间,它带有一定的主观因素。

而在函数求根、求最大值/最小值等问题中却有所不同,需要的是最优值,中间的结果并不重要,只要快速收敛到最优值即可。

为了最优化工具能正常运行,通常都需要对最优化问题做一定的调整以满足参数要求。求最大值问题要将函数取负数转换成求最小值问题。函数极值处的导数必为0,所以求最小值问题也可以转换成求导数函数的根。

优化时搜索的初始位置很重要,选择不当会导致只能找出局部最优。

2.1.1 线性规划

我们以线性规划为例子,介绍linprog与minimize的用法。

img

1.linprog

(1)需要将求max调整成求min,即min-(7 x +5 y )。

(2)只支持小于或等于,需要将≥调整成≤。

img

输出如下:

img

2.minimize

目标函数:min-(7 x +5 y )。

约束条件分为两种:eq表示=0,ineq表示≥0。这里与linprog不同,约束条件也需要调整:

img
img

输出如下:

img

2.1.2 非线性优化

minimize是各种优化算法的统一入口,后面是交给了具体的算法来实现。对于无约束非线性优化算法常用BFGS算法。L-BFGS算法是BFGS的改进版,在高维度问题时占用的内存少,而L-BFGS-B算法可用于有界限问题。

更多细节可参考https://docs.scipy.org/doc/scipy/reference/optimize.html。

2.1.1节示例的线性函数无法演示BFGS,我们换成非线性函数。

img

BFGS算法:

img

L-BFGS-B算法:

img
img

SLSQP算法: UX/LtfuyY1AzJ3+8pAu/k7oeHKszVXzawyfsEsdEaISb90ES+9PdwKIbWHR8xy87

img
点击中间区域
呼出菜单
上一章
目录
下一章
×