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

📄 operators.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
字号:
package com.lqy.GEP;
import java.util.*;
public class Operators {
	public static Operators instance;
	public static Operators getInstance(){
		return instance==null?new Operators():instance;
	}
	private Operators(){}
	public Chromosome mutate(Chromosome argC,double argD){
		Chromosome tempC=argC.copyChromosome();
		Random tempR=new Random();
		
		int tempIF=argC.getHeadLength();
		int tempIT=argC.getHeadLength()+argC.getTailLength();
		int tempIP=argC.getTotalLength();
		
		for(int i=0;i<argC.getTotalLength();i++){
			if(tempR.nextDouble()<argD){
				String tempS=tempC.getGeneByIndex(i);
				if(i<tempIF)
					tempC.setGeneByIndex(i, this.getRandomFunction(tempC.getFunctionSet(),tempS));
				else if(i<tempIT)
					tempC.setGeneByIndex(i, this.getRandomTerminal(tempC.getTerminalSet(),tempS));
				else tempC.setGeneByIndex(i, this.getRandomParameter(tempC.getCP().length,tempS));    
			}
		}
	//	tempC.construct();
	//	argC.buildEvaluator();
		
		return tempC;
	}
	private String getRandomFunction(String[] argC,String argS){//随机产生一个不同于argS的函数字符串
		Random tempR=new Random();
		//String[] tempS=argC;
		int tempI=tempR.nextInt(argC.length);
		while(argC[tempI].equals(argS)){
			tempI=tempR.nextInt(argC.length);
		}
		return argC[tempI];
	}
	private String getRandomTerminal(String[] argC,String argS){//随机产生不同于argS的终结字符串
		Random tempR=new Random();
		//String[] tempS=argC.getTerminalSet();
		int tempI=tempR.nextInt(argC.length);
		while(argC[tempI].equals(argS)){
			tempI=tempR.nextInt(argC.length);
		}
		return argC[tempI];
	}
	private String getRandomParameter(int argI,String argS){//随机产生不同于argS的常数,返回常数的字符串表示
		/*基因中记录的是参数池的下标
		Random tempR=new Random();
		double[] tempDS=argC.getCP();
		double tempD=Double.parseDouble(argS.trim());
		
		int tempI=tempR.nextInt(tempDS.length);
		while(tempDS[tempI]==tempD){
			tempI=tempR.nextInt(tempDS.length);
		}
		return String.valueOf(tempDS[tempI]);
		*/
		Random tempR=new Random();
		int tempI=Integer.parseInt(argS);//当前下标
	//	int tempCPI=argC.getCP().length;
	//	int tempCPL=argC.getCP().length;//参数池长度
		int tempRI=tempR.nextInt(argI);
		
		while(tempRI==tempI){
			tempRI=tempR.nextInt(argI);
		}
		return String.valueOf(tempRI);
	}
    
	public Chromosome[] onepointCrossover(Chromosome[] argCS,int argI){//argI 交叉位置,0到totallength-1
		//基因复制的位置在argI后面一位
		Chromosome[] tempCS=new Chromosome[]{argCS[0].copyChromosome(),argCS[1].copyChromosome()};
		int tempI=argCS[0].getTotalLength();
		for(int i=argI+1;i<tempI;i++){
			String tempS=tempCS[0].getGeneByIndex(i);
			//System.out.print(tempS+" ");
			tempCS[0].setGeneByIndex(i, tempCS[1].getGeneByIndex(i));
			tempCS[1].setGeneByIndex(i, tempS);
		}
		return tempCS;
	}
	public Chromosome[] twopointCrossvoer(Chromosome[] argCS,int argIA,int argIB){
		int tempIA=argIA;
		int tempIB=argIB;
		if(argIA>argIB){
			tempIA=argIB;
			tempIB=argIA;
		}else{
			tempIA=argIA;
			tempIB=argIB;
		}//tempIA是起始位置,tempIB是终结位置
		Chromosome[] tempCS=new Chromosome[]{argCS[0].copyChromosome(),argCS[1].copyChromosome()};
		
		for(int i=tempIA+1;i<=tempIB;i++){
			String tempS=tempCS[0].getGeneByIndex(i);
			tempCS[0].setGeneByIndex(i, tempCS[1].getGeneByIndex(i));
			tempCS[1].setGeneByIndex(i, tempS);
			
		}
		return tempCS;
	}
	
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -