本文所有代码全部使用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,j​Xi,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到了吗相关推荐

  1. matlab中邮递员问题实例,中国邮递员问题matlab

    中国邮递员问题的EXCEL求... 1页 免费 对中国邮递员问题的数理... 4页 1下载券 中国邮递员问题matlab 6页 1下载券 喜欢... 中国邮递员问题摘要:欧拉图起源于哥尼斯堡七桥问题, ...

  2. 【图论】中国邮递员问题、平面图上最大割问题的多项式时间算法

    文章目录 一.中国邮递员问题 1. 与欧拉回路的关系 2. Edmonds-Johnson算法 3. 一个例子 二.平面图上的最大割问题 1. 割 2. 最大割及其 N P \bold{NP} NP完 ...

  3. 数学建模语言AMPL及其应用

    贴上两个AMPL的文件,大家看看 AMPL软件及其应用 AMPL使用入门(课件)

  4. AMPL IDE语法整理

    文章目录 1.参数\集合和变量定义 2.目标和约束的书写 3.求解命令 4.AMPL调用不同求解器的Options目录 未完待续~ \qquad 最近再搞一些模型,需要用到AMPL中不同的求解器进行验 ...

  5. 关于中国邮递员问题和欧拉图应用

    关于中国邮递员问题和欧拉图应用 中国邮递员问题: 1962年有管梅谷先生提出中国邮递员问题(简称CPP).一个邮递员从邮局出发,要走完他所管辖的每一条街道,可重复走一条街道,然后返回邮局.任何选择一条 ...

  6. 图论--中国邮递员问题

    中国邮递员问题就比较悲催了.前后花了我大概有三天的时间..今天才做完的.. 首先描述一下问题: 邮递员从邮局出发送信,要求对辖区内每条街都至少通过一次,再回邮局.在此条件下,怎样选择一条最短路线? 如 ...

  7. 基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理。(第一步-简单HEMs的优化模型建立)

    基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理.(第一步-简单的优化模型建立) 概述 什么是HEMs,什么是VPP 优化模型 独立HEMs模型 独立HEMs优化模 ...

  8. matlab调用glpk,基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理。(第一步-简单HEMs的优化模型建立)...

    基于AMPL建模MATLAB平台调用Gurobi,对HEMs集成的VPP进行优化处理.(第一步-简单的优化模型建立) 概述 当今的电网构成中,低压配电网已经不比以往的被动,随着分布式发电(DERs)慢 ...

  9. 离散数学实验----中国邮递员问题

    实验目的和要求 实验目的: 理解什么是欧拉图,熟悉欧拉路和欧拉回路的概念. 掌握Dijkstra算法,求解最短路径 掌握Fleury算法,求解欧拉回路. 了解Edmonds-Johnson算法解决中国 ...

  10. 专题·深度优先搜索(DFS)【including 2N皇后,等边三角形,中国邮递员问题

    初见安~这篇我们来讲讲深搜(DFS) 前文我们讲过了递归[这里是递推递归],这里我们就要运用到啦~ 所谓深搜,也顾名思义就是在深度上搜索,到了尽头则返回上一层,换一条路继续搜--也就是递归思想. 先看 ...

最新文章

  1. 工艺路线和工序有差别吗_ERP-工序与工艺路线
  2. Google跨平台UI框架 Flutter beta 重磅发布,这里有你需要了解的一切
  3. LeetCode - 15. 3Sum
  4. B站回港受热捧——破圈下的资本新故事
  5. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup
  6. Ninject之旅之十一:Ninject动态工厂(附程序下载)
  7. py库: GUI(tkinter)
  8. Opencv之以图像直方图可视化
  9. 下面哪一个不是python语言的合法命名_下面哪一个不是Python语言的合法命名
  10. CorelDRAWX4的VBA插件开发(七)形状的静态编号和一键转位图
  11. onpropertychange oninput兼容性
  12. 三阶魔方复原操作方法
  13. 我怎梦想是计算机科学家,我的梦想是当一名科学家作文
  14. 电商设计——3、点线面及光影
  15. 最新Hive/Hadoop高频面试点小集合
  16. 公主连结显示服务器内部错误,公主连结Re:Dive无法连接服务器是什么原因
  17. Python pandas库|任凭弱水三千,我只取一瓢饮(4)
  18. python手机壁纸_用Python生成自己专属的手机春节壁纸
  19. Hadoop-JAVA编写HDFS客户端进行HDFS操作
  20. 网络舆情信息查找网站与怎么查的方法详解

热门文章

  1. 同济大学 线性代数 第六版 pdf_同济大学版工程数学 线性代数 第六版 课本
  2. Mac实用软件及功能吐血总结
  3. 吴恩达机器学习视频笔记——简单知识背景
  4. Windows下安装Tp6.0框架,图文。Thinkphp6.0安装教程
  5. Debian8安装TeamViewer远程协助软件
  6. 【软件笔记------Orcad Capture CIS 17.2/pads vx2.7】------ orcadpads PCB设计简要教程
  7. redhat8安装mysql教程
  8. java程序设计实用教程第五版叶核亚答案_java程序设计实用教程 (第3版) 叶核亚 习题答案 所有答案1—12章...
  9. SQL数据库快速入门基础
  10. 移动端textarea无法滚动