【问题标题】:Utility function in minimax game with depth-limit具有深度限制的极小极大游戏中的效用函数
【发布时间】:2021-03-08 00:08:32
【问题描述】:

我正在制作自己的 5 连胜游戏,其中棋盘大于 5x5,尺寸尚未确定,但假设为 10x10。我正在使用极小极大算法和 alfa-beta 修剪来设计它。我已经确定获胜情况的效用函数为:(空位+选择的位置)*5,所以如果计算机发现一个获胜的地方还有2个空位,那么值将是(2+1)*5 = 15。同样的计算失败,但时间是 -5 而不是 5。对于平局,它会评估 0。现在,我写这篇文章的问题是:如何确定未完成场景的实用程序,其中达到深度极限?简单地将其设为 0 还不够好,必须有某种“猜测”或排名。

我的一个想法是计算每一行、每一列和每条可能的对角线中的所有 X,然后做空位置+选择的位置乘以最大找到的 X 序列。问题是计算需要时间并且写起来很痛苦,然后你还必须考虑找到的序列的边缘:它们是否与 O 接壤?我们应该算 X 的空白吗?

这似乎非常复杂,因此我想知道是否有人对未完成的场景有什么好的建议。谢谢!

【问题讨论】:

    标签: java tic-tac-toe minimax


    【解决方案1】:

    我不知道您在第一段中在说什么,一场胜利应该被视为一场胜利(减去深度总能找到最短的胜利)。如果我对您的理解正确,您希望创建一个评估/启发式函数以能够输入板状态并输出该状态的静态分数?五子棋(连续五子棋)是一款流行的游戏,它有许多引擎,谷歌“评估函数五子棋”,你会发现很多关于这个主题的信息和论文。

    对于像国际象棋这样的游戏,评估已经完成,例如通过计算每一方的材料平衡、棋子位置、国王安全等。对于 X-in-a-row,通常的方法是给所有可能的场景打分,然后将它们加在一起。五子棋的场景通常如下:

    • FiveInRow(赢)
    • OpenFour
    • 关闭四
    • OpenThree
    • 关闭三
    • OpenTwo
    • 关闭二

    开放意味着友方棋子旁边没有阻挡敌方棋子:

    OpenThree: -O--XXX---
    闭三:--OXXX---

    如何总结它们,以及给每个场景打多少分,取决于你,这就是乐趣和实验的开始!

    【讨论】:

    • 谢谢你的回答,我对“五子棋”这个名字不熟悉,所以不知道去搜索它!我也通过其他来源的帮助取得了进展,而且我知道究竟应该如何设计这些实用程序功能是一个困难而复杂的问题,所以我真的不期待比这更彻底的答案,并且已经朝着解决方案,并将您的回答标记为解决我的问题,谢谢!
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多