线性规划

线性规划问题的标准形式可以写成:

\[\begin{aligned}
&max~z=\pmb{c}^T\pmb{X} \\
&s.t.\{
\begin{aligned}
&\pmb{A}\pmb{X}=\pmb{b}\\
&\pmb{X}\geqslant0
\end{aligned}
\end{aligned}
\]

,\(\pmb{X}\)是列向量


为什么可以统一为这个标准形式 ?

  1. 所有约束都可以写成等式约束是因为在初始决策变量不足的情况下,我们可以加入非负的松弛变量到不等式中,使其变成等式约束。

  2. 之所以可以将决策变量约束为非负是因为,决策变量的符号有三种可能

  • 首先是非负的,这种情况下我们无需改变
  • 第二种情况是决策变量是非正的,那么我们只需用相反的变量取代即可
  • 第三种情况是决策变量没有符号要求,那么我们就可以定义两个非负变量进行相减来替代这个没有符号要求的决策变量。

线性规划的解有四种可能:

  • 唯一解
  • 无穷多解
  • 无界解(即目标函数可以在约束条件下达到无穷进而使得无解)
  • 无可行解(即不存在满足约束条件的解)

单纯形法

单纯形表

计算步骤(求极大)

(1) 确定一个初始基可行解

(2) 计算非基变量的检验数

判别准则:

  1. 若所有非基变量检验数都小于或等于零, 则原问题得到最优解
  2. 当非基变量的检验数至少有一个为零, 原问题有无穷多组最优解, 但其目标函数值相等
  3. 非基变量的检验数至少有一个大于零, 且某个大于零的检验数所对应的非基变量的系数列向量中没有正数, 则原问题具有无界解

(3) 基变换. 寻找检验数最大的列对应的变量, 将 \(b\) 分别除以这一列上的数得到 \(\theta\) 列, 再选定 \(\theta\) 最小的这一行对应的变量, 用最大的检验数对应的变量替换最小的 \(\theta\) 对应的 \(\boldsymbol{X}_b\) 处的变量

(4) 迭代

初始时, \(\boldsymbol{b}\) 需要大于零

右下角的函数值由 \(\boldsymbol{c}_B^\top\boldsymbol{b}\) 计算得

当算法停止时, \(\boldsymbol{X}_B\) 对应的 \(\boldsymbol{b}\) 取值即为解, 右下角的函数值即为最优函数值

停止算法条件

如果是求极大, 则当非基变量的检验数都小于等于0时停止

如果是求极小, 则当所有非基变量的检验数都大于等于0时停止

大M法

使用条件

当使用单纯形法时发现没有单位子矩阵

操作

通过加入人工变量拼凑单位子矩阵, 再运用单纯形法进行求解

  • 当无解或者有解但最优解中至少还有一个人工变量时, 说明原问题无解.
  • 当有解且最优解中不含有人工变量时, 其最优解就是原线性规划问题的最优解.

优点

可以直接求解问题

缺点

由于电脑无法输入任意大的数继续进行运算, 所以大M法只能手动运算

两阶段法

操作

  • 第一阶段是构造一个目标函数只含有人工变量的辅助问题,再运用单纯形法进行求解.
  • 当无解或者有解但目标函数不为零, 说明原问题无解, 终止
  • 当有解且其目标函数值为零时, 则得到原问题的一个初始基可行解.
  • 第二阶段是对第一阶段得到的单纯形表, 将其表头换位原问题的表头并且重新计算检验数

运筹学之线性规划 1.X的更多相关文章

  1. MIS(管理信息系统)

    MIS 管理信息系统(Management Information System,简称MIS) 是一个以人为主导,利用计算机硬件.软件.网络通信设备以及其他办公设备,进行信息的收集.传输.加工.储存. ...

  2. 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)

    1.线性规划模型: 2.使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://doc ...

  3. lingo运筹学上机实验指导

    <运筹学上机实验指导>分为两个部分,第一部分12学时,是与运筹学理论课上机同步配套的4个实验(线性规划.灵敏度分析.运输问题与指派问题.最短路问题和背包问题)的Excel.LONGO和LI ...

  4. Excel与Google Sheets中实现线性规划求解

    很久没更新过APS系列文章了,这段时间项目工作确实非常紧,所以只能抽点时间学习一下运筹学的入门知识,算是为以后的APS项目积累点基础.看了一些运筹学的书(都是科普级别的)发现原来我目前面对的很多排产. ...

  5. 无缘诺贝尔奖的George Dantzig——线性规划之父

    无缘诺贝尔奖的George Dantzig——线性规划之父 王军强,2012年11月2日 “线性规划之父”的George Dantzig,与“计算机之父”.“博弈论之父”John Von Neuman ...

  6. 【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现

    目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(Ortool库) assert MIP的Python实现(docplex库) 相关知识点 LP线性规划问题 Linea ...

  7. 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

    函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...

  8. java 线性规划 和lingo 比较

    model:max=13*A+ 23*B; 5*A + 15*B <480 ; 4*A + 4 *B <160 ; 35* A + 20 *B <1190 ; end Variabl ...

  9. 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质

    Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...

  10. 用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能

    在管理信息系统的开发过程中,往往会涉及到一些线性规划数学模型,例如资源配置优化.微软的Microsoft.Solver.Foundation是一个数学库,可以很好的对线性规划问题进行求解.关于它的细节 ...

随机推荐

  1. Agilepoint中的JS Method 封装

    /**================================================================================================= ...

  2. mysql8改密码

    登录后执行语句 ALTER USER 'test'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '新密码'; 修改Host范围 updat ...

  3. js判断图片链接是否有效

    let checkImgExists = function(url) { return new Promise(function(resolve, reject) { let ImgObj = new ...

  4. PostgreSQL权限管理

    一旦一个对象被创建,它会被分配一个所有者.所有者通常是执行创建语句的角色.对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情.为了允许其他角色使用它,必须分配权限. 1 ...

  5. dcat-admin在弹框中使用grid的编辑框不提示也不报错

    显示效果 #版本:2.1.5-beta #点击编辑时没有反应,其实它已经把编辑框显示出来了,只是在当前这个弹框的后面,我们看不见,这样你可以在自己的项目中把弹框挪开或在F12中html搜索应该显示的代 ...

  6. memoの关于Qt的一些用法记录

    Qt自动调整窗口尺寸 之前写过,方法就是: QTimer::singleShot(0, this, [this]{ this->adjustSize(); }); 重复记录一下. 如何把一个Mo ...

  7. CSDN上书签迁移

    title: CSDN上书签迁移 date: 2020-11-01 16:34:30 img: /photos/2020.6.03_15/2020_06_11_cover.jpg summary: C ...

  8. 记录multipartFile表单类型转化为file

    导入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...

  9. 剑指 Offer II 二分查找

    068. 查找插入位置 class Solution { public: int searchInsert(vector<int>& nums, int target) { int ...

  10. springboot gradle 加速问题

    初始化项目使用阿里云 seriver url : https://start.spring.io 直接修改为: https://start.aliyun.com 关键的gradle 修改安装包地址 g ...