我正在运行一种遗传算法来训练一组猎人,以学习捕捉尽可能多的大象。基本上,有大约20个猎人在2D网格环境中移动,4个猎人必须围绕大象捕捉它(世界上有大约20只大象)。每次模拟运行时,所有猎人和大象都被放置在随机的起始位置。猎人的运动由其染色体控制,大象的运动是随机的。
所有猎人都有相同的染色体(同质),因此我每次在为染色体分配适应性时运行此模拟。 我的健身功能只是简单地奖励染色体中模拟中捕获的大象总数:
double fitness = totalElephantsCaptured() * 100;
世代的适应性结果基本上是随机的。随着世代的进步,每一代人中最适合的个体并不会变得更加健康,每一代人的总体适应度不会增加。我觉得我的健身功能太原始了,但我不知道如何改变它以产生更好的效果。猎人似乎并没有学到任何东西。
我的GA的详细信息(范围内的数字,因为我尝试了各种值):
人口规模:64或128。
代数上限:500 - 1000。
精英主义:5% - 10%的人口
突变:1% - 4%
染色体大小:180
选择:轮盘赌。
Crossover:染色体中间的简单交叉。
染色体是根据传感器数据在运动规则的“块”中设计的:
每个块具有传感器标准(例如“如果最近的大象是X距离”)和移动规则(例如“在Y量的时间内向最近的大象移动”)。猎人可以移向最近的大象或最近的队友亨特。
有没有人有任何建议让猎人的健康随着几代人的增加逐渐增加?