Java中遗传算法的统一交叉

时间:2017-03-11 15:18:17

标签: java algorithm computer-science genetic-algorithm

如何在Java中为遗传算法实现Uniform Crossover方法?

目前,我正在使用2个需要在程序继续之前互连的ArrayLists。以下是我一直使用的方法的开始:

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

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

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果你在交叉之后不需要父母,你就不必制作新的阵列表。只要您的染色体大小相同,这应该可以正常工作

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

答案 1 :(得分:0)

您可以使用数组

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