Установить предел гена на хромосоме
В настоящее время я экспериментирую с JGAP 3.6, чтобы создать уровни для простой игры с подземельями. Проблема заключается в использовании представления хромосом, где каждый ген содержит целочисленное значение, которое представляет тип комнаты, например, 0 = начальная комната, 1 = комната монстров и так далее.
Проблема в том, что я хочу убедиться, что на уровне есть только одна Стартовая комната (Только один Ген со значением 0 в Хромосоме). Я читал javadocs, в частности класс Chromosome и Gene, но не нашел простого способа сделать это. Я также подумал об использовании пользовательского Gene, но это кажется бесполезным, потому что я полагал, что такого рода "проверка" должна выполняться классом Chromosome, а не классом Gene.
Мой текущий план обхода проблемы - дать большое наказание во время оценки пригодности для хромосом, которая не удовлетворяет указанному условию. Есть мысли, решения, предложения или комментарии? Спасибо
1 ответ
Самый простой способ сделать это - ограничить значения Genes в 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
с более чем геном с его значением, равным нулю.