运输问题的+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模型的更多相关文章

  1. 使用 线性规划 解决 数字 排序问题, +Leapms模型

    问题 将如下一组数字从大到小排序. {10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44} 解决办法 建立数学模型,给出各个数字的次序值. ...

  2. 拓扑排序的 +Leapms 线性规划模型

    知识点 拓扑排序 拓扑排序的+Leapms模型 无圈有向图 一个图G(V,E), 如果边有向且不存在回路,则为无圈有向图.在无圈有向图上可以定义拓扑排序.下图是一个无圈有向图的例子. 拓扑排序 给定一 ...

  3. 旅行商问题(Traveling Salesman Problem,TSP)的+Leapms线性规划模型及c++调用

    知识点 旅行商问题的线性规划模型旅行商问题的+Leapms模型及CPLEX求解C++调用+Leapms 旅行商问题 旅行商问题是一个重要的NP-难问题.一个旅行商人目前在城市1,他必须对其余n-1个城 ...

  4. Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题

    Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题 <整数规划>[1]一书作者L. A. Wolsey对批量问题(Lot-sizing Problem)做了 ...

  5. 10分钟明白对偶建模法 / +Leampms的“主模型建模”和“对偶模型建模” 之 —— 三类最短路径问题

    摘要 对偶模型建模是非常有独特的一种建模方式 —— 当问题本身要求指标极小的情况下,对偶模型表现为求极大.本文给出三种最短路径问题的线性规划/混合整数规划模型,其中的第三类最短路径问题采用对偶建模方法 ...

  6. 生产线平衡问题的+Leapms线性规划方法

    知识点 第一类生产线平衡问题,第二类生产线平衡问题 整数线性规划模型,+Leapms模型,直接求解,CPLEX求解 装配生产线平衡问题 (The Assembly Line Balancing Pro ...

  7. 旅游公司租车问题 —— 动态规划 v.s. + Leapms线性规划

    有一个旅游公司承包一条旅游线路,未来四周内的大巴车需求分别是:4辆.1辆.4辆和5辆.该公司向租车公司租赁服务,租车公司的计价方案是:租车收取一次性手续费3000,每车每周费用2000.求最节省租车方 ...

  8. Pi Hybrids问题

    Pi Hybrids问题 清华大学肖秀波梁湧老师翻译的Rardin教授的<运筹学>[1]已于今年年中出版,感谢机械工业出版社张有利老师的推荐和赠书,让我能看到如此完美的千页级宏篇译著.该书 ...

  9. 制造业物料清单BOM、智能文档阅读、科学文献影响因子、"Celebrated Italian mathematician ZepartzatT Gozinto" 与 高津托图

    意大利数学家Z.高津托 意大利伟大数学家Sire Zepartzatt Gozinto的生卒年代是一个谜[1],但是他发明的 “高筋图” 在 制造资源管理.物料清单(BOM)管理.智能阅读.科学文献影 ...

随机推荐

  1. BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP

    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...

  2. Opencv(C++)实现邻近插值算法

    #include <opencv2/opencv.hpp> using namespace std; using namespace cv; void Zero_order(const M ...

  3. Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to 2.3.

    报错信息:Description Resource Path Location Type Cannot change version of project facet Dynamic Web Modu ...

  4. 微服务架构 - 基于Harbor构建本地镜像仓库

    之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...

  5. Nginx+Keepalived 集群方案

    1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...

  6. 100 天从 Python 新手到大师

    Python应用领域和就业形势分析 简单的说,Python是一个“优雅”.“明确”.“简单”的编程语言. 学习曲线低,非专业人士也能上手 开源系统,拥有强大的生态圈 解释型语言,完美的平台可移植性 支 ...

  7. 【JVM虚拟机】(6)---深入理解Class中访问标志、类索引、父类索引、接口索引

    JVM(6)访问标志,类索引 上一篇博客讲[JVM虚拟机](5)---深入理解JVM-Class中常量池 我们知道一个class文件正常可以分为7个部分: 魔数与class文件版本 常量池 访问标志 ...

  8. FreeSql v0.5.x 功能介绍

    弱类型 之前在操作实体时,必须传统泛型参数,现在可以实现弱类型实体的操作.以 Repository 为例: var repos = fsql.GetGuidRepository<object&g ...

  9. 在nuget上发布自己的程序集教程

     前期准备 [1]注册nuget官网账号:注册地址:https://www.nuget.org/ [2]下载Nuget.exe文件:下载地址:https://www.nuget.org/downloa ...

  10. rsync命令详解、rsync用ssh隧道方式同步

    ● rsync格式安装命令 yum install -y rsync与scp的区别:scp复制为完全覆盖,rsync为增量同步,只同步修改过的数据.rsync命令格式如下: rsync 选项 源文件 ...