人工智能实验二 博弈树井字棋 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工智能实验二博弈树井字棋实验报告
姓名:舒吉克
班级:545007
学号:1000000000
目录
一、实验环境 (2)
二、实验目的 (2)
三、实验内容 (2)
四、实验步骤 (2)
(1)博弈树搜索算法 (2)
(2)估价函数 (2)
(3)数据结构 (2)
五、实验结果 (2)
一、实验环境
操作系统:WIN7
编译环境:Codeblocks13.12
语言:C++
二、实验目的
用博弈树算法实现井字棋游戏。
三、实验内容
用博弈树算法实现井字棋游戏。
井字棋游戏是一种简单的棋类游戏,在3*3的棋盘上,两人轮流下子,谁的棋子先连成3颗一条直线,谁就赢了,可以横着、竖着、斜着。
博弈树算法是用搜索来解决这类问题的算法,井字棋游戏步数较少,很容易用博弈树算法实现AI。
四、实验步骤
(1)博弈树搜索算法
博弈树搜索算法是搜索算法的一种,用深搜来遍历所有的下子情况,利用一种
叫做MIN-MAX的策略,就是对每种棋盘情况有一个估价函数,对A方有利就是
正数,对B方有利就是负数。
A方行动时,必然走使棋盘的估价函数最大的那
一步,也就是MAX;而B方行动时,必然走使估价函数变得最小,也就是MIN
的一步。
博弈树搜索时,会假设双方都足够聪明,每次都先试着走完所有的可能,然后
让当前行动人走对自己最有利的那一步。
最后,得到AI当前所需走的这一步到
底走哪步,让AI走出这一步。
(2)估价函数
估价函数是博弈树算法重要的一部分。
我设计的估价函数,是某一方已经连三
了(也就是已经胜利了),就直接返回1000或-1000。
若在某一行、某一列、某
一斜线(一共有三行、三列、两条斜线),每有两个A方的棋和一个空格,则估
价+50,每有一个A方的棋和两个空格,则估价+10;B方的也类似。
这样,就能把双方的胜负、优劣势情况用估价函数表示出来。
(3)数据结构
没有用太复杂的数据结构,用结构体中的3*3数组存储棋盘,用vector来存储
某一情况电脑可以走的各种选择,这样电脑能在有多种估价函数相同的选择的
时候能随机从中选一个。
五、实验结果
测试的结果:程序无论先后手都根本不会输,玩家有失误的话它能赢。
运行截图:
1.开始可以选择先后手:
2.我按了0,选择了先手。
电脑在对局途中都会说出我设定好的语句,来表明它用博弈树算法得到的对局势的分析。
如我下在了中间的1,1位置,电脑用博弈树算法,可以得知走四个角才不会输,走其他的四个点必输,所以如下图进行了判断,然后随便选了一个角下棋。
3.我第三手下载了左边中间的1,0位置,电脑能判断出它不堵我我就赢了(出了1,2之外的位置的估价数值都为1000,也就是玩家会获胜,所以它只有走1,2,才能避免必输的情况)。
4.我下错了一步棋,电脑能通过博弈树算法得知它走这一步他就赢了,然后他赢了。
之后可以选择重新开始或者退出。
6.玩家选择后手的话,AI会判断出它先手走哪步其实都不是必赢,假设玩家足够聪明(这也是博弈树算法的一部分,会假设双方足够聪明,每步都走最好的位置),AI先手走哪个位置其实都是一样的。
7.玩家后手走一般要走中间,而我选择下了一个无关的角,这是必输的走法,电脑可以通过博弈树算法得知我必输,于是它走出了必赢的一步,并且告知我输定了。
8.我必须堵它,然后它又走了一步,走出了双2,于是我输了。