一、解决问题

线性规划问题是在一组线性约束下,求线性目标函数的最大最小值的问题。

二、数学模型

1、一般数学模型

2、矩阵表示

其中c,x都是列向量,A,Aeq是一个合适的矩阵,b,beq是合适的列向量。然后lb和ub是下限和上限(但是请注意lb是一个变量的名字)。

注意:这里针对变量类型约束增加上下限的约束,其目的在于减少主要约束Ax=b中的行数,从而简化计算。本质上,跟标准的非负类型约束一致。

实际碰到各种线性规划问题的数学模型都应变换为标准型式后求解。

以下讨论如何变换为标准型的问题。

(1 ) 若要求目标函数实现最小化, 即 min z = CX。这时只需将目标函数最小化变换求目标函数最大化 , 即令z′= -z , 于是得到max z′= -CX。 这就同标准型的目标函数的形式一致了。

(2) 约束方程为不等式。这里有两种情况: 一种是约束方程为“≤”不等式, 则可在 “≤”不等式的左端加入非负松弛变量, 把原“≤”不等式变为等式; 另一种是约束方程为 “ ≥ ”不等式 , 则可在“ ≥ ”不等式的左端减去一个非负剩余变量 (也可称松弛变量), 把不等式约束条件变为等式约束条件。

(3) 若存在取值无约束的变量xk ,可令xk = x′k - x′′k ,其中 x′k , x′′k ≥0。

线性规划问题的解的概念

在讨论线性规划问题的求解前, 先要了解线性规划问题的解的概念。我们针对线性规划的一般数学模型来说明:

1. 可行解

满足约束条件的解X=(x1 ,x2 ,⋯,xn)T ,称为线性规划问题的可行解 , 其中使目标函数达到最大值的可行解称为最优解。

2. 基

设 A是约束方程组的 m×n维系数矩阵,其秩为 m。B是矩阵 A中 m×m阶非奇异子矩阵( | B| ≠0) ,则称B是线性规划问题的一个基。这就是说, 矩阵B是由 m个线性独立的列向量组成。为不失一般性 , 可设:

称 Pj (j=1,2,⋯,m)为基向量,与基向量 Pj 相应的变量 xj (j=1,2,⋯,m)为基变量,否则称为非基变量 , 为了进一步讨论线性规划问题的 解, 下面研究约束方程组(1-5 ) 的 求 解 问题。假设该方程组系数矩阵 A 的秩为 m , 因 m < n, 故它有无穷多个解。假设前 m 个变 量的系数列向量是线性独立的。这时(1 -5)式可写成:

设 XB 是对应于这个基的基变量:XB =(x1,x2,⋯,xm)T ,

现若令上式的非基变量 xm + 1 = xm + 2 = ⋯ = xn = 0, 这时变量的个数等于线性方程的个数。用高斯消去法 , 求出一个解:

X=(x1 ,x2 ,⋯,xm ,0,⋯,0)T

该解的非零分量的数目不大于方程个数 m, 称 X 为基解。由此可见 , 有一个基 , 就可以求出一个基解。

3. 基可行解
同时满足非负条件的可行解和基解的解,称为基可行解。

4. 可行基

对应于基可行解的基 , 称为可行基。约束方程组(1-5)具有基解的数目最多是 Cnm (组合)个。一般基可行解的数目要小于基解的数目。以上提到 的几种解的概念, 它们之间的关系可用下图表明。另外还要说明一点 , 基解中的非零分量的个数小于m 个时, 该基解是退化解。在以下讨论 时 , 假设不出现退化的 情况。以上给出了线性规划问题的解的概念和定义 , 它们将有助于用来分析线性规划问题的求解过程。

三、相关方程解法

1、图解法,画出可行域,这个可以进行编程进行实现、

2、直接使用MATLAB的相关方法进行解题、

[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,Xo,OPTIONS)

其中fval返回的是目标函数的值,然后x则是返回取到fval时x的对应的值,然后LB和UB是对应x的上界和下界(可以省略),x0是x的初始值(暂时可以忽略)

OPTIONS是控制参数。

其他还有专门的线性规划求解算法,后面单独介绍。

四、一些其他问题转换成线性规划

1、绝对值之和最小

在这里我们就可以令,就可以满足,这样子这个问题就变成了

2、两个数的差的绝对值,在xi固定时,取得max,之后在去定yi

我们取,就可以转换问题了

五、一些线性规划可以解决的实际问题

1、生产力有限,要求取得最大收益,更一般性的说法,是资源分配模型,用来解决在资源有限的情况下,如何将资源分配给彼此竞争的需求,从而实现资源的优化配置。

2、运输问题(产销问题)

要求运输费用最小

在这里需要记得有一个很重要的等式,就是所有产地送出去的等于所有销售地收到的

3、指派问题

要求花费的工作时间要最短

(2)求解指派问题的匈牙利算法、

首先我们要知道对与系数矩阵C由这样的性质,同时对每一行(列)加上或者减去同样的一个数,得到的新矩阵和原矩阵的指派问题具有相同的最优指派。

一般步骤是:

a、每行每列消除最小的数字,使得出现能够出现N(与矩阵大小相同)个位于不同行不同列的零元素,选定就是最优解。

b、如果上一步骤没办法直接完成,则、

4、对偶理论(与反函数相比较)

最重要的是掌握其性质,可以用来检验是不是最优解、、

5、投资的收益和风险(主要多目标函数如何并成一个目标函数)

