资源描述:
《ai实验四实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、(3学时)班级:计科041班姓名:陆宇海学号:0407100232一实验目的熟悉和掌握博弈(对抗)搜索基木思想和实现关键技术,使用Python语言实现通用的极大极小算法与Alpha-Beta剪枝算法,并进行实验验证。二实验原理廨弈是人工智能取得巨人成功的领域,著名的有深蓝系统等。所有的计算机陳弈程序(或系统)的基础Alpha-Beta剪枝算法,即在极大极小算法基础再进行剪枝。熟练掌握该两种算法,能够解决博弈领域的大部分问题(当然可能需要大型数据库的支撐)。三实验条件1Python解释器,及IDLE等程序开发调试环境。2本实验所提供的几个Python文件,请解压文件
2、gameproject.rar.四实验内容1MiniMax算法实现2AlphaBeta剪枝算法实现3应用于一字棋游戏(TicTacToe),进行算法测试4应用于抓三堆游戏(Nim),进行算法测试五实验步骤1一字棋游戏的搜索问题形式化importtictactoeinitialTTTState=tictactoe.TicTacToeGameState()你先试着和一字棋随机Agent(它只会随机乱走,碰运气)对弈一局importgamesimportgameagentsgames.runGame(initialTTTState,{"X":gameagents.Hum
3、anGameAgent(),u0":gameagents.RandomGanneAgent()},False,False)#输出结果为:Yourmove?0,0Opponent'smovewas(1,1)2
4、IIIIII1III0III0IXIIIII012Yourmove?0,1Opponent'smovewas(2,0)2
5、IIIII1IXI0II0IXIII0I012Yourmove?0,22IXIIII1IXI0II0IXIII0I012Gamefinishedwithutilities{X:1,'O':-1}#山于智能体的行棋策略是随机的,故人可以毫不费
6、力地战胜它2实现一个简单的Agent,它会抢先占据中心位置,但是之后只会按照格子的顺序下子(其实不能算是智能体),试着和它玩一局:把步骤1的语句中的RandomGameAgent()替换成SimpleTTTGameAgent()即讥输出结果为:Yourmove?2,0Opponent'smovewas(1,1)2IIIIIII1III0III0IIIIIXI012Yourmove?2,2Opponent'smovewas(0,0)2IIIIIXI1III0III0I0IIIXI012Yourmove?0,2Opponent'smovewas(150)2IXIIIX
7、I1III0III0I0I0IXI012Yourmove?0,1Opponenfsmovewas(2,1)2IXIIIXI1IXI0I0I0I0I0IXIYourmove?1,22IXIXIXI1IXI0I0I0I0I0IXI012Gamefinishedwithutilities{X:1,'O':-1}#在以上的下棋步骤中,我有意让棋,才得以观察到智能体的下棋顺序:先下中间的格(1,1),若(1,1)#已被占据,则沿着从第0行到笫2行,每行从第0列到第2列的规律探索可下棋的格子然后再让随机Agent和SimpleAgent两个所谓的智能体对弈:把步骤1的语句屮的
8、HumanGameAgent()替换成SimpleTTTGameAgent()即可。#输出结果为:#回合1:2IXI0IXI1IXI0IXI0I0IXI0I012Gamefinishedwithutilities{X:0,'O':0}#双方平局#回合2:2IXIXIXI1IXI0I0I0I0I0IXI012Gamefinishedwithutilities{X:1,'O':-1}#随机智能体(RandomGameAgent)获胜#回合3:故两者对弈针对Max1IXI0IXI0IXI0I0I012Gamefinishedwithutilities{X:-1,'O':
9、1}#固定方式智能体(SimpleTTTGameAgent)获胜#经以上三次对弈,可以看出由于这两种智能体在下棋时都不考虑效用,而在无目的地下棋,#时,获胜的概率是相同的3实现极大极小算法#极大极小算法是封装在•个名叫Minimax的类里:classMinima刈GameTreeSearcher):defgetBestActionAndValue(self,currentState):#通过此函数获得最优行动方案self.player=currentSta怕.currentPlayer()#获取当前的玩家(“O”或“X”)returnself.maximin(cu
10、rrent