黑白棋/奥赛罗早期的游戏评估function

我已经用Alpha-Beta修剪技术编写了基于MiniMaxalgorithm的自己的Reversi播放器,但在前10次移动中,我的评估function太慢了。 我需要一个好的早期游戏评估function。

我正在试图用这个matrix(相当于董事会)来决定这个matrix有多么有利:

{ 30, -25, 10, 5, 5, 10, -25, 30,}, {-25, -25, 1, 1, 1, 1, -25, -25,}, { 10, 1, 5, 2, 2, 5, 1, 10,}, { 5, 1, 2, 1, 1, 2, 1, 5,}, { 5, 1, 2, 1, 1, 2, 1, 5,}, { 10, 1, 5, 2, 2, 5, 1, 10,}, {-25, -25, 1, 1, 1, 1, -25, -25,}, { 30, -25, 10, 5, 5, 10, -25, 30,},}; 

但是效果不好。

你甚至为Reversi写过一个早期的游戏评估函数吗?

我看到你已经find了位置策略 。

一个非常简单的启发式游戏在游戏早期工作得相当好,就是“放弃”,也就是“ 蒸发 ”:拥有更多敌人gem和更less石头的棋盘更好。 (这有点反直觉,因为在游戏结束时相反)。

所以一个简单的评估板就可以是这样的

 early_game := (total_stones < 40) if( early_game ){ // give-away in the early game count_goodness := K1*( enemy_stones - friendly_stones ) }else{ // take-back later in the game count_goodness := K2*( friendly_stones - enemy_stones ) } positional_goodness = K3*position_matrix_evaluation; total_board_goodness = count_goodness + positional_goodness 

其中K1,K2和K3被调整,使其“玩得很好”。

您可能需要查看“逆转/反转逆转 ” 策略指南以了解更复杂的启发式。

在许多棋盘游戏中,通常第一个“n”棋步被预先计算成“开局簿”,这只是一个文件,其中包含所有可能的游戏位置,为每个。

为了生成开场白书,您可以使用与正常玩法相同的启发式方法,而不是在游戏进行时随时进行,而是在第一个“n”中计算所有可能的移动,并将结果存储到您随游戏一起提供的文件。 那么当游戏真的在玩游戏的时候,对于那些第一次“n”动作,而不是运行启发式(如你所说,可能会很慢),而是从早先保存的开始的书中查找预先计算的结果。