java - 在染色体上设置基因限制

标签 java jgap

我目前正在尝试使用 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/

相关文章:

java - 无论如何使用 Java HttpClient 发送自定义方法

java - JGAP Robocode 用户指南

java - 在 java 中包含框架 - IntelliJ

java - 如何使用 JGAP 设置具有非重复等位基因的染色体?

java - 查找重复的单词

java - 当某人实体日期字段与当前日期相比是过去时,如何自动更新实体字段?

java - 使用 SQLiteAssetHelper 写入数据库

java - 在 android 中使用微调器过滤 Listview