图论解决复杂路口红绿灯安排,python语言实现

文章目录

  • 问题描述
    • 说明性描述
    • 操作性描述
      • 图着色问题
      • 图着色算法
  • 算法精化和python描述
    • 算法细节处理:
    • python实现
    • 讨论

问题描述

说明性描述

说明性描述说明了需要解决的问题是什么,针对什么样的问题,期望什么样的解
一个交通路口实例的模型
这是一个5条路的交叉口,其中两条是单行线。这个图本身已经是实际问题的抽象,与行驶方向无关的因素如道路方位、宽度、车流量等都已被抽象去除。要求设计红绿灯,按不同方向行驶的车辆不能相互冲突,依次通过;在此基础上,要求红绿灯轮转次数最少
现在基本想法是对行驶方向分组

  • 同属一组的各个方向行驶的车辆,均可以同时行驶,不出现相互交错的行驶路线
  • 所做的分组应该尽可能大

操作性描述

操作性描述说明通过怎样的操作过程可以得到所要的解
采用图来进一步抽象问题,其中顶点集VVV中的顶点元素表示所有可能可行方向,不难列出本例一共13个:AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC, ED。边集EEE中的元素表示两个顶点所代表的可行方向有冲突。
行驶线路冲突图
有了冲突图,寻找安全分组的问题就可以换一种说法:为冲突图中的顶点确定一种分组,保证属于同一组的顶点互不邻接。

要解决的问题进一步抽象为图数据结构上的顶点分组

图着色问题

以非相邻为条件的最佳顶点分组问题,其实对应于有名的图最佳着色问题:把顶点看成区域,把相邻看成两个顶点有边界,把不同分组看做给相邻顶点以不同颜色着色。著名的四色问题表明,对于任一方式分割为区域的平面图,只需要4种颜色着色,就能保证相邻区域都具有不同颜色。

但是,从交叉路口构造出的冲突图可能不是平面图,因此完全可能需要更多的颜色。

图着色算法

现有的最佳着色算法基本相当于枚举所有可能的着色方案,从中选出使用颜色最少的方案。
下面考虑使用贪婪算法,或称贪心法。其基本思想是根据当时掌握的信息,尽可能地向得到解的方向前进,直到不能继续再换一个方向。这样做通常不能得到最优解,但能找到“可接受的”解,即给出一种较好的算法。
算法梗概(伪代码)如下:

输入:图G   #记录图中的顶点连接关系
集合verts保存G中的所有顶点   #建立初始状态
设置集合groups为空集   #记录得到的分组,元素是顶点集合
while 存在未着色的顶点:   #每次迭代用贪心法找一个新分组选一种颜色在未着色顶点中给尽量多的无互连边的点着色(构建一个分组)记录新分组的顶点组# 算法结束时,groups里记录着一种分组方式
# 算法细节还需要进一步考虑

上面算法还有重要的细节要考虑:一种新颜色的着色处理。具体:

  • 图G保存需着色图中顶点的邻接信息;
  • 集合verts是图中所有尚未着色的顶点集合;
  • 用另一个变量new_group记录正在构造的用当前新颜色着色的顶点(一个顶点),在上面算法的每次迭代中重新构造,每次重新分组时将这个集合重新设置为空集。
 # 进一步整理着色问题。
new_group = 空集
for v in verts:if v与new_group中所有的顶点之间都没有边:从verts中去掉v把v加入new_group    # 循环结束时,new_group中是可以用一种颜色着色的顶点集合。
# 用这段代码代替前面程序框架中主循环体里的一部分。

检查上面的算法,可以看到算法涉及一些集合操作图操作

  1. 构造空集
  2. 从集合中删除元素
  3. 向集合中加入元素
  4. 顺序获取集合里的各个元素(使用for循环)
  5. 获取图中所有顶点
  6. 判断两个顶点是否相邻

算法精化和python描述

算法细节处理:

  1. 如何表示颜色? 顺序整数;
  2. 如何记录得到的分组?用集合表示分组,把构造好的分组(集合)加入groups作为元素;
  3. 如何表示图结构?

python的集合操作:
10. 判断集合vs是否空集:not vs
11. 设置一个集合为空:vs = set()
12. 从集合中去掉一个元素:vs.remove(v)
13. 向集合中增加一个元素:vs.add(v)