下一步主要是设立变量(这是数学建模中一步很关键的地方,你指标选的好,方程就好列好解,否则。。。。)

之后就是加入限定,一些理想化的假设

然后写出方程

其中第一个目标函数为收益,第二个为风险。

下一步就是化简目标函数

(1)固定风险水平,优化收益

(2)固定盈利水平,极小化风险

(3)同时考虑两个,这样的话需要加入一个权重s。

6.混料模型

资源分配模型是将各种资源分配给不同的需求,混料模型是把零散的资源整合起来,简而言之,混料模型解决的是决策各种成分的组合以最好的满足生产的需要。

7.运营规划模型

用以决策生产工作的安排以有效的使用可用资源。

8.排班和人员规划模型

在工作量给定的前提下,我们需要规划完成这些工作的资源投入,特别的,我们必须决定不同类型的员工人数和排班数量,以保证完成所有的工作量。

9.多阶段模型

用来建模动态的,随时间变化的,或者多个时间段执行的。

运筹优化(二)--线性规划概念及应用模型相关推荐

  1. 优化 | 线性规划的历史、模型及案例

    作者:李崇楠,北京交通大学研究生在读,交通运输规划与管理专业,研究方向:运输组织优化 本文为<线性规划入门电子书>第一章内容.<线性规划入门电子书>是「运筹OR帷幄」优化理论科 ...

  2. 运筹优化(十五)--应用模型之分配问题

    一般分配模型 一.问题描述 问题描述:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小. 问题数学描述: ...

  3. 运筹优化(一)--运筹学概述

            运筹学:主要运用数学方法研究各种系统的优化途径及方案,为决策者提供科学决策的依据.最优化方法的主要研究对象是各种有组织系统的管理问题及其生产经营活动.最优化方法的目的在于针对所研究的系 ...

  4. c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)

    编者按 优化求解器对于做运筹学应用的学生来说,意义重大. 然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程. 作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷, ...

  5. 【运筹优化】求解二维矩形装箱问题的算法合辑 + Java代码实现

    文章目录 一.算法合辑 1.1 结合自定义策略 1.1.1 结合自定义策略的禁忌搜索算法(98.80%) 1.2.1 结合自定义策略的蚁群算法(96.70%) 1.2 堆优化的天际线启发式算法(98. ...

  6. 【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现

    文章目录 一.天际线启发式 二.蚁群算法结合天际线启发式 2.1 构建序列 2.1.1 思路一 2.1.2 思路二 2.1.3 思路N 三.Java代码实现 3.1 项目结构 3.2 Ant 3.3 ...

  7. 运筹优化(九)--整数规划模型

    一类规划问题中如果要求部分或全部决策变量是正整数,则称之为整数规划(Integer Programming,简称IP).例如,所要求解的是机器设备的台数.完成工作的人数或装货的汽车数等.整数规划中要求 ...

  8. 运筹优化学习15:求解线性规划的单纯形法【手把手计算,够你应付考试了,看不懂算我输】

    目录 1 理论部分 1.1 单纯形表的要素含义解释 1.2 计算步骤 2 计算示例 2.1 初始单纯形表 2.2 第二次变换 2.3 第三次变换 2.4 第四次变换 3 参考文档 本博主研究了一天没有 ...

  9. 【运筹优化】蚁群算法求解二维矩形装箱问题(java代码实现)

    文章目录 1 前言 2 代码迁移 3 蚁群算法 3.1 蚂蚁类 Ant 3.2 蚁群算法类 ACO_Packing 4 运行结果 5 后话 [运筹优化]求解二维矩形装箱问题的算法合辑(Java代码实现 ...

最新文章

  1. 转:保留小数点后四位,不足自动补0
  2. 安卓学习之--如何关闭所有的activity
  3. php form action跳转,form表单页面跳转方式提交练习
  4. 构建应用状态时,你应该避免不必要的复杂性
  5. 深入理解JAVA虚拟机大全
  6. woocommerce修改商品详情页
  7. KeyError: 0 与 KeyError: 1(附例子)
  8. Win7 配置 Git 客户端 图文详解
  9. 敏捷软件开发第26章STAIRWAY TO HEAVEN设计模式C++源码
  10. oracle的rollup操作---按照小组进行分组,同时求总计
  11. day31-20180720-流利阅读笔记
  12. python乘法符号手写_利用Python自动生成小学生加减乘除口算考试题卷,不再为手写算术题烦恼!...
  13. 关于嵌入式驱动开发,这篇文章让你了解透彻!
  14. [题解][Codeforces 1139A~1139F]Codeforces Round #548 (Div. 2) 简要题解
  15. pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)
  16. 对于刚从事Java的小伙伴们的一些话
  17. memcache 学习
  18. 证券公司信息化——5
  19. Cisco Packet Tracer的基本应用
  20. python之DataFrame篇

热门文章

  1. 面试专题——Redis
  2. GB2312(部分GBK)汉字编码表
  3. 章节九:cookies
  4. Unity3D使用经验总结 优点篇
  5. pyecharts geo绘制地理信息地图
  6. Oulipo (KMP算法)
  7. 【鸿蒙】HarmonyOS认证学习资料整理
  8. 带你入门多目标跟踪(一)领域概述
  9. [教程] 教你简单解决邮件乱码(Mac/iPhone/iPad通用)
  10. 结合xxx.cpp:(.text+0x55):对‘xxx’未定义的引用剖析Linux环境下动态库.so文件