线性规划

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

\[\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. 复习第二点-2.基于注解的helloworld

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...

  2. appium:appium上手

    记录一下appium上手,如果用过selenium,appium就可以在一天上手. 准备: 1.去网上下载一个安卓sdk 2.通过android sdk中aapt dump badging xx.ap ...

  3. SpringBoot 启动报循环依赖问题

    问题现象 Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating b ...

  4. 【Java】取n工作日后的日期(仅排除周六周日)

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java. ...

  5. Spring基本概述

    Spring是一个开源框架,官方网站是http://spring.io/,Spring是2003年兴起的一个轻量级的Java开发框架,由lnterface21公司的JavaEE专家RodJohnson ...

  6. python菜鸟学习: 15 GUI界面化记事本

    # -*- coding: utf-8 -*-import tkinter as tkdef getNewCreate(): passdef getCharcount1(sss): # 添加字数统 s ...

  7. [Swift]Xcode格式化代码快捷键

    写代码最常用的快捷键莫过于格式化代码了,最近玩Swift,百度上没有找到简单明了的内容,特意记录一下. Control + I     自动调整缩进 可以选中相应的代码 或 Command + A全选 ...

  8. VUE使用axios数据请求时报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

    正常定义全局变量: data:function (){ return{ currentOrders:[] } }, 使用Axios发送请求并获取后端数据时,如果在then中使用this.current ...

  9. 原生django怎么给响应头添加信息

    原生django怎么给响应头添加信息 直接在HttpResponse响应对象中添加键值对就行 视图层 ---------------------- def test_func(request): # ...

  10. ES关闭打开索引

    转载: https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651862931&idx=1&sn=5834af8065 ...