4

現在、単純なダンジョン ゲームのレベルを生成するために JGAP 3.6 を試しています。問題は、各遺伝子が部屋のタイプを表す整数値を含む染色体表現を使用することです。たとえば、0 = 開始部屋、1 = モンスター部屋などです。

問題は、レベルに開始部屋が1つしかないことを確認したいことです(染色体で値が0の遺伝子は1つだけです)。javadocs 、具体的には Chromosome および Gene クラスを読みましたが、これを行う簡単な方法は見つかりませんでした。カスタムメイドの Gene を使用することも検討しましたが、この種の「検証」は Gene クラスではなく Chromosome クラスで行う必要があると考えたため、役に立たないようです。

この問題に対する私の現在の回避策は、条件を満たさない染色体の適合性評価中に大きなペナルティを与えることです。考え、解決策、提案、またはコメントはありますか? ありがとうございました

4

1 に答える 1

1

最も簡単な方法は、Configurationセットアップで遺伝子の値を制限することです。

最初の遺伝子に開始部屋が 1 つだけある基本的な例は次のとおりです。

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 の遺伝子を 1 つだけ取得できますが、制限があります。どの遺伝子が最初の部屋になるかを決める必要があり、元に戻すことはできません。

もう1つの方法は、あなたが提案したことをすることです。値が 0 の Gene よりも多くFitnessFunctionの にペナルティを課す を作成します。Chromosomes

于 2016-04-20T10:21:01.323 に答える