优化基础1——单纯形法与迭代局部搜索

发布时间 2023-07-14 10:11:31作者: 孙bob

一. 单纯形法学习的参考资料:

运筹学教学|十分钟快速掌握单纯形法(附C++代码及算例) (qq.com)

运筹说 第16期 | 线性规划硬核知识点梳理—单纯形法 - 知乎 (zhihu.com)

史上最详细单纯形法—从理解到计算(带约束规划问题) - 知乎 (zhihu.com)

主要理解其思想应该是对暴力求解法的改进

首先若一个线性规划存在最优解,则该解一定存在一个顶点上,图解法就是计算每一个顶点再判断

而单纯形法通过初始化一个基可行解(即确定一个顶点),判断该顶点是否是最优,不是的话则按照一定方向从该顶点移动到相邻的顶点再判断

所以整体的求解步骤应该是:

1. 先将问题化为线性规划标准型,如果系数矩阵中不直接存在单位矩阵,可以通过大M法和两阶段法构造;

2. 通过单位矩阵确定基可行解,并判断该可行解是否最优,若是则直接跳出,否则步骤3;

3. 按照一定的方向出基,入基,也就是从该顶点移动到相邻顶点

4. 再次判断该顶点是否是最优,并重复迭代

也就是说,暴力法不一定保证接下来探索的顶点比之前的好,但单纯形法可以做到以后的一定比之前好!(但仍然不是多项式时间的)

单纯形法的重点在于,如何判断可行解是否最优,如何确定顶点移动的方向,这两个都是通过矩阵相关来证明的,我没看懂。。。

等补一补矩阵论再回头来看证明吧

二. 迭代局部搜索:

这个启发式算法的思想其实就是局部搜索+扰动

 

核心代码如下