一、全局优化概述
大家好,欢迎来到《全局优化算法原理与策略选择》的第一章。我是这门课的主讲,一个在算法优化领域摸爬滚打了十几年的工程师。今天咱们不聊虚的,直接切入正题——到底什么是全局优化?它和我们平时说的“找最优解”有什么区别?
说白了,全局优化就是在一个给定的搜索空间里,找到那个让目标函数值最小(或最大)的点。你可能会想:“这不就是求极值吗?”嗯,对,但不全对。关键在于“全局”这两个字。
核心定义:全局优化是指在可行域 S 中,寻找一个点 x*,使得对于所有 x ∈ S,都有 f(x*) ≤ f(x)(最小化问题)。这个 x* 就是全局最优解。
1.1 局部最优 vs 全局最优
这个概念我当年刚入行时也犯过迷糊。有一次做天线阵列的波束赋形设计,算法跑了一整天,结果出来一个看起来不错的解。我兴冲冲地拿去给导师看,他看了一眼说:“你再换个初始点试试。”结果换了初始点,找到了一个更好的解。原来我之前找到的只是一个局部最优。
为什么会这样?因为很多实际问题的目标函数都不是“光滑的碗”,而是“崎岖的山脉”。
| 概念 | 定义 | 特点 | 类比 |
|---|---|---|---|
| 局部最优 | 在邻域内最优,但全局不一定 | 容易找到,但可能“坐井观天” | 山间的一个小盆地 |
| 全局最优 | 在整个可行域内最优 | 难找,但才是真正的目标 | 整个山脉的最低谷 |
我曾经踩过的坑:在做电力系统经济调度时,用了经典的梯度下降法,结果收敛到了一个局部最优解,导致发电成本比预期高了 12%。后来改用模拟退火算法,才找到了真正的全局最优。所以,选对算法真的很重要。
1.2 优化问题的分类
你想想看,现实世界中的优化问题五花八门,但我们可以从两个维度把它们分清楚。
连续 vs 离散
- 连续优化:变量可以取任意实数值。比如调整 PID 控制器的三个参数,每个参数都可以是 0.1、0.01 甚至 0.001。
- 离散优化:变量只能取有限个值。比如旅行商问题中,城市访问顺序是一个排列,不能是“第 2.5 个城市”。
约束 vs 无约束
- 无约束优化:变量可以在整个实数空间自由取值。数学上比较“干净”,但实际中很少见。
- 约束优化:变量必须满足某些条件。比如结构优化中,应力不能超过材料屈服强度;投资组合中,各资产权重之和必须为 1。
| 分类维度 | 类型 | 典型问题 | 常用算法 |
|---|---|---|---|
| 变量类型 | 连续 | 参数辨识、曲线拟合 | 梯度下降、牛顿法 |
| 变量类型 | 离散 | 排程问题、路径规划 | 遗传算法、蚁群算法 |
| 约束条件 | 无约束 | 最小二乘问题 | 共轭梯度法 |
| 约束条件 | 有约束 | 工程设计、资源分配 | 罚函数法、拉格朗日法 |
我的个人习惯:拿到一个优化问题,我第一件事就是判断它是连续还是离散、有约束还是无约束。这决定了后续算法选择的大方向。别一上来就套算法,先搞清楚问题类型。
1.3 算法评价指标
好,现在我们知道要找全局最优,也知道了问题分类。但怎么评价一个算法好不好?我建议从三个维度来看。
收敛速度
说白了就是算法跑多快才能找到解。我记得有一次做实时控制系统优化,要求 0.1 秒内给出结果。有些算法精度很高,但跑一次要 10 秒,根本用不了。收敛速度通常用迭代次数或函数评估次数来衡量。
精度
找到的解离真正的全局最优有多近?有些应用场景,比如卫星轨道设计,差 0.1% 可能就导致任务失败。但有些场景,比如游戏 AI 的路径规划,差不多就行。
鲁棒性
这是我最看重的指标。一个算法在测试函数上表现很好,但换到实际问题就“翻车”,那就不够鲁棒。鲁棒性好的算法,对初始点不敏感,对参数设置不敏感,对问题规模变化也能适应。
| 指标 | 含义 | 如何衡量 | 我的经验 |
|---|---|---|---|
| 收敛速度 | 达到指定精度所需的计算量 | 迭代次数、CPU 时间 | 实时系统优先考虑 |
| 精度 | 解与真实最优的接近程度 | 目标函数差值、距离度量 | 高精度需求选确定性算法 |
| 鲁棒性 | 算法在不同条件下的稳定性 | 多次运行的成功率、方差 | 工程应用最看重这个 |
注意:这三个指标往往相互制约。收敛快的算法可能精度不高;精度高的算法可能鲁棒性差。没有“万能算法”,只有“适合问题的算法”。
1.4 本章知识体系
为了让你更直观地理解本章的知识结构,我画了一张图。你可以看到,全局优化从定义出发,分支出问题分类和算法评价两大块,最终服务于算法选择。
1.5 本章小结
这一章我们打下了全局优化的基础。你记住了三件事:
- 全局最优 ≠ 局部最优,别被“看起来不错”的解骗了。
- 先分类,再选算法,连续/离散、约束/无约束决定了你的工具箱。
- 评价算法要看三个维度:收敛速度、精度、鲁棒性。没有完美的算法,只有合适的权衡。
给你一个建议:学完这一章,你可以找几个简单的测试函数(比如 Rastrigin 函数、Ackley 函数),用不同的初始点跑一跑,亲眼看看局部最优和全局最优的区别。实践出真知。