0

我正在运行一种遗传算法来训练一组猎人来学习捕捉尽可能多的大象。基本上,大约有 20 名猎人在 2D 网格环境中四处走动,并且必须有 4 名猎人围绕大象才能捕捉它(世界上有大约 20 只大象)。每次运行此模拟时,所有猎人和大象都会被放置在随机的起始位置。猎人的运动受其染色体控制,大象的运动是随机的。

所有的 Hunters 都有相同的染色体(同质),所以我每次在为染色体分配适应度时都运行这个模拟。我的适应度函数只是根据模拟中捕获的大象总数奖励染色体:

double fitness = totalElephantsCaptured() * 100;

世代适应度的结果基本是随机的。每一代中最适合的个体不会随着代的发展而变得更适合,并且每一代的总适应度不会增加。我觉得我的适应度函数太原始了,但我不知道如何改变它以产生更好的结果。猎人似乎没有学到任何东西。

关于我的 GA 的详细信息(范围内的数字,因为我尝试了各种值):

  • 人口规模:64 或 128。

  • 世代上限:500 - 1000。

  • 精英主义:5% - 10% 的人口

  • 突变:1% - 4%

  • 染色体大小:180

  • 选择:轮盘赌。

  • 交叉:染色体中间的简单交叉。

染色体是根据传感器数据设计成运动规则的“块”:

每个块都有一个传感器标准(例如“如果最近的大象距离 X 距离”)和一个移动规则(例如“向最近的大象移动 Y 时间”)。猎人可以移动到最近的大象或最近的队友猎人。

有没有人有什么建议可以让猎人的适应度随着世代的增加而逐渐增加?

4

0 回答 0