一、全局优化概述

大家好,欢迎来到《全局优化算法原理与策略选择》的第一章。我是这门课的主讲,一个在算法优化领域摸爬滚打了十几年的工程师。今天咱们不聊虚的,直接切入正题——到底什么是全局优化?它和我们平时说的“找最优解”有什么区别?

说白了,全局优化就是在一个给定的搜索空间里,找到那个让目标函数值最小(或最大)的点。你可能会想:“这不就是求极值吗?”嗯,对,但不全对。关键在于“全局”这两个字。

核心定义:全局优化是指在可行域 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章:全局优化概述 - 知识体系 全局优化 定义与核心概念 问题分类 算法评价指标 局部最优 全局最优 连续/离散 约束/无约束 收敛速度 精度 鲁棒性 核心思想 理解问题类型 → 明确评价指标 → 选择合适的全局优化算法

1.5 本章小结

这一章我们打下了全局优化的基础。你记住了三件事:

  1. 全局最优 ≠ 局部最优,别被“看起来不错”的解骗了。
  2. 先分类,再选算法,连续/离散、约束/无约束决定了你的工具箱。
  3. 评价算法要看三个维度:收敛速度、精度、鲁棒性。没有完美的算法,只有合适的权衡。

给你一个建议:学完这一章,你可以找几个简单的测试函数(比如 Rastrigin 函数、Ackley 函数),用不同的初始点跑一跑,亲眼看看局部最优和全局最优的区别。实践出真知。