AMPL实现中国邮递员问题,你get到了吗
本文所有代码全部使用AMPL语言实现
中国邮递员问题和旅行商问题不太相同,旅行商问题是不能回头的,而邮递员问题要求是访问所有街道,也就是说每个街道必须访问到。
1、哥尼斯堡七桥问题
要解出中国邮递员问题,首先我们一起来了解哥尼斯堡七桥问题,这样助于后面的学习。这个故事是发生在哥尼斯堡的一个公园里,有七座桥将普雷格尔河中两个岛及岛与河岸连接起来。问是否可能从这四块陆地中任一块出发,恰好通过每座桥一次,再回到起点?
将将哥尼斯堡七桥问题中的每一块地看作一个点,而每一座桥看作一条线,则可得到下图,不难看出,下面图的每一点所连接的线数目皆为奇数,则引入欧拉概念。
在1736年29岁的欧拉向圣彼得堡科学院递交了《哥尼斯堡的七座桥》的论文,在解答问题的同时,开创了数学的一个新的分支——图论与几何拓扑,也由此展开了数学史上的新历程。
由于欧拉对于哥尼斯堡的七桥问题的解决,图论中把可完成“一笔画”的图称作欧拉图(Euler Graph),由此又有了欧拉回路(Euler Circuit)与欧拉路径(Euler Path)的概念。
概念:欧拉路径是指通过图中所有边的简单路,而欧拉回路指闭合的欧拉路径。拥有欧拉回路的图即可称为欧拉图。
2、中国邮递员问题
(1)介绍
邮递员问题,若把它抽象为图的语言,就给定一个连通图,在每边ei
上赋予一个非负的权W(ei)
,要求一个圈,每边至少一次,并使圈的总权最小。该问题是中国数学家管梅谷在1962年首先提出了这个问题,在国际上通称为中国邮递员问题。广泛比如:扫雪车、处理垃圾车、散水车、送信员等。
(2)欧拉回路
- 给定一个连通多重图G,若存在一条链,过每边一次,且仅一次,则称为这条链为欧拉链。
- 若存在一个简单图,过每边一次,且仅一次,称为这个圈为欧拉圈。
- 一个图若有欧拉圈,则称为欧拉图。
(3)邮递员案例
通过上面,我们知道图若能一笔画出,这个必是欧拉图,它是没有奇点的。现在我们讨论中国邮递员对于有奇数又如何求解。
在任何一个图中,奇点个数必为偶数,才能构成欧拉回路。如果图中有奇点,我们将它们变为偶数点,所有将它们配成对,也就是给奇点添加一条重复边,这样就无奇点了,也就构成欧拉图一个可行方案。
(4)中国邮递员问题例子
现在一个邮递员从邮局出发,要走完他所管辖范围内的每一条街道至少一次再返回邮局,如何选择一条尽可能短的路线,现假设该城市的区域,道路网络如下图所示,线代表道路,点代表十字路口。各条路的成本为(i, j, d),距离在图中已经标出(单位KM),现在请问:送货员从“1”点出发,如何选择最短路线,每条街道至少经过一次,送完邮件后返回“1” 点。(本例题来自运筹学第4版课后习题,328页11.16题)
(5)数学模型
min∑(i,j)∈EDi,jXi,jmin\sum_{(i,j)\in E}D_{i,j}X_{i,j} min(i,j)∈E∑Di,jXi,j
s.t.
∑jXj,i−∑iXi,j=0,(i=1,2,...,n)\sum_jX_{j,i}-\sum_i X_{i,j}=0 ,(i=1,2,...,n) j∑Xj,i−i∑Xi,j=0,(i=1,2,...,n)
Xi,j+Xj,i≥1,∀(i,j)∈EX_{i,j}+X_{j,i}\geq1,∀(i,j)\in E Xi,j+Xj,i≥1,∀(i,j)∈E
Xi,j=0或1,∀(i,j)∈EX_{i,j}=0或1,∀(i,j)\in E Xi,j=0或1,∀(i,j)∈E
解释上述数学公式:
- i,j = (1,2,…,n)代表顶点集合,也就是所有相邻街道交叉的点
- d代表i,j两点之间的距离或单位行驶成本
- Min代表单位时间内产生成本或距离的最小值
- Xi,j代表连接i,j两点组成的线段(即街道)送信员是否行驶通过(0是代表不通过道路,1 是代表通过道路)
(6)代码实现
- 模型文件
#1 集合
set node;#定义node集合,表示存放每个结点的意思
set road within node cross node;#代表所有线的一个子集
#2 参数
param d{road};##每一条道路的距离
#3 变量(注意这个是未知的所以正好设置为变量)
var X{(i,j)in road}binary;#0,1变量(0是代表不通过道路,1是代表通过道路)
#4 目标函数
#d[i,j]*X[i,j];【表示i与j间距离】乘【i与j间是否可行1表示可行0表示不可行】还不懂意思就慢慢想
minimize CPP:sum{(i,j)in road}d[i,j]*X[i,j];
#5 约束条件(根据上述数学模型,很简单这里就不解释了)
subject to limit1{(i,j) in road}:
X[i,j]+X[j,i]>=1;
subject to limit2{k in node}:
sum{(i,k) in road}X[i,k] = sum{(k,j)in road}X[k,j];
- 数据模型
set node:=1 2 3 4 5 6 7 8 9 10 11 12;#根据上图有12个点
set road:=
(1,3) (3,1) (1,2) (2,1) (2,5) (5,2) (2,6) (6,2)
(3,6) (6,3) (3,7) (7,3) (4,6) (6,4) (4,5) (5,4)
(4,11) (11,4) (7,10) (10,7) (7,9) (9,7) (8,12) (12,8)
(8,11) (11,8) (9,12) (12,9) (10,12) (12,10) (9,11) (11,9);
#表示区域内各街道构成的行驶距离
param:d:=
1 3 5
3 1 5
1 2 6
2 1 6
2 5 1
5 2 1
2 6 4
6 2 4
3 7 2
7 3 2
3 6 1
6 3 1
4 6 1
6 4 1
4 5 3
5 4 3
4 11 2
11 4 2
7 10 3
10 7 3
7 9 2
9 7 2
8 11 3
11 8 3
8 12 7
12 8 7
9 12 4
12 9 4
9 11 6
11 9 6
10 12 2
12 10 2;
- 运行结果
reset;
model cpp1.mod;
data cpp1.dat;
option solver cplex;
solve;
display X;
详细如下图所示:
创作不易,熬夜不易,你的【一键三连】是我最大鼓励与支持。
如有问题可以去WX问
AMPL实现中国邮递员问题,你get到了吗相关推荐
- matlab中邮递员问题实例,中国邮递员问题matlab
中国邮递员问题的EXCEL求... 1页 免费 对中国邮递员问题的数理... 4页 1下载券 中国邮递员问题matlab 6页 1下载券 喜欢... 中国邮递员问题摘要:欧拉图起源于哥尼斯堡七桥问题, ...
- 【图论】中国邮递员问题、平面图上最大割问题的多项式时间算法
文章目录 一.中国邮递员问题 1. 与欧拉回路的关系 2. Edmonds-Johnson算法 3. 一个例子 二.平面图上的最大割问题 1. 割 2. 最大割及其 N P \bold{NP} NP完 ...
- 数学建模语言AMPL及其应用
贴上两个AMPL的文件,大家看看 AMPL软件及其应用 AMPL使用入门(课件)
- AMPL IDE语法整理
文章目录 1.参数\集合和变量定义 2.目标和约束的书写 3.求解命令 4.AMPL调用不同求解器的Options目录 未完待续~ \qquad 最近再搞一些模型,需要用到AMPL中不同的求解器进行验 ...
- 关于中国邮递员问题和欧拉图应用
关于中国邮递员问题和欧拉图应用 中国邮递员问题: 1962年有管梅谷先生提出中国邮递员问题(简称CPP).一个邮递员从邮局出发,要走完他所管辖的每一条街道,可重复走一条街道,然后返回邮局.任何选择一条 ...
- 图论--中国邮递员问题
中国邮递员问题就比较悲催了.前后花了我大概有三天的时间..今天才做完的.. 首先描述一下问题: 邮递员从邮局出发送信,要求对辖区内每条街都至少通过一次,再回邮局.在此条件下,怎样选择一条最短路线? 如 ...
- 基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理。(第一步-简单HEMs的优化模型建立)
基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理.(第一步-简单的优化模型建立) 概述 什么是HEMs,什么是VPP 优化模型 独立HEMs模型 独立HEMs优化模 ...
- matlab调用glpk,基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理。(第一步-简单HEMs的优化模型建立)...
基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理.(第一步-简单的优化模型建立) 概述 当今的电网构成中,低压配电网已经不比以往的被动,随着分布式发电(DERs)慢 ...
- 离散数学实验----中国邮递员问题
实验目的和要求 实验目的: 理解什么是欧拉图,熟悉欧拉路和欧拉回路的概念. 掌握Dijkstra算法,求解最短路径 掌握Fleury算法,求解欧拉回路. 了解Edmonds-Johnson算法解决中国 ...
- 专题·深度优先搜索(DFS)【including 2N皇后,等边三角形,中国邮递员问题
初见安~这篇我们来讲讲深搜(DFS) 前文我们讲过了递归[这里是递推递归],这里我们就要运用到啦~ 所谓深搜,也顾名思义就是在深度上搜索,到了尽头则返回上一层,换一条路继续搜--也就是递归思想. 先看 ...
最新文章
- 工艺路线和工序有差别吗_ERP-工序与工艺路线
- Google跨平台UI框架 Flutter beta 重磅发布,这里有你需要了解的一切
- LeetCode - 15. 3Sum
- B站回港受热捧——破圈下的资本新故事
- [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup
- Ninject之旅之十一:Ninject动态工厂(附程序下载)
- py库: GUI(tkinter)
- Opencv之以图像直方图可视化
- 下面哪一个不是python语言的合法命名_下面哪一个不是Python语言的合法命名
- CorelDRAWX4的VBA插件开发(七)形状的静态编号和一键转位图
- onpropertychange oninput兼容性
- 三阶魔方复原操作方法
- 我怎梦想是计算机科学家,我的梦想是当一名科学家作文
- 电商设计——3、点线面及光影
- 最新Hive/Hadoop高频面试点小集合
- 公主连结显示服务器内部错误,公主连结Re:Dive无法连接服务器是什么原因
- Python pandas库|任凭弱水三千,我只取一瓢饮(4)
- python手机壁纸_用Python生成自己专属的手机春节壁纸
- Hadoop-JAVA编写HDFS客户端进行HDFS操作
- 网络舆情信息查找网站与怎么查的方法详解
热门文章
- 同济大学 线性代数 第六版 pdf_同济大学版工程数学 线性代数 第六版 课本
- Mac实用软件及功能吐血总结
- 吴恩达机器学习视频笔记——简单知识背景
- Windows下安装Tp6.0框架,图文。Thinkphp6.0安装教程
- Debian8安装TeamViewer远程协助软件
- 【软件笔记------Orcad Capture CIS 17.2/pads vx2.7】------ orcadpads PCB设计简要教程
- redhat8安装mysql教程
- java程序设计实用教程第五版叶核亚答案_java程序设计实用教程 (第3版) 叶核亚 习题答案 所有答案1—12章...
- SQL数据库快速入门基础
- 移动端textarea无法滚动