用已知队列优化对战游戏的算法
我正在尝试用C#.NET为称为Flowerz的游戏编写求解器。作为参考,您可以在MSN上播放它,请访问:http: //zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz。我在写它只是为了好玩,而不是为了任何类型的作业或任何与工作相关的事情。因此,唯一的限制是我的计算机(具有8GB RAM的Intel i7内核)。就我而言,它不需要在其他任何地方运行。 简而言之,其规则如下: 有一个装满彩色花朵的队列。它的长度是任意的 队列不受影响 队列在级别开始时生成 花有一种或两种颜色。 如果有两种颜色,则有外部颜色和内部颜色。在两种颜色的情况下,外部颜色用于匹配。 如果匹配,则外部颜色消失,花朵现在是与内部花朵颜色相同的单色花朵 游戏的目标是创建三个(或更多)相同颜色的比赛 当单色的花朵是火柴的一部分时,它会从运动场上移开,从而创建一个空白空间 您可以将单色花朵与双色花朵的外部颜色进行匹配。在这种情况下,单色花消失,两色花的外部颜色消失而内部颜色保留 当队列为空且剩余至少一个空白处时,您将赢得回合 级联匹配是可能的。级联是指三朵(或更多)外花消失,而它们的内在颜色又形成了三朵(或更多花)链。 比赛场地始终是7x7 田野上的一些空间被岩石覆盖 你不能在岩石上放花 队列还可以包含一个小铲,您可以使用该小铲将任何放置的花朵移至空闲空间 您必须使用铁锹,但实际上不必移动花:将花从原位放回原处是完全合法的 队列中还可以包含彩色蝴蝶。当您在花朵上使用这只蝴蝶时,花朵会得到蝴蝶的颜色 将蝴蝶应用于具有两种颜色的花朵,导致花朵仅获得一种颜色,即蝴蝶的颜色 您可以将蝴蝶浪费在已经有这种颜色的空白处或花朵上 清除场地并不能赢得比赛 求解器的目标很简单:找到一种清空队列的方法,在运动场上保留尽可能多的剩余空间。基本上,人工智能为我玩游戏。求解器的输出是包含找到的移动的列表。我对得分不感兴趣,但对生存时间越长越感兴趣,因此我对留下尽可能多的空地的动作感兴趣。 不用说,队列越大,搜索空间就会迅速增长,因此就不会有暴力行为了。如果我没记错的话,队列从15开始,每两到三个级别以5增长。而且,当然,将第一朵花放在(0,0)上并将第二朵花放在(0,1)与将第一朵花放在(1,0)和第二朵花(0,0)上是不同的,尤其是当早先的一轮花已经充满了田野。这样简单的决定可能会有所不同。 我的问题如下: 这是什么问题?(请考虑旅行推销员,背包或其他组合问题)。知道这一点可以使我的Google-fu更好。 哪种算法可以快速给我带来良好的效果? 关于后者:最初,我尝试编写自己的启发式算法(基本上:如果我知道队列,该如何解决?),但这会导致很多边缘情况和得分匹配,而我可能会错过这种情况。 我当时在考虑使用遗传算法(因为我至少知道如何使用它...),但是在确定板的二进制表示时遇到了一些问题。然后是交叉问题,但是可以使用有序交叉算子或类似类型的操作来解决。 我的猜测是,求解器必须始终知道电路板配置和它要清空的队列。 我知道其他一些启发式算法,例如神经网络和模糊逻辑系统,但是我缺乏经验,无法知道哪种算法最适用,或者是否还有其他算法更适合手头的任务。