华为2019挑战赛

article/2025/3/3 18:35:01

华为软件精英挑战赛总结(初赛)

赛题:

评分标准:

思路:这是一个典型的动态负载均衡算法的设计,对于每一辆车来说,时间最短意味着路程最优,首先想到迪杰斯特拉来求出每一辆车的最优路径。

 1 def Dijkstra(Map, start_point, end_point):
 2     dict = defaultdict(list)
 3     for StartPoint,EndPoint,RoadLength in Map:
 4         dict[StartPoint].append((RoadLength,EndPoint))
 5     q, seen, mins = [(0, start_point, ())], set(), {start_point: 0}
 6     while q:
 7         (cost,v1,path) = heappop(q)
 8         if v1 not in seen:
 9             seen.add(v1)
10             path = (v1, path)
11             if v1 == end_point:
12                 break;
13             for RoadLength, v2 in dict.get(v1, ()):
14                 if v2 in seen: continue
15                 prev = mins.get(v2, None)
16                 next = cost + RoadLength
17                 if prev is None or next < prev:
18                     mins[v2] = next
19                     heappush(q, (next, v2, path))
20     return cost,path

这是一个利用栈来优化后的迪杰斯特拉算法,算法返回路径花费和具体路径。这样能求出每一辆车在地图上的花费和最优路径。

核心思想有了,可以来处理数据,我们利用pandas来进行数据的处理和储存,处理后的数据得出三个矩阵,分别为车辆,道路和交叉路口。

我们利用路网信息来构建交通地图:

1 def ConstructionMap(roadData):
2     Map = []
3     for i in range(len(roadData)):
4         if (roadData[i][-1] == 1):
5             Map.append((str(roadData[i][-3]), str(roadData[i][-2]), roadData[i][1]))
6             Map.append((str(roadData[i][-2]), str(roadData[i][-3]), roadData[i][1]))
7         else:
8             Map.append((str(roadData[i][-3]), str(roadData[i][-2]), roadData[i][1]))
9     return Map

地图Map中,有一个判断语句,if (roadData[i][-1] == 1):,这句是判断道路是否为双向道路,如果是双向道路,则将信息添加到对称位置中。由此可见Map矩阵在存储双向道路时,为一个对称矩阵。每一条信息存储为道路的起始信息和道路长度。

路网构建好后,就来到了核心算法,为路网上的每一个车辆寻找最优路线,达到全局最优,在这里会出现思索的情况,要根据具体情况来判定,解除死锁。这是优化本题的关键。

 1 def FindRoute(CarList, RoadList, Map):
 2     carRoute = []
 3     for carNum in range(len(CarList)):
 4         ShortestRoute_theory = Dijkstra(Map, str(CarList[carNum][1]), str(CarList[carNum][2]))
 5         ShortestRoute_list = []
 6         ShortestRoute_list.append(int(ShortestRoute_theory[0]))
 7         lengthSumarize = len(ShortestRoute_list)
 8         carRouteTmp = [CarList[carNum][0]]
 9         carRouteTmp.append(CarList[carNum][-1]+random.randint(0,3000))
10         for i in range(1, lengthSumarize - 1):
11             for j in range(len(RoadList)):
12                 if ((RoadList[j][-3] == ShortestRoute_list[lengthSumarize - i] and RoadList[j][-2] == ShortestRoute_list[lengthSumarize - i - 1]) or (RoadList[j][-2] == ShortestRoute_list[lengthSumarize - i] and RoadList[j][-3] == ShortestRoute_list[lengthSumarize - i - 1])):
13                     carRouteTmp.append(RoadList[j][0])
14         carRoute.append(tuple(carRouteTmp))
15     return carRoute

我们将车列表,路列表和Map作为函数的输入,循环车列表,将列中的每辆车信息按照发车时间放入到路网中求解。但是,这样做就会出现死锁,因为在有限的路网信息中,随着车数量的增加会出现某条道路上的车循环等待的情况,这样导致系统无法继续下去。我们从死锁的原因入手,通过随机数延长汽车的发车时间来缓解死锁情况。最后求出每一辆车的最优路线和时间。

 

 

转载于:https://www.cnblogs.com/wobushangwangl/p/10967978.html


http://chatgpt.dhexx.cn/article/UJLB82K9.shtml

相关文章

2017华为软件精英挑战赛总结

1.题目 本次赛题是一个视频服务器的CDN规划问题 赛题包_百度网盘 2.解题思 2.1 思路一 整数规划 主要是要把模型建出来 包含了 0-1变量->是否布置服务器 边变量-> 表示该边所跑的流量 用glpk试过,变量个数太庞大,内存都开不下,解的效果也不好,只能解很小…

2017华为软件精英挑战赛解分析

后经在复赛赛题上测试&#xff0c;效果并不好&#xff0c;只适合部分数据集&#xff0c;并且没有理论支持&#xff0c;放出来只为启发—— 以下方法初中级样例1s以内&#xff0c;高级样例10s内出最优解—— 不随机&#xff0c;无启发式&#xff0c;走优化的方法。采用反馈-迭代…

2021华为软件精英挑战赛(粤港澳赛区复赛第八)

一、序言 总结一下四月份参加的华为软挑赛&#xff0c;距离现在已经结束了四个多月&#xff0c;终于有时间抽空写写总结了&#xff08;小作文&#xff09;&#xff0c;我们是粤港澳赛区的620&619-F3队&#xff0c;第一次参加这次比赛&#xff0c;本想尝试一下&#xff0c;但…

css 给文字加下划线

