Machine learning 如何为游戏创建一个好的评价函数?

Machine learning 如何为游戏创建一个好的评价函数?,machine-learning,artificial-intelligence,alpha-beta-pruning,game-theory,evaluation-function,Machine Learning,Artificial Intelligence,Alpha Beta Pruning,Game Theory,Evaluation Function,我有时编写程序来玩棋盘游戏变体。基本策略是标准的alpha-beta剪枝或类似的搜索,有时会通过通常的结束游戏或开场白的方法进行补充。我主要使用国际象棋的变体,所以当选择我的评估函数时,我使用一个基本的国际象棋评估函数 然而,现在我正在写一个程序来玩一个全新的棋盘游戏。我如何选择一个好的甚至像样的评价函数 主要的挑战是,相同的棋子总是在棋盘上,因此通常的物质功能不会因位置而改变,而且游戏已经玩了不到一千次左右,因此人类还不一定玩得足够好,无法提供洞察力。(顺便说一句,我考虑过MoGo方法,但随机

我有时编写程序来玩棋盘游戏变体。基本策略是标准的alpha-beta剪枝或类似的搜索,有时会通过通常的结束游戏或开场白的方法进行补充。我主要使用国际象棋的变体,所以当选择我的评估函数时,我使用一个基本的国际象棋评估函数

然而,现在我正在写一个程序来玩一个全新的棋盘游戏。我如何选择一个好的甚至像样的评价函数

主要的挑战是,相同的棋子总是在棋盘上,因此通常的物质功能不会因位置而改变,而且游戏已经玩了不到一千次左右,因此人类还不一定玩得足够好,无法提供洞察力。(顺便说一句,我考虑过MoGo方法,但随机游戏不太可能终止。)


游戏细节:游戏在10乘10的棋盘上进行,每边固定6块。这些棋子有一定的运动规则,并以一定的方式相互作用,但没有一个棋子被捕捉到。游戏的目标是在棋盘上的某些特殊方块中有足够的棋子。计算机程序的目标是提供一个与当前人类玩家竞争或优于人类玩家的玩家。

我将介绍一种有监督的机器学习算法,如强化学习。退房我想这会给你一些很好的指导

此外,请查看(PDF链接),在这里,给定游戏规则,可以学习良好的“回报函数”。这与

在训练过程中,神经网络 它本身用于为用户选择移动 双方。。。这相当令人惊讶 调查发现,这是一个相当大的数额 学习的过程实际上发生了,甚至 在零初始知识中 利用未加工板进行的实验 编码


你也需要小心你的选择。如果您的算法与实际值之间没有已知的关系,则标准AI函数将无法正常工作。为了有效,您的评估函数或启发式必须与实际值相同,或始终低于实际值,否则它将以一种奇怪的方式指导您的决策(这可能是国际象棋的理由,尽管我认为标准分数很好)

我通常做的是找出什么是有能力的,什么是需要的。对于一些游戏,比如sokoban,我使用了从当前位置到任意目标位置的一个箱子(独立)所需的最少箱子移动次数。对于所需的移动次数,这不是一个准确的答案,但我认为这是一个非常好的启发,因为它永远不会高估,并且可以对整个棋盘进行预先计算。当对一块板的分数求和时,它只是每个当前框位置的值之和

在我为进化狼群狩猎和狼群防御而编写的人工生命模拟中,我使用的评分系统只是用来指导进化,而不是进行任何修剪。我给每个生物一个出生分数。对于他们在生活中消耗的每一点能量,我给了他们一个额外的分数。然后,我用这一代人的点数之和来确定每一代人繁殖的可能性。在我的例子中,我只是使用了他们这一代人获得的总分数的比例。如果我想进化出擅长躲避的生物,我会记下它们被吃掉的分数

你也应该小心你的功能不是太难达到的目标。如果您试图发展某些东西,您需要确保解决方案空间有一个合适的坡度。你想引导进化朝着一个方向发展,而不仅仅是宣布胜利,如果它碰巧随机击中

如果我不了解你的游戏,我将很难告诉你如何构建一个函数。是否有明确的价值观表明某件事是赢还是输?你有没有办法估算一个最小成本来缩小差距

如果你能提供更多的信息,我很乐意尝试提供更多的见解。也有很多关于这个主题的优秀书籍


雅各布

如果还没有人理解这个游戏,你就不可能得到一个合适的评估函数。不要告诉我,对于国际象棋或其变体来说,具有材料计数的标准阿尔法-贝塔是好的,甚至是像样的(也许输家的国际象棋是个例外)

你可以尝试使用带有反馈的神经网络或类似的机器学习算法,但它们通常很糟糕,直到进行了大量的训练,而在这种情况下,这可能是不可用的。即使这样,如果他们不吸,你也无法从他们那里获得知识

我认为你必须尽可能地理解这个游戏,首先,在评估函数中将未知因素作为随机因素(或者在未知因素变得更为清楚之前,将其排除在外)


当然,如果你想分享更多关于游戏的信息,你可以从社区中获得更好的想法。

据我所知,你需要一个好的静态评估函数,用于最小-最大树的叶子。如果是这样的话,最好记住这个静态评估函数的目的是提供一个关于该棋盘对计算机播放器有多好的评级。也是如此

f(董事会1)>f(董事会2)

那么board1比board2更适合计算机(最终获胜的可能性更大),这一定是真的。当然,没有任何静态功能对所有电路板都是完全正确的

所以,你说“游戏的目标是在棋盘上的某些特殊方块中有足够的棋子”,所以第一次尝试f(棋盘)只是计算计算机在这些特殊方块上的棋子数量。然后你可以更巧妙地运用它

如果不知道游戏的细节,就不可能给出更好的猜测。如果你给了我们游戏规则,我相信stackoverflow的用户会有很多原创的想法
  x         -0.01       -1.484   |  -1.485
0.01          x         -1.29    |  -1.483
1.484       1.29          x      |  2.774