2022-第二周-学习报告

0 2022/4/19

1 2048游戏已有工作和我们工作的区别

目的不同:

  • 已有工作:AI是从玩家的角度去进行学习,但是系统如何生成棋子对于AI来说是未知的,所以需要使用一些算法来进行学习。
  • 我们的工作:我们是系统的角度去产生棋子,我们根据用户连接后来填充棋子,用户的做法是已知的。

因此,我们只需要设计一个评估函数能使得游戏难度平滑增加。

2 评估函数设计思路

总分-细分:分各种情况去考虑系统填子的方式。

2.1 已知信息

  • 用户连接棋子后的状态 ,即空缺状态。
  • 系统填充棋子后的状态,即填充状态。

2.2 空缺状态是死局

2.2.1 时间已到

要保证填充状态依然为死局。

2.2.2 时间未到

填充状态不能为死局,且根据时间大小,生成不同得分的棋子。

2.3 空缺状态不是死局

2.3.1 时间已到

填充的棋子,不能使棋局产生新的连线。

2.3.2 时间未到

根据时间的不同,生成不同得分的棋子。

3 评估函数

3.1 平滑性

平滑性是指每个方块与其直接相邻方块数值的差,其中差越小越平滑。

3.2 优先性

随着游戏的进行,棋盘中可能存在一些数值很小且数目很少的棋子,我们可以增加这类棋子的产生概率,称为优先性。

4 如何确定评估函数权重

让棋局自动连接和填充获得数据,再进行因子分析,根据考虑的因素对到达死局的影响确定权重。

0 2022/4/20

1 评估函数设计

1.1 平滑性

平滑性是指每个方块与其直接相邻方块数值的差,其中差越小越平滑。

1.1.1 计算过程

由于我们游戏的动作有8个(上,下,左,右,左上,右上,左下,右下),所有每一个棋子的平滑性都需要比较其本身与其周围数字的大小关系。设一个矩阵的初始平滑度为0,然后分别计算每个数字与其相邻数字(右,右下,下)之间的差值倍数,用0减去每一个数字的平滑性就是当前矩阵的平滑度。

1.2 连接性

连接性是指当前局面所有可以连接的棋子的总个数。

1.2.1 计算过程

统计当前局面中所有可以产生连线的棋子的个数。

1.3 数量优先性

不同局面下,总会存在一些棋子难以消除,我们需要提高生成这些棋子的优先级。其又分为数量上的优先和数值上的优先。

1.3.1 计算过程

  1. 首先分别计算生成的每一个数字在空缺状态下的个数。
  2. 空缺状态下的总棋子数除以他们分别的个数,结果为每一个生成数字的数量优先性。
  3. 同一个动作下生成的每一个棋子的数量优先性相加。

1.4 数值优先

数值优先是指优先生成棋局中数值较小的数字。

1.4.1 计算过程

  1. 找出空缺状态下的最大数值。
  2. 最大数值除以当前的生成数字,结果就为每一个生成数字的数值优先性。
  3. 同一个动作下生成的每一个棋子的数值优先性相加。

2 实验结果

我们只考虑在无限模式下的实验结果。
游戏可以无限的进行下去,且不存在有无法消除的数字。

0 2022/4/21

1 实验

今天尝试了对评估函数做修改,实验对游戏的影响。发现当控制棋子个数过多和场上棋子种类过多、时,游戏反应会变慢,因此我限制了控制棋子的个数,余下的棋子随机生成。同时对随机生成的棋子的范围也做了一定的限制。

2 讨论

下午找潘师兄进行了讨论,没有想到更好的办法解决现有问题。

你可能感兴趣的:(日报,python)