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;
}
}
如何在 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;
}
}