在染色体上设置基因限制

Set a Gene limit on a Chromosome

我目前正在尝试使用 JGAP 3.6 为简单的地牢游戏生成关卡。该问题涉及使用染色体表示,其中每个基因包含一个表示房间类型的整数值,例如 0 = 起始房间,1 = 怪物房间,等等。

问题是,我想确保一个关卡中只有一个起始房间(染色体中只有一个值为0的基因)。我已经阅读了 javadocs,特别是染色体和基因 class,但没有找到直接的方法来做到这一点。我也考虑过使用定制基因,但它似乎没用,因为我认为这种 'validation' 需要由染色体 class 而不是基因 class.

我目前针对该问题的解决方案是在对不满足上述条件的染色体进行适应性评估期间给予大量惩罚。有什么想法、解决方案、建议或意见吗?谢谢

最简单的方法是在 Configuration 设置中限制基因值。

第一个基因中只有一个起始空间的基本示例可能是:

sampleGenes[0] = new IntegerGene(conf, 0, 0);  // Starting room
sampleGenes[1] = new IntegerGene(conf, 1, 5);  // Monster room 1
sampleGenes[2] = new IntegerGene(conf, 1, 5);  // Monster room 2
sampleGenes[3] = new IntegerGene(conf, 1, 5);  // Monster room 3

这确保您只会获得一个值为 0 的基因,但也有其局限性。您必须决定哪个基因将成为起始房间,并且无法撤消。

另一种方法是按照您的建议进行操作。创建一个 FitnessFunction 来惩罚 Chromosomes 超过一个值为零的基因。