Skip to content

基于Pierre Dellacherie算法进行改进的俄罗斯方块的人工智能算法研究

Notifications You must be signed in to change notification settings

meamaturinlove221/AI-Tetris

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI-Tetris

基于Pierre Dellacherie算法进行改进的俄罗斯方块的人工智能算法研究 在之前项目《俄罗斯方块》的基础上,基于Pierre Dellacherie 算法,只考虑俄罗斯方块的当前方块,其算法主要是评分函数:该算法尝试着对当前落子的每一种旋转变换、从左到右地摆放,从而产生所有的摆法。对每一种摆法进行评价。评价主要包含如下6 项指标:下落高度、消行数、行变换、列变换、空洞数和井的总和。我们从中综合提取出三种指标:边缘得分、旋转次数和死格数量。 ①随机生成第一代权重,共计1000个,使所有的权重位于[-1,1]之间。 ②依次使用这些权重进行游戏,记录游戏结束时这些权重对应的消行数。 ③当这一代所有的权重都进行过游戏后,根据消行数对权重进行排序。 ④在这一代中随机抽取100个权重,取其中最高的两次生成新的权重,重复300次,取代上一代中消行数最低的300个权重,生成新一代的权重。 ⑤重复以上步骤,直到获得满意的权重。 成功部署并运行了公版方案: 从本地的“generatInfo.txt”的信息读取到内存中,设定当前的程序运行信息。如果本地没有该文件存在,则随机生成1000个[-1,1]之间的权重值。 当前游戏结束时,需要继续随机权重后再重新开始游戏,在AI_Logic()函数中对权重进行新操作。 ①在GAInfo中保存当前子代的信息,再调用saveInfo()函数将GAInfo保存至本地。

②在for循环中将一代的权重信息调用;当一代的所有权重调用完后,把其信息和消行数保存在txt文档中,再调用generateChildren()函数生成新一代的权重。

③在sorting()函数中遍历当前的每一个权重的消行数,使用二分排序将权重以消行数排序。

④在generateChildren()函数中先调用sorting()函数进行排序,再随机抽取100个数据,根据消行数最高的两条数据,以“最高消行数权重+第二高消行数权重”再归一计算出新的权重,重复300次。 之后对其进行了以下修改: 下落高度的特征值以当前方块的旋转中心位置为基准。 计算消行数的特征值时同时执行消行操作,行变换、列变换、空洞值和井值都在已消行过的舞台上进行计算。 在对落点进行计算之前,先对该下落会不会造成游戏结束进行判定,如果会导致游戏结束则跳过该落点。 修改了消行参数,解决了方块触顶导致的无法正常消行的问题。 在行变换和列变换中,将舞台到空方格也记为一次变换。 GA算法结果分析:在全部程序编写完毕后,运行程序,让AI进行自学习,寻找最优的权重。总共运行了3代权值,每代权值相比于之前的平均消行数都有一定程度的上升,但由于无bag7规则下随机生成方块的特性,最高消行数有一定程度的波动,但总体趋势也是往上升的。

对于俄罗斯方块ai来说,大多数方块出现的顺序其实都在它的掌控范围之内。每次出场的方块造型再千变万化也不过是四个格子,哪怕永远只会出现O型或者L型之类的方块,场面也不会有什么难度可言。但是在去掉Bag7机制的情况下,I型、Z型和S型方块将会变成ai最难克服的方块。假如永远只能拿到Z型方块或者S型方块中的一种,游戏就会十分容易结束。同理,很长一段时间都拿不到“I”型方块也会导致游戏易结束。尽管这种情况听上去非常极限,可能性微乎其微,但是对于俄罗斯方块ai来说,在连续进行数万次乃至数十万次随机方块的情况下,这种情况也不是没有可能。 虽然在PD算法中,考虑到了局面长时间没有这些方块出现的情况,比如通过计算“井”来限制深坑的产生,通过行列变换和空洞来更好的适应Z型和S型方块,但长时间的测试表明,这种算法仍有自己的局限。 在这样的实验结果下,可能这个算法的适应性并没有那么的优秀。因为对于俄罗斯方块这个游戏来说,我们目前的PD核心算法已经几乎在对场面的判断上做到了最大的趋利性(在拥有Bag7机制的情况下)。但是在失去了Bag7机制的情况下,我们可能需要重新调整各个计算参数的权重,以达到更好的效果。 我们得到了如下参数: 权重0:0.329696 权重1:0.324295 权重2:0.215109 权重3:0.523192 权重4:0.612771 权重5:0.30107 该组参数经过测试,最高达到了340356行的成绩。符合消行数要求。

About

基于Pierre Dellacherie算法进行改进的俄罗斯方块的人工智能算法研究

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages