【问题标题】:How to create an evaluation function for a TIC-TAC-TOE variant game [closed]如何为 TIC-TAC-TOE 变体游戏创建评估函数 [关闭]
【发布时间】:2014-01-19 06:34:51
【问题描述】:

我实际上正在开发一款棋盘游戏,它是TIC-TAC-TOE 游戏的变体。游戏的具体内容如下:

1. 游戏在nxn 棋盘上进行,带有n 变量。

2.如果玩家成功将k 对齐放在第一位,则玩家获胜,k 是可变的。

3. 对齐由水平、垂直或对角线的l 标记(XO)组成。 l 已修复。

4. 如果nxn 网格已满(没有玩家可以添加标记 XO)并且没有玩家成功放置 k 对齐,因此游戏被绘制。

我正在使用 minmaxalpha-beta prunning 算法。这是我的第一个人工智能程序,我不知道如何创建算法使用的评估函数。我在网上看到了一些使用材料加权来评估位置的示例,但我无法在我的情况下应用它。实际上,我使用的是随机评估函数,它返回一个介于 -100100 之间的值。

    float Conf_eval(Configuration c)
       {
         return (rand()%201)-100;
       }

知道如何评估给定的电路板配置吗?

【问题讨论】:

  • 在很难找到好的启发式算法的游戏中,蒙特卡洛方法似乎效果最好(在棋盘游戏 GO 中取得了巨大成功)。

标签: artificial-intelligence minmax evaluation-function


【解决方案1】:

这在书Artificial Intelligence - A Modern Approach中有详细讨论

也有优秀的implementations可用(这是java,也有python,你可以谷歌更多)基于本书系列。包括井字游戏(和 alpha-beta 修剪剂)。

如果您将min-max algorithmalpha-beta prunning 一起使用,除了启发式函数(一个简单的实用程序-函数将是将 1 分配给胜利,将 0 分配给平局,将 -1 分配给失败 - 这些都是最小-最大扩展树的叶节点。

要对动作进行排序,您可以选择将符号(XO)添加到通向胜利路径的动作。这最终应该会导致更好的修剪。

【讨论】:

  • 排序的“操作”列表是什么意思?
  • 最小-最大算法是基于动作的。你对一个状态应用一个动作,结果是一个新的状态。如果您将“可用操作”列表按您认为产生最佳结果的方式排序 - 您可以通过更快地获得每个玩家的“好”结果来进行更好的修剪(也就是说,如果您是对的)。
  • 感谢您的链接。我开始构建一个线性评估函数。
  • 祝你好运,我不能说我是专家,你可能有更好的运气在这里提问:cstheory.stackexchange.com
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多