目录

  • 一、单纯形法简介
    • 1.  是什么
    • 2.  求解思想
    • 3.  求解步骤
  • 二、 手算求解
  • 三、python实现求解
  • 参考资料

一、单纯形法简介

1.  是什么

单纯形法是求解线性规划问题最常用、最有效的算法之一。单纯形法最早由 George Dantzig于1947年提出,近70年来,虽有许多变形体已经开发,但却保持着同样的基本观念。

2.  求解思想

单纯形法的基本想法是从线性规划可行集的某一个顶点出发,沿着使目标函数值下降的方向寻求下一个顶点,面顶点个数是有限的,所以,只要这个线性规划有最优解,那么通过有限步选代后,必可求出最优解。
       为了用选代法求出线性规划的最优解,需要解决以下三个问题 :

  • 最优解判别准则,即迭代终止的判别标准 [1] ;
  • 换基运算,即从一个基可行解迭代出另一个基可行解的方法 [1] ;
  • 进基列的选择,即选择合适的列以进行换基运算,可以使目标函数值有较大下降 [1] 。

3.  求解步骤

单纯形法的一般解题步骤可归纳如下:

  • (1) 把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解 [2] 。
  • (2) 若基本可行解不存在,即约束条件有矛盾,则问题无解 [2] 。
  • (3)若基本可行解存在,以初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解 [2] 。
  • (4)按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解 [2] 。
  • (5)若迭代过程中发现问题的目标函数值无界,则终止迭代 [2] 。

用单纯形法求解线性规划问题所需的迭代次数主要取决于约束条件的个数。现在一般的线性规划问题都是应用单纯形法标准软件在计算机上求解 [2] 。

二、 手算求解

求解步骤:

  1. 化标准形

    2.根据标准式,构造初始单纯形表

    3.找出可行解:令XBX_BXB​所在的列等于b所在的列,其他变量等于0,可得初始解为:X0={x1=0,x2=0,x3=8,x4=16,x5=12}X^0= \left\{ x_1=0,x_2=0,x_3=8,x_4=16,x_5=12 \right\}X0={x1​=0,x2​=0,x3​=8,x4​=16,x5​=12}
    4.求出检验数,检验数求解公式如下:
    σj=cj−(cb1.cj1+cb2.cj2+......)\sigma_j=c_j-(c_{b1}.c_{j1}+c_{b2}.c_{j2}+......)σj​=cj​−(cb1​.cj1​+cb2​.cj2​+......)
    求解后的单纯形表如下:

    5.观察上表2中的σj\sigma_jσj​是否都≤0\leq0≤0,若都≤0\leq0≤0,则此时求出的解即为最优解,否则就不是最优解,继续进行下一步。

    6.找出上表2中σj\sigma_jσj​最大的数字对应的那一列变量为进基变量xax_axa​,如上表2中XaX_aXa​为x2x_2x2​。求出θi=bi/xai\theta_i=b_i/x_{ai}θi​=bi​/xai​。
           其中若θi≥0\theta_i\geq0θi​≥0,则把θi\theta_iθi​调入表中,否则不填入表中。其中若所有的θi<0\theta_i<0θi​<0,即该线性规划为无解解。

    7.找到上表中θi\theta_iθi​最小的值对应的XBX_BXB​的列即为出基变量xbx_bxb​,如上表中的xbx_bxb​为x5x_5x5​,然后找到xax_axa​和xbx_bxb​交叉的数字m。

    8.将xax_axa​上面的数字替换xbx_bxb​前面的数字,在用xax_axa​替换xbx_bxb​,最后清空σj\sigma_jσj​行和θi\theta_iθi​列。

    9.将x1,x2,x3....xnx_1,x_2,x_3....x_nx1​,x2​,x3​....xn​与b列组成的矩阵进行矩阵运算,将m变为1,同列的其他元素变为0,形成一个新的单纯形表,再进行步骤3进行计算。如下表所示:

    以上的求解步骤归纳都来自于b站的【猴博士爱讲课】课程,附上传送门。

三、python实现求解

上述的手写求解步骤其实可以进行程序化,代码附在这里显得很冗长,可以参考github上的代码版本-传送门。
       该代码参考的是细语呢喃的博客-传送门。

参考资料

  1. 许国根,赵后随,黄智勇编著,最优化方法及其MATLAB实现,北京航空航天大学出版社,2018.07,第73页
  2. 文放怀主编,新产品开发管理体系谢宁试验设计指南,海天出版社,2011.06,第130页

