⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gacore.java

📁 java实现的遗传算法RPS
💻 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 + -