更好的游戏启发式函数(AI 极小极大算法)

我用Java编写了一个游戏。这个游戏很简单(请参考下图)。游戏中有4只鸟和1只幼虫。这是2人游戏(AI对人)。

enter image description here

  • 幼虫可以向前和向后斜向移动
  • 鸟只能向前斜向移动
  • 如果幼虫能到达第1行(围栏),幼虫获胜
  • 如果鸟没有可移动的步数,幼虫也获胜
  • 鸟不能“吃掉”幼虫
  • 如果幼虫没有可移动的步数(完全无法移动),鸟获胜

enter image description here

游戏开始时,幼虫先移动,然后一只鸟可以移动(任意一只),然后是幼虫,依此类推…


我已经实现了极小极大算法(Alpha-Beta剪枝),并使用了以下evaluate()函数(启发式函数)。

让我们为棋盘上的每个方格赋予以下数字。

enter image description here

因此,我们的评估函数将是

h(n) = 幼虫位置的价值 – 鸟1位置的价值 – 鸟2位置的价值 – 鸟3位置的价值 – 鸟4位置的价值

幼虫会试图最大化启发式值,而鸟会试图最小化它

示例:

enter image description here

然而,这是一个简单且幼稚的启发式函数。它没有以智能的方式行动。我是AI的初学者,我想知道我可以做些什么来改进这个启发式函数?

什么样的启发式函数会更好、更有信息量?


回答:

考虑这样做:

最大化:幼虫

最小化:鸟

H(t)=max_distance(larva,line_8)+Σmin_distance(bird_n,larva)

或者

H(t)=Σmin_distance(bird_n,larva) - min_distance(larva,line_1)

max_distance(larva,line_8):反映幼虫更接近第1行的条件。

Σmin_distance(bird_n,larva):反映鸟更接近幼虫(以阻挡它)的条件。

我相信还有很多其他因素可以考虑,例如,最接近幼虫的鸟应该优先选择移动,但上述函数的方向是有意义的,许多细节可以很容易地进行改进。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注