LOADING

加载过慢请开启缓存 浏览器默认开启

人工智能实验1

2022/9/14 AI

拿到这个实验的时候,我是一脸懵逼的,毕竟理论课只上了一节,还全是在吹水,然后实验课就来了,还是用的Python。实验课是周二上午上的,然而我周三晚上就把整个实验肝完了,期间除了上课和早上学英语单词,其他时间都在这上面,写代码还是挺快乐的,于是将(踩坑)过程记录如下:


偷个懒,以下是实验报告原文:

  1. 分析估价函数对启发式搜索算法的影响。

    由实验结果可知,估价函数的选取对结果的长度和求出的时间都有印象,不同的估价函数应对不同的初值,性能也有差异。总的来说,选取一个好的估价函数,对于使用启发式搜索算法又快又好地求出结果是至关重要的。

  2. 探究讨论各个搜索算法的特点。

    广度优先搜索:如果有解,总是能找到最优解,但是其效率较低,体现在耗时较长。

    深度优先搜索:一般找到的都不是最优解,性能和深度限制的设置有很大关系。

    A&A*启发式搜索: 在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,效率极高。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。

  3. *扩展选做题:从初始状态到目标状态的变换,符合什么规律才可解。

    由数学知识可知,可计算这两个有序数列的逆序值,如果两者都是偶数或奇数,则可通过变换到达,否则,这两个状态不可达。

  4. 我的思考:

    在编写代码的过程中,我遇到了许多或“哭笑不得”,或“意味深长”的bug。下面列举几例:

    一.预先给的代码在我的电脑上(Linux)无法运行

    但是在其他同学的Windows电脑上却能跑起来,我查阅资料,再细看这个报错,感觉这个构造函数里的“拼图”字符串是多此一举,遂去掉,程序便能正常运行了!

    二.Python语言不熟练导致的问题
    因为我对Python的了解不太深入,就导致了一些我写的代码和我想要的效果不一致的问题,比如:for i in range(-(COLS-1), COLS-1)中,range是“右开”的,所以右边界是取不到的。再比如有如下问题:

    错误写法看似没有毛病,如果是C的话,确实没毛病,但是Python中变量可以不声明就直接赋值,所以这里Python就会把145行当成声明了一个局部变量,即使外面有同名全局变量!第一种解决方法就是,因为该值是一个数组,所以可以直接操作其数组内的值,此时就会取到全局变量,没有歧义;第二种解决方法就是使用global声明该变量是全局变量,再对其进行操作。

    三.i与j和x与y的匹配问题,到底哪个是行,哪个是列,常常搞得人晕头转向,不过使用调试器或者事先仔细思考一下也能解决。

总的来说,这次实验我确实学习到了很多,也收获到了很多。

代码地址:https://github.com/Yuzi0201/AIProgramming/blob/main/EX1/tmpPuzzleWithAutoPlay.py

一些参考:

https://zhuanlan.zhihu.com/p/266830722

https://blog.csdn.net/weixin_48557496/article/details/121463172

局部变量问题:

https://www.jianshu.com/p/c3587a5f9f68