4

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

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

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

4

1 回答 1

1

最简单的方法是限制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超过 Gene 的值等于 0 的 Gene。

于 2016-04-20T10:21:01.323 回答