Java 中遗传算法的均匀交叉

Uniform Crossover for Genetic Algorithms in Java

如何在 Java 中为遗传算法实现统一交叉法?

目前,我正在使用 2 个 ArrayList,它们需要在程序继续运行之前相互连接。以下是我一直使用的方法的开始:

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

我现在所处的位置,我假设我需要制作另外 2 个 ArrayLists,将数据拆分成但我不知道从哪里开始交叉。我会使用新数组大小作为定义键的 for 循环吗?

非常感谢您的帮助。

如果交叉后不需要双亲,则不必创建新的数组列表。只要你的染色体大小相等,这就应该有效

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);
        }
    }
}

你可以使用数组

//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;
       }
    }