计算机算法设计与分析-复习26
计算机算法设计与分析-复习26(线性规划)
普通单纯形法
- 目标函数用非基变量表达
- 当目标函数为max时,所有检验数λj≤0 ( j=1, …, n) 时,基本可行解为最优解。
- 求得最优解后,需要令非基变量为0,得到基本可行解。
- 当目标函数为max时,进基变量的选取:选择λk>0的非基变量xk。如果有多个,选择最大的。(如果相同,任选)
- 出基变量的选取(与目标函数无关):选择出基检验数最小的。(bi / aij) 注意:如果aij <= 0,则出基检验数为正无穷大。(如果相同,任选)
- λi表示目标函数中,每一项的系数(检验数)。当求得最优解的时候,常数项(b),就是目标函数值的相反数。因此需要取负号。
- 由于目标函数用非基变量表示,因此当一个非基变量进基的时候,需要将其λi置为0.
- 当确定完进基和出基变量之后,该行列对应的元素需要化为1,该列其他元素化为0.进行完这个操作之后,判断是否产生最优解,然后再选择其他的进基和出基变量。
- max最优性条件
- 中心部位有单位阵
- 右列非负
- 底行基变量为0
- 非基变量非正数(<=0)(当非基变量等于0时,此时存在多重最优解)
- 如何判断解?(以max为例)
- 若λj≤ 0(j=1, 2, …, n)得到最优解
- 某个λk>0且aik≤0 (i=1, 2, …, m)则线性规划具有无界解。(当你选择出基变量的时候,比值全是正无穷)
- 存在λk>0且aik (i=1, …, m)不全非正,则进行换基;
- 对于目标函数为min的线性规划问题,最优解的判断标准:λj≥0(j=1, …, n)时得到最优解
- 当目标函数为min时,进基变量的选取:选择λj<0的。如果相同任选。如果有多个,选择最小的。出基变量的选择跟max的一样。
- 当求得最优解时,最优值仍然取相反数。
普通单纯形法解的判断:
人工变量法
有的时候,将线性规划化为标准型后,还是不存在一个可用的基矩阵,此时我们可以加入人工变量,凑基矩阵,这种方法称为人工变量法。
人工变量法有两个求解方法:大M单纯形法和两阶段单纯形法
这两种求解方法的共同目的:将人工变量从基变量换出。
大M单纯形法
- 当目标函数是max,加入人工变量后,目标函数相应要添加:-Mxi
- 当目标函数是min,加入人工变量后,目标函数相应要添加:+Mxi
- 加入人工变量后,首要所做的事情,就是将人工变量的Cj由M->0
- 人工变量出基之后,不用再进行计算了,该列的所有值全部置为空
- 如果最优解中,含有人工变量,那么该问题无最优解。(最优值含有M)
两阶段单纯形法
- 加入人工变量后,第一阶段的目标函数:min w = xi + xj + ... + xn
- 第一阶段(去掉人工变量,出基),求这个目标函数的线性规划,如果找到最优解,且最优值为0,那么开启第二阶段。如果最优值不为0,那么无最优解。
- 第二阶段(确保目标函数均是非基变量),以第一阶段的最后一张单纯形表为基准 + 源目标函数进行计算即可(普通单纯形法)。(需要保证目标函数均为非基变量)
- 人工变量出基之后,不用再进行计算了,该列的所有值全部置为空。
公式法单纯形法
公式的推导过程
公式
- 这里的N1和N3不是第一列和第三列,而是向量。
- 对于λ也是如此。
- 注意要化成标准型。
致谢
[1] 以上图片来自于中国科学院大学马丙鹏老师计算机算法设计与分析课程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现