📄 gacore.java
字号:
package net.leonmax.rpsGame.gaEngine;
//import java.io.*;
import java.util.*;
import net.leonmax.rpsGame.GlobalData;
public class GACore {
private ArrayList<Integer> fitnessHistory = new ArrayList<Integer>();
public void launchGA() {
Population.setLength(GlobalData.pop_size);
Population[] p = new Population[GlobalData.pop_num];
RanMachine r = new RanMachine();
int[] oppoSeq = new int[GlobalData.pop_size];
for (int i = 0;i<GlobalData.pop_size;i++){
oppoSeq[i] = r.ranRPS();
}
for (int i = 0; i < GlobalData.pop_num; i++) {
//System.out.println();
//System.out.println("\tpopulation " + (i + 1));
p[i] = new Population();
int j=0;
while (!p[i].isFull())
p[i].addNewSeq(r.ranRPS(), oppoSeq[j++]);
}
this.printAllPop(p);
int fitnessSum = 0;
for (int i = 0; i<p.length;i++){
fitnessSum += p[i].getWinCount();
}
System.out.println();
this.fitnessHistory.add(fitnessSum);
// System.out.println("the start winning proportion is "
// + (double)fitnessSum/(double)(GlobalData.pop_num*GlobalData.pop_size));
for (int i = 0; i < GlobalData.iterTime; i++) {
System.out.println();
System.out.println("Iterate for the "+(i+1)+" time");
p = new Selection().select(p);
//this.printAllPop(p);
p = new Crossover().maskX(p);
//this.printAllPop(p);
p = new Mutation().mutate(p);
//this.printAllPop(p);
fitnessSum = 0;
for (int j = 0; j<p.length;j++){
fitnessSum += p[j].getWinCount();
}
this.fitnessHistory.add(fitnessSum);
}
this.printAllPop(p);
System.out.println();
fitnessSum = 0;
for (int i = 0; i<p.length;i++){
fitnessSum += p[i].getWinCount();
}
ListIterator<Integer> iter = this.fitnessHistory.listIterator();
while(iter.hasNext())
System.out.println("the "+iter.nextIndex()+ " winning proportion is\t"
+ (double)iter.next()/(double)(GlobalData.pop_num*GlobalData.pop_size));
System.out.println("end");
}
public void printAllPop(Population[] p){
for (int i = 0; i < GlobalData.pop_num; i++) {
System.out.println();
System.out.println("\tpopulation " + (i + 1));
p[i].printAllState();
}
//File file = new File("d:\test.txt");
//OutputStream os = new FileOutputStream(file);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -