如何在Java中为遗传算法实现Uniform Crossover方法?
目前,我正在使用2个需要在程序继续之前互连的ArrayLists。以下是我一直使用的方法的开始:
private void UniformCrossOver(int ListOne,int ListTwo)
{
...
}
我现在所处的位置,我假设我需要制作另外两个数据列表,这些数据将被拆分,但我不知道从哪里开始交叉。我会使用一个for循环,新数组的大小是定义键吗?
非常感谢您的帮助。
答案 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;
}
}