运输问题的+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)管理.智能阅读.科学文献影 ...
随机推荐
- nsq理解
核心概念 在讨论NSQ如何在实践中使用前,先理解NSQ队列的架构原理是非常值得的.它的设计很简单,可以通过几个核心概念来理解. Topic --一个topic就是程序发布消息的一个逻辑键,当程序第一次 ...
- 在使用MFC对话框时遇到的用户交互
有时我们需要点击对话框上的一个按钮的时候,对话框隐藏起来,然后执行完某个操作后,对话框又弹出来, 这时我们可以使用BeginEditorCommand()和CompleteEditorCommand( ...
- 【bzoj1941】【Sdoi2010】Hide and Seek
---恢复内容开始--- Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡 ...
- BZOJ_1486_[HNOI2009]最小圈_01分数规划
BZOJ_1486_[HNOI2009]最小圈_01分数规划 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 ...
- Python-爬取校花网视频(单线程和多线程版本)
一.参考文章 python爬虫爬取校花网视频,单线程爬取 爬虫----爬取校花网视频,包含多线程版本 上述两篇文章都是对校花网视频的爬取,由于时间相隔很久了,校花网上的一些视频已经不存在了,因此上述文 ...
- 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)
注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...
- TensorFlow从1到2(一)续讲从锅炉工到AI专家
引言 原来引用过一个段子,这里还要再引用一次.是关于苹果的.大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很多时髦的程序员入坑学习.不料,经过一段头脑体操一般的勤学苦练,发现使用S ...
- java游戏开发杂谈 - 画布和画笔
在Eclipse里,编写如下两个类: package game2; import java.awt.Color; import java.awt.Graphics; import javax.swin ...
- 重学前端 --- Promise里的代码为什么比setTimeout先执行?
首先通过一段代码进入讨论的主题 var r = new Promise(function(resolve, reject){ console.log("a"); resolve() ...
- matplotlib读取csv文件
一,从本地加载csv文件 from matplotlib import pyplot as pltimport numpy as npimport csv#用来正常显示中文标签plt.rcParams ...