css给文字加下划线 直接贴代码 span {cursor: pointer;&:hover {color: #40A9FF;text-decoration: underline;}}

Excel批量设置下划线

Excel批量设置下划线 目录 Excel批量设置下划线 1、框选需要设置的单元格内容&#xff0c;鼠标右键选择“设置单元格格式” 2、点击“自定义”在类型框中输入“ *_ ” 点击“确定”自动生成&#xff08;注意这个 *_符号需要将输入法切换为英文输入法&#xff09; 3、完成…

h5下划线怎么设置_怎么给文加下划线?

怎么给文本加下划线&#xff1f;下面本篇文章就给大家介绍一下HTML页面和word文档中给文本加下划线的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。 HTML页面中给文本添加下划线 在HTML页面中怎么给文本添加下划线&#xff1f;…

latex输出下划线

第一种&#xff1a; 如果只是在作者的邮箱...输出下划线的话直接使用 \_ 就可以了 ma\_pengsen 输出结果&#xff1a; 第二种&#xff1a; 如果要在下划线上输出东西&#xff0c;那需要 \underline{XXXXXXX} ma\underline{ABCDEFG} 结果&#xff1a;

speedoffice(Word)文字怎么添加下划线

Word里面编辑文字&#xff0c;有时需要添加下划线&#xff0c;那么怎么添加下划线了&#xff1f;以最常用的speedoffice为列。 1、首先&#xff0c;我们用speedoffice打开Word文件&#xff0c;选中需要添加下划线的文字内容&#xff1b; 2、然后&#xff0c;鼠标点击选择“主页…

css里给文字加下划线代码,css给文字加下划线

语法&#xff1a;linear-gradient(direction, color-stop 1, color-stop 2,……) 简单用法&#xff1a;background-image: linear-gradient(red, transparent); 增加角度&#xff0c;linear-gradient(45deg, red, transparent) 加个position&#xff1a;linear-gradient(45deg,…

Word调整文字和下划线的间隔

工作环境(蓝色粗体字为特别注意内容) 1&#xff0c;开发环境&#xff1a;Microsoft word 2007 2&#xff0c;参考文献&#xff1a;https://blog.csdn.net/yiluyangguang1234/article/details/50158381 我们在使用Word编辑文档的时候&#xff0c;遇到有的标题带下划线的&#…

CSS设置下划线与文字间距距离

css的写下划线 text-decoration: underline; 但是这样的样式下划线太靠近文字了 如图 修改方式 border-bottom: 1px solid red;padding-bottom: 8px; 如图

word下划线,间距调大方式

都是下划线&#xff0c;是不是第一个看着更舒服&#xff0c;行间距更大。 下面的就是&#xff1a;我们常用的方式&#xff0c;ctrlu&#xff0c;下划线。 上面的是&#xff1a;连续打一行-&#xff0c;就是------&#xff0c;然后换到下一行&#xff0c;enter时候就出现了一条…

css里给文字加下划线代码,css添加文字下划线样式的方法

css添加文字下划线样式的方法 发布时间&#xff1a;2020-08-31 13:54:27 来源&#xff1a;亿速云 阅读&#xff1a;65 作者&#xff1a;小新 这篇文章将为大家详细讲解有关css添加文字下划线样式的方法&#xff0c;小编觉得挺实用的&#xff0c;因此分享给大家做个参考&#xf…

关于HTML,CSS中某一文字的下划线长度的改变

本人 刚刚入坑前端几个月。对于很多问题看的不是恨透测。前几日&#xff0c;写一个学长交代的小小网页时&#xff0c;遇到了一个问题。前前后后变化了好多次。最后解决了。我想有一些其他的学习者也有可能会遇到这类问题&#xff0c;特分享出来。希望可以帮到大家。 当时中需要…

word下滑线设置

方法一&#xff1a; 选择“文本”——>“选项”——>"高级"——>"为尾部空格添加下划线" step1: step 2: step3: step 4&#xff1a; 方法二&#xff1a; 选中需要添加下划线的部分——>"右键段落“——>"中文版式”——>“…

【CSS】下划线与文字间距,下划线粗细以及下划线颜色的设置

最开始的时候了解下划线的属性是&#xff1a; text-decoration:underline;但是&#xff0c;很遗憾的是&#xff0c;对于设计做的下划线用浏览器默认属性样式很难调整&#xff0c;使用这个属性并不能调整下划线与文字的间距&#xff0c;而且对于下划线的颜色也不好调整&#xf…

Python中函数的返回值

在之前的博客中分别介绍了Python中函数的定义、调用、以及函数的参数等&#xff0c;但是大家有没有发现&#xff1a;我们创建的函数都只是为我们做一些事&#xff0c;做完了就结束。但实际上&#xff0c;有时还需要对事情的结果进行获取。这类似于主管向下级职员下达命令&#…

python return_python 如何获得返回值 return

展开全部 前面两位的方法2113其实和先初始化AA&#xff0c;在调用AA的test()效果是一样5261的&#xff0c;在初4102始化AA()的时候&#xff0c;调用的那次test()的返回1653值已经丢了&#xff0c;比如这样定义&#xff1a;class AA(): def __init__(self): self.count0 sel…

python 自定义函数的返回值

python中自定义的函数&#xff0c;有的有返回值&#xff0c;有的没有返回值&#xff0c;且返回值的类型也需注意。 1、无返回值 例如 list 的 append 操作就是无返回值的&#xff0c;换句话说就是不能进行如下的连续操作&#xff1a; list [] list.append(1).append(2) 2、返…

python中函数的返回值,你了解吗?

函数返回值 1. “返回值”介绍 现实生活中的场景: 我给儿子10块钱&#xff0c;让他给我买包烟。这个例子中&#xff0c;10块钱是我给儿子的&#xff0c;就相当于调用函数时传递到参数&#xff0c;让儿子买烟这个事情最终的目标是&#xff0c;让他把烟给你带回来然后给你对么…