更好的游戏启发式函数(AI Minimax)
Better Heuristic function for a game (AI Minimax)
我在 java 中编写了一个游戏。游戏很简单(参考下图)。有4只鸟和1只幼虫。这是一款 2 人游戏(AI vs Human)。
- 幼虫可以斜向前和斜向后移动
- 鸟只能沿对角线向前移动
- 如果幼虫能到达第 1 行(围栏),则获胜
- 如果小鸟没有剩余动作,幼虫也会获胜
- 鸟类不能"eat"幼虫。
- 如果幼虫没有向左移动(根本不能移动),则鸟类获胜
游戏开始时,幼虫开始,然后一只鸟可以移动(任何一只),然后是幼虫,等等...
我已经实现了 MiniMax(Alpha Beta 剪枝)并且我正在使用以下 evaluate() 函数(启发式函数)。
让我们为棋盘上的每个方块指定以下数字。
因此,我们的评价函数将是
h(n)=幼虫位置值-鸟1位置值-鸟2位置值-鸟3位置值-鸟4位置值
幼虫将尝试最大化启发值,而鸟类将尝试最小化它
示例:
但是,这是一种简单而幼稚的启发式方法。它的行为并不聪明。我是 AI 的初学者,我想知道我可以做些什么来改进这种启发式功能?
什么是 good/informed 启发式?
这个怎么样:
最大:幼虫
最少:鸟
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):反映鸟类离幼虫较近(挡住它)的情况。
我相信还有很多东西可以考虑,比如离幼虫最近的鸟应该优先选择移动,但是上面函数的方向是有道理的,很多细节可以认为可以轻松改进它。
你可以考虑到当幼虫在板的两侧时鸟类比幼虫有位置优势,所以如果幼虫是 MAX 则将板的侧面图块值更改为更小.
有 1 种简单的方法可以显着改进您的启发式算法。在您当前的启发式算法中,方块 A1 的值比方块 A8 的值小 8。这使得小鸟倾向于向游戏板的左侧移动,因为向左移动总是比向右移动更高。这是准确的。第 1 行的所有方块应具有相同的值。因此,将第 1 行的所有方块分配为 1,第 2 行的所有方块分配为 2,等等。这样,鸟类和幼虫就不会倾向于向左移动,而是可以专注于做出好的移动。
我在 java 中编写了一个游戏。游戏很简单(参考下图)。有4只鸟和1只幼虫。这是一款 2 人游戏(AI vs Human)。
- 幼虫可以斜向前和斜向后移动
- 鸟只能沿对角线向前移动
- 如果幼虫能到达第 1 行(围栏),则获胜
- 如果小鸟没有剩余动作,幼虫也会获胜
- 鸟类不能"eat"幼虫。
- 如果幼虫没有向左移动(根本不能移动),则鸟类获胜
游戏开始时,幼虫开始,然后一只鸟可以移动(任何一只),然后是幼虫,等等...
我已经实现了 MiniMax(Alpha Beta 剪枝)并且我正在使用以下 evaluate() 函数(启发式函数)。
让我们为棋盘上的每个方块指定以下数字。
因此,我们的评价函数将是
h(n)=幼虫位置值-鸟1位置值-鸟2位置值-鸟3位置值-鸟4位置值
幼虫将尝试最大化启发值,而鸟类将尝试最小化它
示例:
但是,这是一种简单而幼稚的启发式方法。它的行为并不聪明。我是 AI 的初学者,我想知道我可以做些什么来改进这种启发式功能?
什么是 good/informed 启发式?
这个怎么样:
最大:幼虫
最少:鸟
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):反映鸟类离幼虫较近(挡住它)的情况。
我相信还有很多东西可以考虑,比如离幼虫最近的鸟应该优先选择移动,但是上面函数的方向是有道理的,很多细节可以认为可以轻松改进它。
你可以考虑到当幼虫在板的两侧时鸟类比幼虫有位置优势,所以如果幼虫是 MAX 则将板的侧面图块值更改为更小.
有 1 种简单的方法可以显着改进您的启发式算法。在您当前的启发式算法中,方块 A1 的值比方块 A8 的值小 8。这使得小鸟倾向于向游戏板的左侧移动,因为向左移动总是比向右移动更高。这是准确的。第 1 行的所有方块应具有相同的值。因此,将第 1 行的所有方块分配为 1,第 2 行的所有方块分配为 2,等等。这样,鸟类和幼虫就不会倾向于向左移动,而是可以专注于做出好的移动。