⌘ K
TGU · 2026
Welcome

智能优化算法

它是为了解决数学建模比赛里经常会遇到的一个问题:可以挑选的方案非常多,时间和算力不允许我们一个个的试,我们需要找到一个相对最优的方案。

比如,一辆配送车应该按什么顺序经过几十个地点?有限的资金应该怎样分配?工厂建在哪里成本最低?比赛日程怎样安排更合理?这些问题其实都在问同一件事:在一大堆可能的方案里,怎样找到一个尽量好的方案?

这就是优化问题,而智能优化算法是帮助我们偷懒“找方案”的工具。

遍历(就是一种种方案试),永远是最可靠的优化问题的解决方法,但是绝大部分情况下,时间成本都不允许我们单独选择它。

什么是优化

先规定什么叫“好”,再去寻找最好的方案。

  1. 决策变量:我们能够调整什么。
  2. 目标函数:我们的最终目标怎么量化,怎么表达。
  3. 约束条件:方案必须满足什么约束条件。

用数学形式表示,通常是在可行范围内寻找让目标函数最小或最大的变量:

minxΩf(x)\min_{x\in\Omega}f(x)

这里的 xx 就是我们要找的方案,f(x)f(x) 用来评价方案好不好,Ω\Omega 表示所有满足约束条件的方案。

题目条件抽象成数学模型之后,不是说就完全是数学的问题了,必须要记住数学模型里的什么条件代表什么含义,方便出问题之后返工和在论文上解释结果。

“智能”体现在哪

有些优化问题可以直接求导、列方程,算出精确答案。但在建模比赛中,我们经常碰到规模很大、函数很复杂、变量是离散的,甚至连公式都不光滑的问题。这时很难直接算出最优解,只能在大量方案中不断尝试。

智能优化算法做的事情,可以概括成四步:

先产生一些方案(初始方案集) → 评价方案好不好(代入目标函数得到所有目标值) → 按照某种规则产生新方案 → 不断重复(直到撞到截止条件)。

对于智能优化算法来说,目标函数只是一个函数黑箱子,算法给黑箱子一个输入,黑箱子吐出来一个目标值,智能优化算法不关心也关心不了目标函数内是怎么运作的。

它的“智能”不是说算法真的会思考,而是它会利用已经搜索到的信息,决定下一步往哪里找。不同算法模仿了不同的搜索方式:

  • 模拟退火模仿物理中的降温过程,偶尔接受差一点的方案,避免太早卡住;
  • 遗传算法模仿生物进化,让较好的方案进行选择、交叉和变异;
  • 蚁群算法模仿蚂蚁留下信息素,让越来越多的个体选择较好的路线;
  • 粒子群算法模仿鸟群觅食,让每个粒子同时参考自己的经验和群体的经验。

这些方法通常不能从数学上保证一定找到真正的全局最优解,但它们一般能在有限时间内找到一个质量不错的可行解。对于数学建模来说,这已经非常有价值。

一般什么时候用

就像我刚才上面说的对于智能算法来说,目标函数是一个黑箱子,因为我们能解析目标函数的情况,比如解方程组,线性规划等等,都不会选智能优化算法来试解。

当我们的目标函数没有充分的数学工具去直接求最优解,我们会把目标函数打包成一个函数黑箱子,后面的工作一般就不关心函数内部是什么样的了。 后面就是用各种优化算法来找相对的最优解了。

我个人是建议先用遍历(调整步长)来找一些比较大概率有最优解存在的区域集,每个区域的大小(也就是步长大小)由你的目标函数复杂程度、电脑算力和你的解空间大小共同决定。

然后在这些区域里用智能算法来尝试,这里比较玄学,祝同学们好运。

个人建议

各种智能优化算法非常多,我们讲的也只是一些比较常见,认可度比较高的算法。 学的时候大致知道什么意思,有什么参数能调,参数代表什么含义(方便你调参)就可以了。 不建议过度深究,用的时候查资料,然后在matlab或者python里调用就行了。

有兴趣的同学可以去查一查python里怎么多线程,多进程并行求解,能最大限度压榨你电脑的性能。

论文上写的和你用的大多数情况下是不完全一致的,就跟你考试的时候写在卷子上的,和写在稿纸上的内容的关系一样。