Logo
Section 1 / 2

总结

获取课程概要。

导入

总结

获取课程概要。

一路走来,我们终于完成了!在本节课中,我们将回顾整个课程所学的内容。

引言

在课程的第一章,我们学习了优化的含义及其对生活的影响。我们明确了课程所需的基础知识,以确保能获得最佳学习效果,并了解了将要使用的所有工具。随后,我们学习了优化问题的一般定义,如何用数学形式表达优化问题,并通过绘图解决了几个简单的优化问题。

导数与梯度

本章我们学习了一维和多维导数的概念,以及它们在解决优化问题中的应用。我们定义并计算了函数的导数、梯度和海森矩阵。我们掌握了第一个精确优化算法,并使用 SymPy 在 Python 中实现了这些算法。

...
梯度是函数增长的方向

第一类优化算法

在本章中,我们学习了近似算法的必要性。尽管它们不能提供精确解,但相比精确算法速度更快,适用于变量数量庞大的问题。同时,我们还可以控制近似精度。我们学习了二分查找、梯度下降法和牛顿法。

需要牢记每种方法的要求和优势:二分查找要求函数单调,并且存在一个能将x轴划分为两个可分离区域的约束条件。它易于实现,无需计算导数。梯度下降法要求函数为凸函数且可导,是机器学习中广泛使用的快速方法。牛顿法要求函数为凸或凹且二阶可导,因为它是一种二阶方法,三者中速度最快。

本章我们首次使用了 SciPy。

群体方法

我们需要一些适用于广泛问题、不依赖特定条件的方法。群体方法属于启发式算法,既非精确也非近似算法,但我们期望它们能够收敛。这类方法不要求目标函数或约束满足任何特殊条件。我们学习了两种群体方法:遗传算法和粒子群优化(PSO)。

遗传算法受到进化理论的启发,通过突变和交叉等操作探索解空间。PSO 模拟群体动态行为,利用带有速度的粒子,在整个群体寻找最优解的过程中不断调整其运动状态。

我们还提到了其他一些群体方法,供后续自行研究。

...
突变示例

添加约束

在本章中,我们开始正式处理约束条件。虽然从一开始就存在约束,但这里我们才真正学习了专门应对约束的方法。我们指出等式约束是理想的约束类型,因为它们可以在消除变量的同时简化问题。这是处理约束的第一种方法:通过改变目标函数,将显式约束转化为隐式约束。

另一种方法是罚函数法。我们在目标函数中增加一项惩罚项,确保任何无效解都劣于所有有效解。这是一种非常强大的方法,可以轻松应对各种类型的约束。至此,我们已经掌握了处理多种优化问题的能力。

线性约束优化

若不接触一些能加快解决特定类型问题速度的高级算法,课程便不够完整。本章我们学习了线性优化。我们定义了什么是线性问题,并学习了如何用矩阵形式表示。

我们使用 SciPy 的 linprog 函数求解连续线性问题,并学习了如何使用 CVXPY 库求解整数线性问题。尽管我们此前已掌握通过其他方法解决这些问题的技术,但这些专用解决方案效率更高、运行更快。

至此,课程内容总结完毕!这是我们对每一章内容的简要回顾,帮助我们从整体上把握所学的知识体系。

第一种优化算法

结论