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

📄 function.java

📁 专家系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.dbhunter.ga;
/**
 * 2008.4.11
 * @author dbhunter
 * @E-mail:dbhunter@126.com
 */
import java.text.DecimalFormat;
import java.util.Vector;
//import java.io.BufferedReader;
//import java.io.StringReader ;
public class Function {
	private int funID;
	private char codeType;
	private int parameterNum;
	private int precision;
	private double maxValue;
	private double minValue;
	private String codeName,selectionName,crossName,genovariationName;
	private StringBuffer sbBestGeneetail;
	private StringBuffer sblastGenes;
	//private BufferedReader br;
	//private StringReader sr;
	/**
	 * @param funID 函数标识
	 * @param codeType 编码类型 b binary, d decimal
	 * @param parameterNum 函数的参数个数
	 * @param precision 要求的精确度
	 * @param maxValue 定义域最大值
	 * @param minValue 定义域最小值
	 */
	public Function(int funID,char codeType,int precision){
		this.funID = funID;
		this.codeType = codeType;
		this.precision = precision;	
		this.sbBestGeneetail = new StringBuffer();
		this.sblastGenes = new StringBuffer();
		//this.br = new BufferedReader(new StringReader(" "));
		switch(funID){
		case 1:
			this.parameterNum =3;
			this.maxValue = 5.12;
			this.minValue = -5.12;	
			break;
		case 2:
			this.parameterNum =2;
			this.maxValue = 2.048;
			this.minValue = -2.048;	
			break;
		case 3:
			this.parameterNum =5;
			this.maxValue = 5.12;
			this.minValue = -5.12;	
			break;
		case 4:
			this.parameterNum =30;
			this.maxValue = 1.28;
			this.minValue =-1.28;
			break;
		case 5:
			this.parameterNum =2;
			this.maxValue = 65.536;
			this.minValue =-65.536;	
			break;
		case 6:
			this.parameterNum =20;
			this.maxValue = 5.12;
			this.minValue =-5.12;	
			break;
		case 7:
			this.parameterNum =10;
			this.maxValue = 500;
			this.minValue =-500;
			break;
		case 8:
			this.parameterNum =10;
			this.maxValue = 600;
			this.minValue =-600;
			break;
			default:break;
		}
	}
	public int getFunID() {
		return funID;
	}
	public void setFunID(int funID) {
		this.funID = funID;
	}
	public double getMaxValue() {
		return maxValue;
	}
	public void setMaxValue(double maxValue) {
		this.maxValue = maxValue;
	}
	public double getMinValue() {
		return minValue;
	}
	public void setMinValue(double minValue) {
		this.minValue = minValue;
	}
	public int getParameterNum() {
		return parameterNum;
	}
	public void setParameterNum(int parameterNum) {
		this.parameterNum = parameterNum;
	}
	public int getPrecision() {
		return precision;
	}
	public void setPrecision(int precision) {
		this.precision = precision;
	}
	public char getCodeType() {
		return codeType;
	}
	public void setCodeType(char codeType) {
		this.codeType = codeType;
	}
/**
 * 2008-4-12
 *author dbhunter
 *Email dbhunter@126.com
 * @param str 要求输入为数字字符串,不可以为字母等其他字符
 * @return
 */
	public int stringToInt(String str){
		return Integer.valueOf(str).intValue();
	}
/**
 * 2008-4-12
 * 计算二进制编码的十进制值
 *author dbhunter
 *Email dbhunter@126.com
 * @param vecBc 输入vector类型的二进制码串
 * @return 对应的十进制数
 */
	public int binaryToDecimal(Vector vecBc){
		int intDec = 0;
		for(int i=0;i<vecBc.size();i++){
			intDec = intDec+(int)(stringToInt(vecBc.elementAt(i).toString())*Math.pow((double)2,(double)(vecBc.size()-1 -i)));	
		}
		return intDec;	
	}
	/**
	 * 2008.4.10
	 * 根据精度和定义域[u,v]计算码长L
	 * 计算方法:
	 * L=(int)floor(log(v-u)/log(2.0))+1
	 * double minValue 定义域的上界
	 * double maxValue 定义域的下界
	 * int precision 要求的精度
	 * 注:log本身返回double型
	 */
	public int getCodeLen(){
		int len=0;
		len = (int)Math.floor(Math.log((this.maxValue-this.minValue)*Math.pow((double)10,(double)this.precision))/Math.log(2))+1;
		return len;
	}
	public Vector getDifferentPartPosition(Vector vca,Vector vcb){
		Vector vc = new Vector();
		for(int i=0;i<vca.size();i++){
			if(!vca.elementAt(i).equals(vcb.elementAt(i))){
				vc.add(i);
			}
		}
		return vc;
	}
/**
 * 2008-4-12
 * 求解对应于定义域上的实数值
 *author dbhunter
 *Email dbhunter@126.com
 * x= u+x'(v-u)/(2^L-1)
 * @param decimalValue 二进制对应的十进制数
 * @return 实数值
 */
	public double getReal(int decimalValue){
		double cr =0;
		int codeLen;
		codeLen = getCodeLen();
		cr = minValue+decimalValue*((this.maxValue-this.minValue)/(Math.pow((double)2,(double)codeLen)-1));
		return cr;
	}
/**
 * 2008-4-12
 * author dbhunter
 * @param number 取double类型数据的小数点后第index位值
 * @param index 位数
 * @return
 */
	public int getNum(double number,int index){
		int num = 0;
		for(int i=0;i<index;i++){
			number = number - (int)number;
			num = (int)(number*(int)Math.pow(10, index))%10;
		}
		return num;	
	}
	/**
	 * 2008-4-13
	 * 返回大于等于某数num的最小素数
	 * author dbhunter
	 * @param num 输入数字
	 * @return 大于等于某数num的最小素数
	 */
	public int minPrimeNum(int num){
		int k,minPrimeNum =num;
		while(true){
			for(k=2;k<minPrimeNum;k++){
				if(minPrimeNum%k==0){
					break;
					}
			}
			if(minPrimeNum==k) {
				return minPrimeNum;
			}
			minPrimeNum++;
		}
	}
	public void primeNum(int Max){
		int rowNum =20;
		int counter=0;
		int j;
		for(int i=2;i<Max;i++){
			for(j=2;j<=i;j++){
				if(i%j==0){
					break;
					}
			}
			if(i==j) {
				System.out.print(i+" ");
				counter++;
				if(counter%rowNum==0){
					System.out.println();
				}
			}		
		}
	}
	public String doubleToString(int precision,double d){
		String str = "0.";
		for(int i=0;i<precision;i++){
			str = str +"0";
		}
		return  new DecimalFormat(str).format(d);
	}
	/**
	 * 2008-4-13
	 * author dbhunter
	 * @param k 某个基因中的第k维
	 * @param p 满足p>=2*t+3 的最小素数 ,t为基因的最大维数
	 * @return 计算出的佳点集r(k)的值
	 */
	public double goodPointFun(int k,int p){	
		return 2*Math.cos((2*Math.PI*k)/p);
	}
	/**
	 * 2008-4-13
	 * author dbhunter
	 * @param d double类型数
	 * @return 数d的小数部分 算法为 如果d>=0 取其小数部分,如果d<0,则取1-|d-(int)d|
	 */
	public double getDecimalPart(double d){
		if(d>=0){
			return d-(int)d;
		}
		else{
			return 1-Math.abs(d-(int)d);
		}
	}

⌨️ 快捷键说明

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