现在,每个遗传C#库(A.Forge,Genetic Algorithm Framework,GeneticSharp)似乎只评估一个染色体,然后使用各种选择方法之一来创建新一代.
由于我的问题涉及到两个认知相互作用,所以单独评估自己的健身状况有点困难.虽然游戏很简单,可以创建一些表面的障碍(AI不直接交互,但障碍被发送给每个其他游戏),这将允许我获得一些抽象的健身,但这不会是“真正的”交易.
图书馆也似乎没有提供另一个接口,我可以实现这样的评估方法.是否有其他框架允许这个或者我需要从头开始?
解决方法
每个遗传算法库应该有一些方法来定义一个适合度函数,这是真正的你正在寻找的. AForge.NET公开了
IFitnessFunction界面. GeneticSharp公开了
IFitness界面.是的,您必须自己编写健身功能 – 这是您的问题区域唯一的部分.你可以使它像你想要的那样简单或复杂.
在每个染色体通过适应度功能并分配一个分数后,系统使用您喜欢的任何选择标准(锦标赛,轮盘赌等)来选择通过交叉和/或突变进入下一代的染色体.
所以而不是像这样流程:
>匹配当代染色体
每条染色体对都发生一轮
获奖者创造下一代
遗传算法的工作原理如下:
每个染色体都发生一轮并得分
>选择算法使用该分数来挑选总体获胜者
获奖者创造下一代
实质上,每个染色体已经与其他染色体竞争,只比您更抽象一步,我会玩一个游戏.
您可能会采用健身功能,将当前人口中随机的其他成员作为对手.更好的是使用上一代最好的染色体作为整个当代的对手.
分配点到您的染色体进一步进行游戏和奖励积分为对手产生障碍(如果这是独特的动作,与游戏中的正常游戏分开).返回染色体的最终得分作为适应度函数输出.