《大工《人工智能》大作业参考题目及要求【内容仅供参考】592.docx》由会员分享,可在线阅读,更多相关《大工《人工智能》大作业参考题目及要求【内容仅供参考】592.docx(9页珍藏版)》请在第一文库网上搜索。
1、题目:广度优先搜索算法1谈谈你对本课程学习过程中的心得体会与建议?人工智能是一门前沿且综合性非常强的课程,自己在整个课程的学习中,认识到人工智能领域的许多方面,以及了解和学习了人工智能课程相关的一些课程的学习过程中,涉及到了较多的计算机知识点,包括很多计算机个人建议学完这门课程后,多去尝试做一些简单的实践练习,实践中除了相关理论知识如算法等作为分析支撑,还要能够通过代码来编写实现一些简单案例,并进行测试验证和推导,最后尽可能将实现的案例进行举一反一:,学习效果会大大提升。在尝试实现练习案例中,涉及到编程技术,首先至少应该熟练使用一门编程语言,比较推荐PYthOn作为主要编程语言进行实现案例以及
2、日常练习,而且在PythOn编程相关的领域内,本身已经有很多相关成熟的代码dem。去借鉴参考,这也有助于自己快速的上手和试验。另外,无论是课程学习中,还是学习完后,一定要善于作笔记总结,汇总遇到的每个难点知识。现在互联网比早以前发展的更成熟,我们可以通过互联网搜索相关知识,进行课外补充,这也是种非常有效的提升课程知识的方式。同时,利用互联网进行沟通探讨也是种良好的学习方式,比如自己写博客交流,或者在相关论坛进行发帖提问式交流,都是非常方便且有效的,最后不要忘记将知识点进行再次归纳、记录进自己的笔记中。目前人工智能技术的发展已经进入了更广泛的领域,而且目前还在不断的发展并且欣欣向荣,所以该课程是
3、一门非常有意义的课程,学完这门课程后,个人推荐应该对这个领域进行持续关注,结合现代化人工智能需求,以及融入到身边的日常案例,积极进行更广泛和有深度的自我研究学习。2.人工智能课程设计,从以下5个题目中任选其一作答。题目:广度优先搜索算法广度优先搜索算法算法介绍:广度优先搜索算法又称为宽度优先搜索算法,英文全称是BreadthFirstSearch(BFS),它是属于一种盲目搜索算法,该算法按照广度或宽度进行扩展搜索的,如果目标节点存在,用该算法总可以找到该目标节点,而且是最短路径节点,但该算法的时间和空间复杂度都相对比较高。该算法的具体思路:首先搜索的动作是按照逐层进行的,在对下一层的任意节点
4、进行搜索之前,必须搜索完本层的所有节点。整体思路如下:从初始节点开始,向下逐层对节点进行依次展开,并考察它是否为目标节点,再对每层下级节点扩展前,必须完成对当前层的所有节点的扩展,搜索过程未扩展节点表OPEN中的节点排序准则是先进入的节点排在前面,后进入的节点排在后面。算法流程图:(见下一页)主要函数代码:这里代码编写使用Python语言,结合经典的八数码问题为实例演示,采用广度优先搜索算法,编写逻辑实现计算最少移动的步数。其中每个状态的表示,由三行排列为一行显示,如:设定目标状态为123804765排列成一行则为123804765以下为相关函数代码:# 初始化默认队列status_queue
5、=0foriinrange(100000)# 队列首指针queue_a-0# 尾指针queue_b二1# 目标状态dest_status-123804765# 移动动作方向acts=1上,下,左,右#定义节点类c1assNode:status=0index=0act二def_init_(se1f,s,i,a):-s-i-a#广度优先搜索的方法defbfs_method(status):g1oba1queue_a,queue_b# 定义存储扩展的状态集合status_ext_set=setO# 队列中插入初始节点status_queuequeue_a=Node(status,-1,0)# 添加初
6、始状态(status)# 循环处理队列whi1equeue_a!-queue_b:#判断当前状态是否等于目标状态status=status_queuequeue_a.statusifstatus=dest_status:returnTrue#进行扩展foriinacts:# 新的状态status_new=adjust_move(status,i)# 已扩展则跳过继续后续ifstatus_newinstatus_ext_set:continue# 不可扩展则跳过继续后续ifstatus_new=-1:continue# 将新状态添加到扩展集合中(status_new)# 将新状态对应节点设置进队
7、列中status_queuequeue_b-Node(status_new,queue_a,i)queue_b+=1queue_a+=1Print(搜索失败)returnFa1se#移动方法defadjust_move(curr_status,act):# 对当前状态序列进行格式化curr_status_str-str(curr_status)status_format=(9)b1ankindex=(,0,)status_1ist-1ist(status_format)# 求取每次执行移动动作后的新序列:# 向左移动不能在第一列,O的索引修正Tifact=acts2:ifb1ank_index
8、%3=-O:return-1e1se:status_1istb1ank_index-status_1istb1ank_index-1status_1istb1ank_index-1-,O,# 向右移动不能在第三列,O的索引修正+1e1ifact=acts3:ifb1ank_index%3=-2:return-1e1se:status_1istb1ank_index-status_1istb1ank_index+1StatUsistb1ank_index+1-,O,# 向上移动时不能在第一行,O的索引修正-3e1ifact=actsO:ifb1ank_index-38:return-1e1se:
9、status_1istb1ank_index=status_1istb1ank_index+3status_1istb1ank_index+3-,0,#重新格式化返回队列status_format二,zjoin(status_1ist)returnint(status_format)#测试验证#获取输入的起始状态,如203184765status_input=int(input(起始状态)#调用自定义的广度优先搜索方法计算is_success=bfs_method(status_input)ifnotissuccess:Print(搜索失败,无法达到目标状态)#匹配到目标状态,输出步数num二
10、0temp_index=queue_astatus_queue_resu1t=0foriinrange(100000)whi1etemp_index!-0:status_queue_resu1tnum=status_queuetemp_index.acttemp_index-status_queuetemp_index.indexnum+=1Print(f当前计算出最少需要移动的步数为:num)人工智能中使用广度优先搜索算法的领域场景:如今人工智能的细分领域较多,许多涉及到两点间寻找最短路径方式的地方都可以使用到广度优先搜索算法。在智能家居中,如扫地机器人需要做路线规划,绕过障碍物找到最短路径,可以应用该算法。在现代社交工具中,推荐可能认识的人进行加好友,通过已知认识的人的第一层关系开始进行逐层遍历和互相比对,找到最可能互相认识的人。在策略游戏中,如平面网格中寻找不同网格节点的可通过路径和距离,如在跳棋中计算最少走多少步可以获胜。在文档拼写纠错工具中,计算出最少编辑的地方进行错拼单词的纠错。总体而言,人工智能领域涉及到寻找从原点到终点的最短路径,都可以应用广度优先搜索算法,只要问题本身有解,必然可以通过该算法计算出最短步骤或目标路径。