运输问题的+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)管理.智能阅读.科学文献影 ...
随机推荐
- BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay
BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天 ...
- SpringBoot(一)_快速实战搭建项目
现在在学习springboot 相关的知识,感觉真的很好用,用idea 进行开发,根据慕课网和纯洁的微笑的课程.进行总结下. 使用idea创建springboot项目 (1)单击 File | New ...
- java自动化-数据驱动juint演示,上篇
本文旨在帮助读者介绍,一般的全自动化代码接口,并简单介绍如何使用数据驱动来实现简单的自动化 在经过上述几个博客介绍后,相信读者对自动启动执行一个java编译过的class有了一定了解,也完全有能力去执 ...
- TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)
这一篇博客整理用TensorFlow实现神经网络正则化的内容. 深层神经网络往往具有数十万乃至数百万的参数,可以进行非常复杂的特征变换,具有强大的学习能力,因此容易在训练集上过拟合.缓解神经网络的过拟 ...
- [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。
目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...
- 流程控制之if判断
目录 语法(掌握) if if...else if...elif...else 练习(掌握) 练习1:成绩评判 练习2:模拟登录注册 if的嵌套(掌握) 语法(掌握) if判断是干什么的呢?if判断其 ...
- Error RZ3007: Targeted tag name cannot be null or whitespace
Step 1: Disable precompile updating below property in csproj file: <MvcRazorCompileOnPublish>f ...
- WebGL three.js学习笔记 纹理贴图模拟太阳系运转
纹理贴图的应用以及实现一个太阳系的自转公转 点击查看demo演示 demo地址:https://nsytsqdtn.github.io/demo/solar/solar three.js中的纹理 纹理 ...
- 设计模式之桥接模式——Java语言描述
桥接适用于把抽象化和实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦 这种模式设计到一个作为桥接的接口,使得实体类的功能独立 ...
- 开发时候常用的js方法封装
1.判断是否是一个数组 function isArray(arr){ return Object.prototype.toString.call(arr) ==='[object Array]'; } ...