单纯形法简陋入门
单纯形法
解决的问题
单纯形法可以在较短的时间(似乎是非多项式时间,但我不会证,也找不到论文,不过就是非常快)内解决线性规划问题
形式的处理
对于一个线性规划问题,我们可以写作(以下的是变量,其他都是常数,大写字母表示矩阵):
其中 ,否则没有意义
这样的形式是不利于我们计算的,我们考虑一个更好看的形式(标准形式):
当然,为了处理时的一致有序,我们把的表达式也插入到矩阵中,并令其值为,这样这一行最后的就是答案的相反数(也就是说后文中的都是“答案行”消元后的系数)
下面给出一些简单情况的转化方法:
如果求的是min或约束条件中出现大于等于,全部取负即可
如此,我们就得到了标准形式的线性约束条件
单纯形的处理
关于矩阵的联想
标准形式和线性方程组很像,我们不由得联想到高斯消元,但是线性规划是一个狭长的矩形(上文说了,总存在)
这时我们就不能完全消元,只能选择其中一个阶矩阵将其变为单位矩阵,而单纯形法就是告诉我们应该选择那些来消元
更具体的步骤
选择基变量
要求的最大值,我们不难发现,对于任意,我们可以直接令(当然得保证有解)
联系几何意义,线性规划实际上就是在一个超平面上的凸包里选择一个点,使其坐标的一个线性组合最大,那么不难发现是凸包最外围的“界”上的点满足性质
而“界”的代数含义就是,于是我们可以让所有我们不准备进行消元的变量为,之后我们称这样的变量为非基变量,反之叫做基变量
显然,我们希望基变量在中对应的系数越大越好,因为这样答案收敛快
不过除了第一次,在选择基变量时也应注意解的可行性,记基变量全体为,有定义有
于是我们采用最为朴素的方法,枚举所有的,假设我们要将加入并将删除,那么我们可以直接令,并计算值,代回去验证解的可行性(注意此时除了的非基变量依然都是而基变量经过消元后每行只有一个),然后选择最大的合法值即可
在得到新的之后,重新消元重复上述步骤
终止条件
结合上文,注意到当所有非基变量在中对应的系数都不大于时为最优解(值得一提的是,如果此时存在一个非基变量在中的对应系数恰为,有无穷种构造方案)
因为如果存在对应系数大于的情况,那么可以将其作为新的基变量,并且一定会使得答案增大
又是没有实现的一天
如有错误,欢迎指正
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现