crossover.java
来自「java实现的遗传算法RPS」· Java 代码 · 共 61 行
JAVA
61 行
package net.leonmax.rpsGame.gaEngine;
import java.util.ArrayList;
import java.util.Random;
import net.leonmax.rpsGame.GlobalData;
public class Crossover {
Population[] maskX(Population[] p) {
Population[][] newP = new Population[GlobalData.pop_num / 2][2];
ArrayList<Integer> mateGen = new ArrayList<Integer>();
Random rand = new Random();
for (int i = 0; i < GlobalData.pop_num; i++) {
mateGen.add(new Integer(i));
}
int temp;
for (int i = 0; i < GlobalData.pop_num / 2; i++) {
int mate = rand.nextInt(GlobalData.pop_num - i * 2);
temp = mateGen.get(mate);
newP[i][0] = p[temp];
mateGen.remove(mate);
mate = rand.nextInt(GlobalData.pop_num - i * 2 - 1);
temp = mateGen.get(mate);
newP[i][1] = p[temp];
mateGen.remove(mate);
}
// parents crossover in pairs
p = new Population[GlobalData.pop_num];
for (int i = 0; i < GlobalData.pop_num / 2; i++) {
p[i*2] = new Population();
p[i*2+1] = new Population();
// TODO display
//System.out.println();
System.out.print("Crossover Mask "+i+ " is:\t");
for (int j = 0; j < GlobalData.pop_size; j++) {
boolean xMask = rand.nextBoolean();
if (xMask) {
// TODO display
System.out.print(1);
p[i * 2].addNewSeq(newP[i][0].getGaSeq(j), newP[i][0]
.getOppoSeq(j));
p[i * 2 + 1].addNewSeq(newP[i][1].getGaSeq(j), newP[i][1]
.getOppoSeq(j));
} else {
// TODO display
System.out.print(0);
p[i * 2].addNewSeq(newP[i][1].getGaSeq(j), newP[i][1]
.getOppoSeq(j));
p[i * 2 + 1].addNewSeq(newP[i][0].getGaSeq(j), newP[i][0]
.getOppoSeq(j));
}
}
// TODO display
System.out.println();
//System.out.println();
}
return p;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?