运输问题的+Leapms模型
运输问题的+Leapms模型
运输问题是本科教课书中的一个经典章节。运输问题的线性规划模型非常简单,而且求解难度极小。
问题
一个公司生产并销售一种产品。该公司有m个产地、n个销地。产地 i 的供给量不大于p[i],销地 j 的需求量不小于d[i],从 i 到 j 的运输费用为 c[i][j]。要求规划产地到销地之间的调运量,使得调用总费用最小。
数据
以下是教课书[1,2]中的一个运输问题的数据表:
+Leapms模型语言常识
1、sub-index: 在大多数计算机语言中,如c语言、python语言中,用[ ]表示脚标, [ ] 被读作 sub-index (脚标)。例如x[i][j] 就相当于$x_{ij}$, 被读成 x sub-index i,j 。+Leapms建模语言也不例外。
2、of: 在大多数计算机语言中, () 一般有两个用途—— (1) 表示算式的优先等级、(2)表示函数,例如sin(a);当 ( )表示函数时,读做of, 例如sina(a)读做 sine of a。+Leapms使用这种习惯。
3、花括号{ } : +Leapms中的花括号有两个用法,(1)表示数据区里的数据集合、(2)表示累加或累乘中局部变量的变化范围。 例如 $\sum_{i=1}^m\sum_{i=1}^nx_{ij}c_{ij}$在+Leapm中就被写成 sum{i=1,...,m; j=1,...,n} x[i][j]c[i][j]。
4、注释:+Leapms的注释符号是//,从//开始到行结束都被当作注释忽略
运输问题的建模
设x[i][j]为从产地 i 到销地 j 的调运量,则调运总费用是 sum{i=1,...,m;j=1,...,n} x[i][j]c[i][j],于是模型的目标为
minimize sum{i=1,..,m;j=1,..,n}c[i][j]x[i][j] //(1)
产量约束
sum{j=1,...,n}x[i][j] <= s[i] | i=1,...,m //(2)
销量约束
sum{i=1,...,m}x[i][j] >= d[j] | j=1,...,n //(3)
于是运输问题模型的主要部分即:
minimize sum{i=1,..,m;j=1,..,n}c[i][j]x[i][j] //(1)
subject to
sum{j=1,...,n}x[i][j] <= s[i] | i=1,...,m //(2)
sum{i=1,...,m}x[i][j] >= d[j] | j=1,...,n //(3)
+Leapms要求对所有出现在模型中的符号进行说明:
where
m,n are integers
c[i][j] is a number|i=1,...,m;j=1,...,n
d,s are sets
x[i][j] is a variable of nonnegative number|-->
i=1,...,m;j=1,...,n
为了使得模型能够被解析和求解,必须给出数据:
data
m=3
n=4
c={
8 6 10 9
9 12 13 7
14 9 16 5
}
d={45 20 30 30}
s={35 50 40}
模型的解析和求解
+Leapms模型使用纯文本表达。
在+Leapms环境中用Load命令即可调入模型并对模型进行解析。解析完毕后会报告模型的变量数和约束数。
然后使用solve命令求解。(如果有整形或者0-1变量,则需使用mip命令求解,否则只进行松弛求解)。
cplex命令或gurobi命令可以调用cplex或gurobi软件对模型进行求解。
+Leapms>load
Current directory is "ROOT".
.........
transportation.leap
.........
please input the filename:transportation
================================================================
1: minimize sum{i=1,..,m;j=1,..,n}c[i][j]x[i][j] //(1)
2: subject to
3: sum{j=1,...,n}x[i][j] <= s[i] | i=1,...,m //(2)
4: sum{i=1,...,m}x[i][j] >= d[j] | j=1,...,n //(3)
5: where
6: m,n are integers
7: c[i][j] is a number|i=1,...,m;j=1,...,n
8: d,s are sets
9: x[i][j] is a variable of nonnegative number|-->
10: i=1,...,m;j=1,...,n
11: data
12: m=3
13: n=4
14: c={
15: 8 6 10 9
16: 9 12 13 7
17: 14 9 16 5
18: }
19: d={45 20 30 30}
20: s={35 50 40}
21:
================================================================
>>end of the file.
Parsing model:
1D
2R
3V
4O
5C
6S
7End.
..................................
number of variables=12
number of constraints=7
..................................
+Leapms>solve
The LP is solved to optimal.
找到线性规划最优解.非零变量值和最优目标值如下:
.........
x1_2*=10
x1_3*=25
x2_1*=45
x2_3*=5
x3_2*=10
x3_4*=30
.........
Objective*=1020
.........
+Leapms>
上面的求解结果给出非零最优决策变量和最优目标值。该题最优目标值为1020。
上面的运输模型求解难度很小,商用求解器可以在一个小时甚至更短时间内内求解到百万级变量的问题。
LaTex 模型的自动生成
在+Leapms环境中使用命令“Latex” 会自动生成 LaTex文件(.tex),在安装有LaTex环境的系统中双击此文件能够自动生成数学形式的pdf模型。
\documentclass{article}
\usepackage{amsmath}\begin{document}
\section{LaTex code for Model ``Transportation.leap"} \rule[0pt]{5cm}{0.05em}\\
\begin{align}
\min\quad \sum_{i=1}^{m}\sum_{j=1}^{n}c_{ij}x_{ij}\end{align}
subject to
\begin{align}
&\sum_{j=1}^{n}x_{ij}\leq s_{i},\quad i=1,...,m\\
&\sum_{i=1}^{m}x_{ij}\geq d_{j},\quad j=1,...,n\\&x_{ij}\geq 0 , \quad i=1\ldots m; j=1\ldots n
\end{align}
\\\rule[0pt]{5cm}{0.05em}\\
The above formulations are generated by +Leapms from model file ``Transportation.leap" at 11:34:24 2018-12-27.
\end{document}
由上面自动生成的LaTex代码所进一步生成的pdf数学模型:
参考文献
[1] Wayne L. Winston. Operations Research: Applications and Algorithms. Duxbury press, boston, 1997
[2] Wayne L. Winston. 运筹学(数学规划 第3版 影印版). 北京:清华大学出版社,2004
运输问题的+Leapms模型的更多相关文章
- 使用 线性规划 解决 数字 排序问题, +Leapms模型
问题 将如下一组数字从大到小排序. {10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44} 解决办法 建立数学模型,给出各个数字的次序值. ...
- 拓扑排序的 +Leapms 线性规划模型
知识点 拓扑排序 拓扑排序的+Leapms模型 无圈有向图 一个图G(V,E), 如果边有向且不存在回路,则为无圈有向图.在无圈有向图上可以定义拓扑排序.下图是一个无圈有向图的例子. 拓扑排序 给定一 ...
- 旅行商问题(Traveling Salesman Problem,TSP)的+Leapms线性规划模型及c++调用
知识点 旅行商问题的线性规划模型旅行商问题的+Leapms模型及CPLEX求解C++调用+Leapms 旅行商问题 旅行商问题是一个重要的NP-难问题.一个旅行商人目前在城市1,他必须对其余n-1个城 ...
- Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题
Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题 <整数规划>[1]一书作者L. A. Wolsey对批量问题(Lot-sizing Problem)做了 ...
- 10分钟明白对偶建模法 / +Leampms的“主模型建模”和“对偶模型建模” 之 —— 三类最短路径问题
摘要 对偶模型建模是非常有独特的一种建模方式 —— 当问题本身要求指标极小的情况下,对偶模型表现为求极大.本文给出三种最短路径问题的线性规划/混合整数规划模型,其中的第三类最短路径问题采用对偶建模方法 ...
- 生产线平衡问题的+Leapms线性规划方法
知识点 第一类生产线平衡问题,第二类生产线平衡问题 整数线性规划模型,+Leapms模型,直接求解,CPLEX求解 装配生产线平衡问题 (The Assembly Line Balancing Pro ...
- 旅游公司租车问题 —— 动态规划 v.s. + Leapms线性规划
有一个旅游公司承包一条旅游线路,未来四周内的大巴车需求分别是:4辆.1辆.4辆和5辆.该公司向租车公司租赁服务,租车公司的计价方案是:租车收取一次性手续费3000,每车每周费用2000.求最节省租车方 ...
- Pi Hybrids问题
Pi Hybrids问题 清华大学肖秀波梁湧老师翻译的Rardin教授的<运筹学>[1]已于今年年中出版,感谢机械工业出版社张有利老师的推荐和赠书,让我能看到如此完美的千页级宏篇译著.该书 ...
- 制造业物料清单BOM、智能文档阅读、科学文献影响因子、"Celebrated Italian mathematician ZepartzatT Gozinto" 与 高津托图
意大利数学家Z.高津托 意大利伟大数学家Sire Zepartzatt Gozinto的生卒年代是一个谜[1],但是他发明的 “高筋图” 在 制造资源管理.物料清单(BOM)管理.智能阅读.科学文献影 ...
随机推荐
- Java 线程池(ThreadPoolExecutor)原理分析与使用
在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...
- 【bzoj 1407】【Noi2002】Savage
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...
- bzoj 2005 能量采集 莫比乌斯反演
我们要求的是∑ni=1∑mj=1(2×gcd(i,j)−1) 化简得2×∑ni=1∑mj=1gcd(i,j)−n×m 所以我们现在只需要求出∑ni=1∑mj=1gcd(i,j)即可 ∑ni=1∑mj= ...
- mac升级后idea提示Can't start git
试了官网的解决方案,还是不行,然后到Stack Overflow上面,找到了下面这个方法,完美解决. 在命令行中运行: xcode-select --install 安装软件就可以了.
- BZOJ_3942_[Usaco2015 Feb]Censoring_KMP
BZOJ_3942_[Usaco2015 Feb]Censoring_KMP Description 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一 ...
- 原生js查询、添加、删除类
1.添加类 为标签添加一个class的类 如:<div id="box" class="box">内容</div> document.g ...
- SQLSERVER数据库死锁与优化杂谈
死锁杂谈 当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行:所以,即时去捕捉数据库死锁,是挺不容易的. 如果,数据库死锁比较长时间,那么死锁是可以被捕捉的. 可以用SqlS ...
- 《深入理解Java虚拟机》读书笔记(第三章)
垃圾收集器与内存分配策略(第三章) 前言,众所周知,Java是由c++进化而来,c++在内存需自己申请,自己释放,于是就有了Java的动态内存分配.书的第三章开篇,有这样一句话描述的很妙——Java与 ...
- 理解css之position属性
之前css学的一直不精致而且没有细节,为了成为一个完美的前端工作人员,所以决定重新学习css的属性.当然会借鉴MDZ文档(MDZ文档)或其他博主的经验来总结.在这里会注明借鉴或引用文章的出处.侵权即删 ...
- 2017-10-31 中文代码示例教程之Vuejs入门&后续计划
"中文编程"知乎专栏原链 为了检验中文命名在主流框架中的支持程度, 这里把vuejs官方入门教程第一部分的示例代码中尽量使用了中文命名. 过程中有一些发现, 初步看来Vuejs对中 ...