单纯形法求解线性规划相关推荐

  1. 计算:单纯形法求解线性规划问题

    用单纯形法求解线性规划问题 对于标准型为最小值的单纯形法 单纯形表格具有的特点 中心部位具有单位子块 右列元素非负 单位子块对应的底行元素为0 底行其他元素非负(标准型为最大值时,要求底行元素非正数) ...

  2. 单纯形法 -- 求解线性规划

    目前,运用最广的线性规划方法就是著名的单纯形方法.这种方法是G.B.Dantzig在1947年提出的.几十年的实践证明,单纯形方法的确是一种使用方便.行之有效的重要算法.如今,它已经成为线性规划的中心 ...

  3. matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法

    这是本公众号的第①篇文章 主要讲述运筹学中求解线性规划问题的单纯形方法:单纯形法是运筹学中求解线性规划问题的主要方法,其他一些求解大规模优化问题的算法,如列生成算法等,都是在该算法的基础上发展而来的. ...

  4. 单纯形法解下列线性规划问题_用单纯形法求解下列线性规划问题 线性规划单纯形法教学策略探求...

    摘    要:运筹学中的线性规划使用日广.文章从高职院校线性规划教材与教育现状动身,提出了改善线性规划单纯形法教育的新策略. 要害词:高职院校;线性规划;单纯形法 中图分类号:G642.0       ...

  5. 【运筹与优化】单纯形法解线性规划问题(matlab实现)

    文章目录 单纯形法步骤: 1.将线性规划问题化为标准形式 2.列出单纯形表 3.进行最优性检验 4.从一个基可行解转换到另一个目标值更大的基可行解,列出新的单纯形表 5.重复3.4直到计算结束为止 举 ...

  6. 用Python求解线性规划问题

    线性规划简介及数学模型表示线性规划简介一个典型的线性规划问题线性规划模型的三要素线性规划模型的数学表示图解法和单纯形法图解法单纯形法使用python求解简单线性规划模型编程思路求解案例例1:使用sci ...

  7. 线性规划与单纯形法(线性规划、单纯形法、单纯形表、人工变量法)

    线性规划与单纯形法 文章目录 线性规划与单纯形法 概念.建模.标准型 标准型.基.基解.基可行解.可行基 单纯形法 单纯形表的应用 关于检验数和退化的讨论 人工变量法之"大M法" ...

  8. 【运筹学】对偶理论 : 互补松弛定理应用 ( 原问题与对偶问题标准形式 | 已知原问题最优解求对偶问题最优解 | 使用单纯形法求解 | 使用互补松弛定理公式一求解 | 互补松弛定理公式二无效 ) ★★

    文章目录 一.原问题与对偶问题标准形式 二.互补松弛定理 三.已知原问题最优解求对偶问题最优解 四.使用单纯形法求解 五.使用互补松弛定理公式一求解 六.使用互补松弛定理公式二求解 ( 无效方法 ) ...

  9. 【运筹学】线性规划 人工变量法 阶段总结 ( 使用 人工变量法 求解 线性规划 全过程详细解析 ) ★

    文章目录 一.人工变量法案例 二.线性规划标准型 三.添加人工变量 四.初始单纯形表 五.初始单纯形表 : 计算非基变量检验数 六.初始单纯形表 : 最优解判定 七.初始单纯形表 : 选择入基变量 八 ...

最新文章

  1. 是否能领先e步 浅析SSD中的eTLC和eMLC颗粒
  2. python开源报表系统_流程设计器、表单设计器和简单报表管理开源OA系统smart-web...
  3. golang 判断 两个slice 是否相等
  4. 理解 RXSwift:单元测试(四)
  5. 全球及中国认知文档处理行业运营策略与应用前景分析报告2022版
  6. dropbox_如何在Java中将图像上传到DropBox
  7. java环境变量的配置_Java的下载及环境变量的配置
  8. uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...
  9. 前端基础git(一)-git入门代码版本控制介绍
  10. 【优化预测】基于matlab蝙蝠算法优化LSSVM预测【含Matlab源码 109期】
  11. php访问属性两种方式,使用PHP访问对象的属性
  12. IOS UI TabBar标签栏的使用
  13. HTML教程笔记(菜鸟教程)
  14. 8086中寻址方式详解
  15. vue模板解析——源码演示
  16. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(4):GPGPU
  17. 查询失败,后台服务器运行错误,添加网络打印机错误?怎么处理?Windows 无法连接到打印机。 服务器打印后台处理程序服务没有运行。...
  18. 迷宫问题(OJ平台)附代码解释
  19. DirectX11 板条箱示例Demo
  20. (转)人在德国:芦笋季节话芦笋

热门文章

  1. mysql乱码还原_mysql还原时乱码的解决方法
  2. 软件测试二八原则(软测之魂读后感)
  3. 【数据库】数据库命名规范
  4. Android面试从新手到架构师,一篇解析就够(1),跳槽字节跳动
  5. 《塞尔达传说:荒野之息​》的大世界地图是怎么制作的?
  6. UDP协议的详细解析
  7. 基于JavaSwing写的雷霆战机(飞机大战)
  8. 数据中心逃离北京雾都
  9. atd与crond的区别
  10. 从上瘾模型,分析为什么网易云音乐年度歌单会刷屏朋友圈?