python的集合数据类型不支持遍历,需要从当时的集合verts生成一个表,然后对表做遍历。
算法中需要的图操作依赖于,如何在python中实现图数据结构,这里假定两个与图有关的操作:

  1. 函数vertices(G)得到G中所有顶点的集合;
  2. 谓词 not_adjacent_with_set(v, group, G)检查顶点v与顶点集group中各顶点在图G中是否有边连接。

有了以上假设,就可以写程序:

python实现

def coloring(G): #做图G的着色color = 0groups = set()verts = vertices(G) #取得G图的所有顶点,依赖于图的表示while verts:new_group = set()for v in list(verts):if not_adjacent_with_set(v, newgroup, G):new_group.add(v)verts.remove(v)group.add((color, new_group))color += 1return groups

这个python函数能对任何一个图算出顶点分组。其中欠缺的细节就是图的表示,以及函数里设计的两个图操作

讨论

对于给定的交叉路口实例,可行的分组可能不唯一。算法给出的解是确定的,依赖于算法中选择顶点的具体策略,以及对图中顶点的遍历顺序,即**list(verts)**给出的顶点序列中的顺序。
回顾前面从问题出发做出一个python程序的工作过程:

  1. 有关工作开始于交叉路口的抽象图示,首先枚举出所有允许通行方向;
  2. 根据通行方向和冲突的定义,画出冲突图;
  3. 通行方向分组问题归结为冲突图中不相邻顶点的划分问题

问题是,这样的结果满足原交叉路口实例的需要吗?

仔细分析,上面算法中采取的定义不统一:

算法给出的结果是各分组互不相交,每个顶点只属于一个分组;而工作实际是只要求同属一组的顶点是互不冲突的,即允许顶点属于不同分组的情况

需要将之前得到的分组尽可能扩充,加入与已有分组不冲突的方向,如何修改前面算法,使之能给出这样分组?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从算法到硬件,一文读懂2019年 AI如何演进

来源:图灵TOPIA翻译:黄姗,杨鹏岳在刚刚过去的2018年,人工智能领域的大事件、新发现和新进展层出不穷。BERT重磅发布,刷新了很多NLP的任务的最好性能;GAN相关研究论文持续增长,生成的照片达到了以…

《阿丽塔》脑机接口正从科幻走向现实

来源:zhongcap摘要:《流浪地球》和《阿丽塔》前后脚上映,难免不让人比较一番。科幻片的魅力,在于它试验和想象未来的可能性。昨天晚上小编去看了卡梅隆的新作《阿丽塔:战斗天使》。《流浪地球》和《阿丽塔》前后脚上映…

全球首个AI女主播上岗了!太惊艳了!

来源:水木然摘要:前不久,全球首个AI女主播诞生的消息走红网络!刚刚,这位AI女主播今天正式上岗了!是不是非常惊艳?如果不是专门解释,她极有可能被为是真人!这位全球首个AI…

有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接...

