Skip to content
This repository has been archived by the owner on Jun 5, 2021. It is now read-only.
/ tetris-ai Public archive

基于遗传算法的俄罗斯方块游戏AI的研究和实现

License

Notifications You must be signed in to change notification settings

dormirr/tetris-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# 模型假设

俄罗斯方块的每一次移动(旋转和位置)都要有一个评分标准来判断是否是最佳的移动方式。

可以根据每一次移动所造成的影响作为评分标准。

# 模型的建立与求解

## 网格高度

这个值可以告诉我们网格有多高。为了计算总和高度,我们取每一列高度的总和(从网格最底端到每一列最高处的距离之和)。

我们希望H的值能够最小化,因为较低的高度也就意味着我们可以在到达网格顶部之前可以将更多的方块放入网格。

## 网格行数

这个值可以告诉我们网格中完整的行的数量。

我们希望L的值能够最大化,因为L的值越高,获得的分数则越多,并且将清理出更多的空白网格来放更多的方块。

## 空洞数

空洞指的是一个空的网格上方,至少存在一个方块。

在我们到达洞并且填满它之前,我们必须清除掉它上面的所有方块,所以一个空洞很难清除。我们希望尽量减少O的值来保证游戏能够进行更长的时间以此得到更高的分数。

## 凹凸度

我们在网格中若出现了一列高度很低,而周围的列高度很高的情况,我们将高度很低的列称为井。这些井的出现尽管可以带来非常高的分数(一次消除多行得到的分数会很高),但这些井的出现也意味着本来可以很容易清除的行不会被清除掉。如果将井覆盖,那么井所在的行都会变的难以消除。如图4,图5。

为了判断井的影响,我们定义了一个名为凹凸度的值。它是通过相邻列之间的高度绝对差值来计算的。

为了保证游戏不会过早地结束,我们希望尽量减少W的值。

## 评分标准

我们通过上述的四种评分影响因素来计算俄罗斯方块的每一次移动(旋转和位置)所得到的分数。它的分数由以下函数计算得出:

分数=a*H+b*L+c*O+d*W

其中a,b,c,d为每一种评分影响因素所占的权重。因为我们希望网格高度,空洞数和凹凸度尽可能的小,所以a,c,d的值是负数。同样,我们希望网格行数尽可能的大,所以b的值是正数。

通过该公式,俄罗斯方块AI可以通过尝试所有可能的移动(旋转和位置)情况来选择分数最高的方式进行最佳移动。

About

基于遗传算法的俄罗斯方块游戏AI的研究和实现

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages