最近写了个AI 玩2048 的小游戏,简单记录一下过程
项目地址 : https://github.com/DylanFrank/Learn/tree/master/CSMM101AI/project/2048-game
核心代码是这一块儿 :
playerAI_3.py
其他代码都是系统给的
核心逻辑
最开始我是想 写一个alpha-beta剪枝来着,但是效果不好,后面我改了一下逻辑,变成期望最大化computer 是在任意一个格子上随机放一格, 90 % 90\% 90% 的概率是 2 2 2, 10 % 10\% 10% 的概率是 4 4 4, 然后平均一下整体的效用 (utility), 关于这个效用评估函数,后面再说。人就是尝试各种方向每步找一个期望效用最大的方向滑动就好。
def minimize(self, grid, dep):
# self.dep +=1
cells = grid.getAvailableCells()
if self.terminal_test(cells, dep):
return self.estimateFun(grid)
utility = 0
for cell in cells:
child = grid.clone() # grid is not change
# for val in tileVal:
child.setCellValue(cell, tileVal[0])
u1 = self.maximize(child, dep - 1)[1]
child.setCellValue(cell, tileVal[1])
u2 = self.maximize(child, dep - 1)[1]
utility += prob * u1 + (1 - prob) * u2
return utility / len(cells)
def maximize(self, grid, dep):
# self.dep +=1</