第四届 “海淀工匠杯“ 职工职业技能大赛 - 人工智能工程技术人员决赛
参赛人数:26
赛事证书
人工智能工程技术人员决赛的迷宫是一个 51x51 的网格布局,每个网格单元格代表迷宫的一部分,包括过道、墙壁、资源点、钥匙、门和陷阱点。
· 过道:可通过的区域。
· 墙壁:不可穿越的障碍物。
· 资源收集:迷宫内固定有15个资源点,每个资源点的收集将加5分。最多可收集10个资源点,超过部分无效。
· 钥匙与门:迷宫中新增了钥匙与门的机制,固定有1-3把钥匙,1-3扇门。参赛者可以找到任意一把钥匙来打开任意一扇门。门的后方可能通向隐藏区域,该区域可能包含额外的资源点、关键路径。
· 陷阱点:迷宫中存在20个陷阱点,每通过一个陷阱点,参赛者会失去2分。
参赛者需要使用 Python 编程语言实现一个算法,该算法能够指导穿行者从迷宫的起点出发,通过有效的路径规划,避开墙壁,合理规划资源收集,找到钥匙并开门,探索隐藏区域的潜在价值,避开陷阱,最终找到并到达出口完成任务。
下图为迷宫可视化图片
迷宫代码表示:
[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[1,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,1,1,0,1,5,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1],[1,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,1,1],[1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,5,1,1,0,3,1,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1],[1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,2,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,5,0,1,0,1,1],[1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,2,1,1],[1,1,0,1,0,0,1,0,1,0,0,1,0,1,2,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,5,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,1,1],[1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,1],[1,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1],[1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1],[1,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,1,1],[1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1],[1,1,0,0,0,0,0,0,0,0,0,4,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1],[1,1,0,1,5,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1,1,0,1,1],[1,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,1,1,1,0,1,5,0,1,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1],[1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,1,1],[1,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,2,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,0,5,0,0,0,0,0,0,1,0,1,1,0,1,1],[1,1,0,1,0,0,1,1,1,1,0,1,0,1,0,1,2,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,1],[1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,2,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,5,0,0,1,0,1,1,0,1,1,1,0,1,1],[1,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,5,1,0,1,1],[1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1],[1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,5,1,1,1,1,0,1,1],[1,1,0,1,1,1,0,1,1,1,1,1,0,1,2,0,2,0,0,0,2,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,2,1,1],[1,1,0,1,0,1,0,1,3,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1],[1,1,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1],[1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,2,2,1,1,1,1,1,0,1,1,0,1,0,1],[1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,2,1,1,0,1,1,1,0,0,1],[1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,1,5,1,1],[1,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,1],[1,1,1,1,0,1,1,1,0,0,0,1,0,5,0,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1],[1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1],[1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1],[1,1,0,1,1,0,1,0,1,1,0,0,5,0,2,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,2,0,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,1],[1,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,5,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,1,1],[1,1,0,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1],[1,1,0,1,1,0,0,5,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,0,1,1],[1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,2,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1],[1,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,1],[1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1],[1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1],[1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1],[1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1],[1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,5,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1],[1,1,0,1,1,1,0,1,1,0,1,1,2,1,1,0,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1],[1,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1],[1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,1],[1,1,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1],[1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1],[1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,5,1,1,1,0,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
迷宫默认入口坐标为 1,0
迷宫默认出口坐标为 49,50
代码中0表示房间,1表示墙,2表示资源点,3表示钥匙,4表示门,5表示陷阱点
代码输出的路径结构为:
[[1, 0], [1, 1], [1, 2], [2, 2], [3, 2], [3, 3], [3, 4], [4, 4], [5, 4], [6, 4], [7, 4], [7, 3], [7, 2], [8, 2], [9, 2], [10, 2], [11, 2], [12, 2], [13, 2], [13, 3], [13, 4], [13, 5], [13, 6], [13, 7], [13, 8], [13, 9], [13, 10], [13, 11], [13, 12], [13, 13], [13, 14], [14, 14], [15, 14], [15, 15], [15, 16], [15, 17], [15, 18], [15, 19], [15, 20], [15, 21], [15, 22], [16, 22], [17, 22], [18, 22], [19, 22], [19, 21], [19, 20], [20, 20], [21, 20], [21, 19], [21, 18], [22, 18], [23, 18], [24, 18], [25, 18], [25, 19], [25, 20], [25, 21], [25, 22], [26, 22], [27, 22], [28, 22], [29, 22], [30, 22], [31, 22], [32, 22], [33, 22], [33, 23], [33, 24], [33, 25], [33, 26], [34, 26], [35, 26], [35, 27], [35, 28], [36, 28], [37, 28], [37, 29], [37, 30], [38, 30], [39, 30], [39, 31], [39, 32], [40, 32], [41, 32], [41, 33], [41, 34], [41, 35], [41, 36], [41, 37], [41, 38], [42, 38], [43, 38], [44, 38], [45, 38], [45, 37], [45, 36], [46, 36], [47, 36], [48, 36], [49, 36], [49, 37], [49, 38], [49, 39], [49, 40], [49, 41], [49, 42], [49, 43], [49, 44], [49, 45], [49, 46], [49, 47], [49, 48], [49, 49], [49, 50]]
二、提交形式
参赛用户在线上报名系统:https://jingsai.csdn.net/competitions/80bd331e17151f686a83f62c2f49d8af 报名并进行算法代码zip文件提交,最后统一评分。
内容要求:
· 输入:程序需从当前目录下的 maze.json 文件中读取地图数据。
· 输出:程序使用 print 函数输出一个二维数组,二维数组的结构应与地图中的图示保持一致。
· 代码原创性:为确保代码的原创性,严禁使用第三方依赖,即 requirements.txt 文件不得包含任何依赖项。
提交内容包括:
· 算法源代码:main.py 文件。
· 算法说明文档:readme.md 文件,简要介绍算法的设计思路和实现过程。
· 迷宫地图文件:maze.json 文件,包含用于测试的迷宫数据。
此外,活动方提供了下面的 main.py
的模板文件供参考。
import json
import os
class Solution:
def find_path(self, maze):
return [[1, 0], [1, 1], [2, 1], [3, 1], [3, 2], [3, 3], [2, 3], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 7], [3, 7], [3, 8], [3, 9], [4, 9], [5, 9], [5, 10], [5, 11], [6, 11], [7, 11], [8, 11], [9, 11], [9, 10], [9, 9], [9, 8], [9, 7], [9, 6], [9, 5], [10, 5], [11, 5], [12, 5], [13, 5], [13, 6], [13, 7], [14, 7], [15, 7], [15, 8], [15, 9], [14, 9], [13, 9], [13, 10], [13, 11], [13, 12], [13, 13], [14, 13], [15, 13], [15, 14], [15, 15], [15, 16], [15, 17], [16, 17], [17, 17], [18, 17], [19, 17], [19, 18], [19, 19], [20, 19], [21, 19], [22, 19], [23, 19], [23, 20], [23, 21], [22, 21], [21, 21], [20, 21], [19, 21], [19, 22], [19, 23], [19, 24], [19, 25], [20, 25], [21, 25], [21, 26], [21, 27], [22, 27], [23, 27], [24, 27], [25, 27], [26, 27], [27, 27], [27, 28], [27, 29], [28, 29], [29, 29], [29, 30], [29, 31], [28, 31], [27, 31], [27, 32], [27, 33], [26, 33], [25, 33], [25, 34], [25, 35], [24, 35], [23, 35], [23, 36], [23, 37], [24, 37], [25, 37], [25, 38], [25, 39], [24, 39], [23, 39], [23, 40], [23, 41], [24, 41], [25, 41], [26, 41], [27, 41], [28, 41], [29, 41], [29, 40], [29, 39], [30, 39], [31, 39], [31, 40], [31, 41], [31, 42], [31, 43], [32, 43], [33, 43], [34, 43], [35, 43], [35, 42], [35, 41], [36, 41], [37, 41], [37, 40], [37, 39], [38, 39], [39, 39], [40, 39], [41, 39], [41, 40], [41, 41], [42, 41], [43, 41], [43, 42], [43, 43], [44, 43], [45, 43], [45, 44], [45, 45], [46, 45], [47, 45], [47, 46], [47, 47], [47, 48], [47, 49], [48, 49], [49, 49], [49, 50]]
if __name__ == '__main__':
solution = Solution()
current_work_dir = os.path.dirname(__file__)
with open(current_work_dir + '/maze.json', 'r', encoding='utf-8') as file:
maze = json.load(file)
path = solution.find_path(maze)
print(path)
下图红色标注部分必须按官方规则来,蓝色标注部分需要开发者自己实现。
三、评分形式
(1)路径得分:穿行者完成任务所需的步骤越短,得分越高。
(2)资源得分:穿行者收集的资源数量越多,得分越高。
(3)综合得分:时间得分(满分50) + 资源得分(满分50,溢出无效) - 陷阱分数 。
四、参赛代码要求
(1)代码语言限制:Python3 语言
(2)输入/输出限制:按照图示中的示例结构
五、评判规则
(1)否决条件:出现以下情况直接判定0分。
● 路径列表不连续,例如(0,1),后面直接是(2,3)
● 路径列表出现穿越不可通过的点
● 没有钥匙而穿越门,视为不连续
(2)评分标准
● 路径得分:(最短路径数 / 参赛用户实际路径数) X 50
● 资源得分:每一个资源点得5分,获得10(及10个以上)资源点得50分。
● 陷阱点扣分:每一个陷阱点扣2分。
总得分 = 路径得分 + 资源得分 - 陷阱得分
最终系统会通过 N 个迷宫和随机资源点对算法进行综合评分取平均值。