我目前正在试验的JGAP 3.6为一个简单的地牢游戏生成水平。这个问题涉及到使用染色体表示法,其中每个基因包含一个整数值,它表示房间的类型,例如0=起始室,1=怪物室,等等。
问题是,我想确保在一个水平上只有一个起始空间(在一个染色体中只有一个0的基因)。我读过javadocs,特别是染色体和基因类,但没有找到直接的方法来做到这一点。我也考虑过使用定制的基因,但这似乎是无用的,因为我认为这种“验证”需要由染色体类而不是基因类来完成。
我目前对这个问题的解决方案是在对不满足上述条件的染色体进行健康评估时给予很大的惩罚。有什么想法、解决方案、建议或评论吗?谢谢
发布于 2016-04-20 10:21:01
最简单的方法是限制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的值大于等于零的一个基因对其进行惩罚。
https://stackoverflow.com/questions/29579340
复制相似问题