由于你已经在使用有限状态机,可以尝试查看 KB-NEAT。
这是一种神经进化技术;也就是说,通过演化来创建神经网络。
同时也要看一下 rtNEAT,可能会很有用。普通的NEAT实现采用代际方法,也就是运行一些游戏,比如一百个,选择最好的候选人并从中创建后代。(其他提到了适应度;这总是在进化方法中使用的,在这里也是)rtNEAT允许进化在实时进行;也就是在玩游戏的同时。(这需要更复杂的适应度计算,因为它发生在游戏进行时,而你仍然不知道结果)
实现其实并不难,但这种技术的关键在于遗传历史,这对进化过程至关重要。(这也是与先前的神经进化尝试相比,这种技术如此惊人的原因之一;问题在于输入和输出必须相同,而这可能并不是情况)
噢,你的问题可以通过更高层次的规划者来解决,或者单位们自己学会解决。如果输入包括最近的友方单位和障碍物,则可以通过正确的适应性学习到时钟管道是有害的。这被称为新兴行为,并且已经证明上述技术能够自主地演化出这种行为。
这里有一个我认为非常好的实现,可以作为你工作的基础;
http://nn.cs.utexas.edu/?windowsneat
上面使用了一些技术,但我没有看到实现rtNEAT的例子。不过你可以参考约翰·荷兰的书籍《自然和人工系统中的适应性》。诚然,这本书可能比较难读,因为它涉及很多数学知识。但是你可以跳过大部分内容,关注算法提议部分。那部分内容适用于所有进化算法,其中神经进化是一个子领域。它有一个算法通常就是rtNEAT所使用的。如果你对遗传学不熟悉(这在进化算法中使用),那么它还定义了基因、等位基因、染色体、表型和基因组的概念,这些概念在NEAT的出版物中会用到;NEAT使用基因组来描述事物,它只是一组描述表型的染色体集合,由于编码方式比遗传算法和遗传编程更复杂,因此需要这样的描述。
该技术的主页在这里。
http://www.cs.ucf.edu/~kstanley/neat.html
这是按时间顺序排列的出版物;
http://nn.cs.utexas.edu/keyword?stanley:ec02
http://nn.cs.utexas.edu/keyword?stanley:ieeetec05
http://nn.cs.utexas.edu/?kbneat
(KB-NEAT已在上述出版物中使用rtNEAT)
关键是你可以基本上将你所拥有的东西放入神经进化技术中,并从中演化。这是领域特定AI和机器学习AI之间的混合。
哦,还有一点; 进化部分需要处理器强度,至少没有rtNEAT。 rtNEAT则需要时间强度,因为您需要在它学习之前与其进行大量对抗。(KB-NEAT显然给了它一个智能基础)但是,当进化完成时,它非常快,因为神经网络的响应计算非常快速。(它是一个相当小的图形,没有涉及搜索)
哦,第二件事; 您需要认真考虑输入和输出。输出可能很容易,因为这是游戏允许您的单位执行的操作。但是输入是您希望他们看到的内容,您不能包含所有内容; 这会使问题在现实时间内难以解决。 (尽管理论上它将在无限时间内收敛于最优解)
哦,还有第三个注意事项; 您可以为单位进化多个大脑,甚至可以为每种单位类型拥有不同的大脑。天空是极限。也许您想要为自己或敌人的每个技术级别都配备一个大脑。当然,这需要额外的时间来进化,但大脑在内存中很小,所以数量不是问题。
啊,还有第四个注意事项; 这是一种黑盒技术。我恐怕无法将大脑转换回FSM。神经网络中的编码不可理解,因此无法知道其确切工作原理。因此,存在这样的危险,即您可能会得到自己喜欢的东西,但您无法理解为什么。而且您不能轻松地与其他代理共享该知识。(尽管您当然可以将其用作为它们进化新行为的基础)