如何实现Pentago AI算法

时间:2010-12-30 17:50:55

标签: c# minimax

我正在尝试开发Pentago - c#中的游戏。

现在我有2个玩家模式,工作得很好。

问题是,我想要一个玩家模式(针对计算机),但不幸的是,minimax / negamax的所有工具都针对每个“Move”计算的一个事物“(放置大理石,移动游戏片)。

butin Pentago,每个玩家都需要做两个的事情(放置大理石,并旋转其中一个内板)

我没弄清楚如何实现旋转部件和放大器放置大理石,我希望有人能指导我。

如果你不熟悉游戏,那么游戏就是link

如果有人想要,我可以将我的代码上传到某处,如果相关的话。

非常感谢您提前

2 个答案:

答案 0 :(得分:1)

如果单个合法移动包含两个子移动,那么用于游戏算法目的的“移动”只是一个元组,其中第一个项目是大理石放置,第二个项目是电路板旋转,例如:

var marbleMove = new MarbleMove(fromRow, fromCol, toRow, toCol);
var boardRotation = new BoardRotation(subBoard, rotationDirection);
var move = new Tuple<MarblMove, BoardRotation>(marbleMove, boardRotation);

通常,游戏算法需要您枚举给定位置的所有可能移动。在这种情况下,您必须枚举所有可能的对子移动。有了这个列表,您可以继续使用常备的电脑游戏方法。

答案 1 :(得分:1)

Rick建议使用上面的元组,但是你可能想让每个玩家进行两次独立的移动,所以它依次连续两次。这可以使移动排序更容易,但可能会使您的搜索算法复杂化,具体取决于您使用的是哪一种。

在像UCT这样的算法中(对于简单实现而言可能超过极小极大值),分成两个动作可以更有效,因为算法可以首先弄清楚放置位置是好的,然后找出哪个旋转是最好的。 (谷歌搜索UCT没有给予太多。原始研究论文不是很有见地,但这页可能更好:http://senseis.xmp.net/?UCT

相关问题