我正在尝试使用JGAP 3.6为简单的地下城游戏生成关卡。问题涉及使用染色体表示,其中每个基因包含一个整数值,表示房间的类型,例如0 =起始房间,1 =怪物房间,等等。
问题是,我想确保一个级别中只有一个起始室(在染色体中只有一个值为0的基因)。我已经阅读了javadocs特别是Chromosome和Gene类,但没有找到直接的方法来做到这一点。我也考虑过使用定制的Gene,但它似乎没用,因为我认为这种“验证”需要由Chromosome类而不是Gene类完成。
我目前解决问题的方法是在不符合上述条件的染色体适应性评估期间给予大量惩罚。有什么想法,解决方案,建议或评论吗?谢谢
答案 0 :(得分:1)
最简单的方法是在Configuration
设置中限制基因值。
在第一个基因中只有一个起始室的basig示例可能是:
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
,使其超过基因,其值等于零。