之前微信公众平台仅针对开通了微信支付的公众号支持插入图文消息链接,现在微信团队对有原创保护能力的公众帐号开放页面模版功能、开放图文消息正文插入历史图文链接。(怎样申请成为有原创保护能力的公众帐号?也许有人会把页面模版和模板消息…

重磅!华为宣布起诉美国政府

来源:网易智能摘要:今天,华为在深圳总部召开发布会,宣布决定起诉美国政府。01指责美国政府窃取华为服务器华为宣布针对美国《2019财年国防授权法》第889条的合宪性向美国联邦法院提起诉讼,请求法院判定这一针对华为的销…

Spire.Pdf 的各种操作总结

Spire.Pdf 的各种操作总结简介 试验新产品总是给我带来许多挑战,当然这也是一个引进创新技术的好方法。在这里我要跟大家分享的是使用Spire.Pdf的过程,它是来自E-iceblue公司的轻便PDF程序库。 设计情节我以前经常没事就搞搞PDF。Spire.Pdf是用C# 写的PD…

从观望到行动:全球工业物联网市场生态全景观察

来源:资本实验室在当前,诸如5G,物联网、边缘计算、人工智能、机器人、区块链、增材制造和虚拟现实/增强现实等技术正在加速融合到工业物联网(Industrial Internet of Things,IIoT)的肥沃土壤中,…

OC语言知识6

本文目录 一、异步POST请求二、NSURLConnection的其他请求方法上一讲介绍了iOS中的异步GET请求,这讲来看看异步POST请求。 回到顶部一、异步POST请求 假如请求路径是http://192.168.1.102:8080/MJServer/login,请求参数有2个: username &…

谁能引领国内人工智能芯片产业突围?

来源:国金证券摘要:我们认为中国在处理器/芯片领域的投资有加速的迹象,AI芯片的创业企业目前已达到40家左右。未来因人工智能边缘运算推理端和云端推理(Inferencing)芯片及设备成本,性能,耗电,效率的考量,以及各种处理器的特性不同…

OC语言知识12

本文目录 一、添加一个简单的图层二、添加一个显示图片的图层三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage?四、UIView和CALayer的选择五、UIView和CALayer的其他关系* 上一讲已经说过,UIView内部默认…

计算机视觉介绍

1.为什么要学习图像处理和计算机视觉 计算机视觉市场需求大,其是人工智能的重要分支。 计算机视觉岗位占所有AI岗位的40%。 但是,中国高校目前尚未设置计算机视觉学科己专业;学习者众多,学习分散,缺少统一教学体系&a…

认识工业互联网

来源:智汇工业摘要:工业互联网是实现智能制造的抓手,推动工业互联网是长期的工作。工业互联网分为广义的工业互联网和狭义的工业互联网。广义的工业互联网就是第四次工业革命的代名词。和德国工业4.0以及中国制造2025类同,都是工业…

模式识别:绪论

模式识别(pattern recognition):输入原始数据并根据其类别采取相应行为的能力。 具体实例:人脸识别、语音识别、文字识别、指纹识别、DNA序列分析。 要区分不同类别的个体,需要利用其一些物理特性上的差异,成为模式分类的特征。…

A16Z内部万字报告:人类与AI结合的最佳形态

来源:36Kr摘要:人工智能技术正在快速发展,将会给我们什么样的变化?人们应该如何与人工智能相处?近日,A16Z博客上放出了一篇内部报告,介绍了人工智能将会给我们的社会带来的变化,以及…

照明与图像

光通量: 人眼所能感受到的辐射功率,等于单位时间内某一波段的辐射能量和该波段的相对视见率的乘积。单位是lm(流明)1流明 0.00146瓦 辐照度 投射到一平表面上的辐射通量密度。指到达一表面上,单位时间,单位面积上的辐射能。以…

BZOJ3434 [Wc2014]时空穿梭

摔电脑摔电脑!JZP业界毒瘤! 400题纪念~哇终于上400了的说!!!好不容易欸! 题解什么的还是Orz iwtwiioi 我求组合数的方法明明是O(n)的,为什么这么慢!!!令人报警…

图像平滑滤波

卷积与滤波概念 离散卷积 丢两个骰子,求点数加起来为 ttt 的概率是多少? 两个骰子加起来为4的概率: f(1)g(3)f(2)g(2)f(3)g(1)f(1)g(3) f(2)g(2) f(3)g(1)f(1)g(3)f(2)g(2)f(3)g(1) 写成卷积标准形式为: (f∗g)(4)∑i13f(i)g(…

从全球制造业的迁移史,看中国制造业未来会怎么走?

来源:挖数(ID:washu66)摘要:中国制造后续如何发展?翻开全球制造业的迁移史,看是否能从中看出一点端倪。1/ 全球制造业的迁移史1/ 第一次大迁移第一次制造业大迁移发生在20世纪初,由美…

应用|5G时代10大应用场景!

来源:数字化企业摘要:5G商用日益临近,大家可曾想过5G技术未来有哪些具体的应用场景呢?作为5G领跑者的华为公司,早在2年前就出了一份白皮书,这份报告探讨了最能体现5G能力的十大应用场景。简要列表如下1.云V…

央行发布论文:区块链能做什么,不能做什么?

来源:悟空智能科央行发布工作论文《区块链能做什么、不能做什么?》,论文称,不要夸大或迷信区块链的功能。区块链应用要立足实际情况。目前区块链投融资领域泡沫明显。论文从经济学角度研究了区块链的功能。首先,在给出…