Javaの均一なクロスオーバー
-
26-10-2019 - |
質問
Javaで均一なクロスオーバーを実装するのに苦労しています。これがアルゴリズムです。
// Uniform Crossover
public void UniformCrossover(Individual indi) {
if (RVGA.rand.nextDouble() < pc) {
// Put your implementation of uniform crossover here
// For each gene create a random number in [0, 1].
// If the number is less than 0.5, swap the gene values in
// the parents for this gene; other wise, no swapping .
}
自分ができるということがわかっている int tmp
そして、乱数を保存します if tmp < 0.5
ループを続けます
私はどうにかして助けてくれませんでした!
これは私の1つのポイントクロスオーバーの例であるため、私の形式を知っています。
クロスオーバー1つのクロスオーバーポイントが選択され、染色体の開始からクロスオーバーポイントまでのバイナリ文字列が1つの親からコピーされ、残りは2番目の親からコピーされます。
親1 =染色体と親2 = indi。
私は両親を子供たちに変えています
public void onePointCrossover(Individual indi) {
if (SGA.rand.nextDouble() < pc) {
int xoverpoint = SGA.rand.nextInt(length);
int tmp;
for (int i=xoverpoint; i<length; i++){
tmp = chromosome[i];
chromosome[i] = indi.chromosome[i];
indi.chromosome[i] = tmp;
}
}
}
解決
均一なクロスオーバーを使用すると、一般的にやりたいことは次のとおりです。
For each gene
if rand()<0.5
take from parent a
else
take from parent b
あなたは、あなたの一点の例から、両方の親を同時に変更しているように思われます。その場合:
For each gene
if rand()<0.5
leave both parents alone
else
swap chromosome[i] with indi.chromosome[i] as before
所属していません StackOverflow