Bagaimana saya menerapkan metode Uniform Crossover di Java untuk Algoritma Genetika?

Saat ini, saya menggunakan 2 ArrayLists yang perlu saling berhubungan sebelum program dilanjutkan. Di bawah ini adalah awal dari metode yang saya gunakan:

private void UniformCrossOver(int ListOne,int ListTwo)
{
...
}

Di mana saya berdiri saat ini, saya berasumsi bahwa saya perlu membuat 2 ArrayLists lain yang akan membagi data menjadi tetapi saya tidak tahu harus mulai dari mana dengan crossover. Apakah saya akan menggunakan for loop dengan ukuran array baru sebagai kunci penentu?

Bantuan Anda akan sangat dihargai.

1
Kieron McAuley-Kinchin 11 Maret 2017, 18:18

2 jawaban

Jawaban Terbaik

Anda tidak perlu membuat daftar array baru jika Anda tidak membutuhkan parent setelah crossover. Ini akan berfungsi selama kromosom Anda berukuran sama

public void uniformCrossover(ArrayList<Integer> a, ArrayList<Integer> b){
    for (int i = 0; i <a.size(); i++) {
        if(Math.random() < crossoverProbability){
            int tmp = a.get(i);
            a.set(i, b.get(i));
            b.set(i, tmp);
        }
    }
}
0
Michael Dz 11 April 2017, 13:01

Anda dapat membuatnya menggunakan array

//Some example chromosomes
int[] chromosomeA = {1, 1, 0, 1};
Int[] chromosomeB = {1, 0, 0, 0};

    for(int i = 0; i < chromosomeA.length; i++){
       int a = chromosomeA[i];
       if(new Random().nextInt(2) == 0){
         chromosomeA[i] = chromosomeB[i];
         chromosomeB[i] = a;
       }
    }
0
user5956963user5956963 24 Mei 2017, 09:17