作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在尝试使用 JGAP 3.6 为简单的地牢游戏生成关卡。该问题涉及使用染色体表示,其中每个基因包含一个表示房间类型的整数值,例如 0 = 起始房间,1 = 怪物房间,等等。
问题是,我想确保一个关卡中只有一个起始房间(染色体中只有一个值为 0 的基因)。我读过 javadocs特别是 Chromosome 和 Gene 类,但还没有找到直接的方法来做到这一点。我也考虑过使用定制的 Gene,但它似乎没用,因为我认为这种“验证”需要由 Chromosome 类而不是 Gene 类完成。
我目前针对该问题的解决方案是在对不满足上述条件的染色体进行适应性评估期间给予大量惩罚。有什么想法、解决方案、建议或意见吗?谢谢
最佳答案
最简单的方法是限制 Configuration
设置中的 Genes 值。
第一个基因中只有一个起始空间的基本示例可能是:
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。
关于java - 在染色体上设置基因限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579340/
我已经开始尝试使用 Jenetics 库,但是我在尝试制作一组非常简单的“自定义”基因/染色体时遇到了一些问题。我试图做的是创建一个自定义染色体,其中包含不同(随机)数量的自定义基因。为了简单起见
我是一名优秀的程序员,十分优秀!