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

📄 gaafileinput.java

📁 Java实现的遗传算法工具集:GA Playground
💻 JAVA
字号:
import java.net.*;
import GaaMisc;

public class GaaFileInput extends FileInput {
	int i;
	
	int dataType = -1;
	String dataTips[];
	String dataHelps[];
	
	GaaProblem problem;
	

	public GaaFileInput (GaaProblem pr, URL inputFile, String delim){
		
		super(inputFile,delim);
		
		problem = pr;
		dataTips = new String[recordNumber];
		dataHelps = new String[recordNumber];
		updateParams();
		
	}
	
	
	public void updateParams() {
		
	String s0;
	String s1;
		
		for (i=0;i<recordNumber;i++) {
			s0 = dataFields[i][0];
			s1 = dataFields[i][1];
			if (dataFields[i][0].equals("[Integers]"))
				dataType = 0;
			else if (dataFields[i][0].equals("[Reals]"))
				dataType = 1;
			else if (dataFields[i][0].equals("[Strings]"))
				dataType = 2;
			else if (dataFields[i][0].equals("[Flags]"))
				dataType = 3;
				
			else if (dataFields[i][0].equals("Population Size")) { 
				problem.popSize = Integer.parseInt(dataFields[i][1]);
				dataTypes[i] = dataType;
				dataTips[i] = "Number of elements in the GA population";
				dataHelps[i] = "Suggested range: 10 - 100";
			}
			else
				if (dataFields[i][0].equals("Number of Genes")) {
					problem.genesNumber = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Number of parameters = Chromosome (string) length";
					dataHelps[i] = "In TSP and similar problems: Genes number = Cities number";
				}
			else
				if (dataFields[i][0].equals("Problem Code")) {
					problem.problemCode = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Identification number for the problem for the problem-specific functions";
					dataHelps[i] = "An arbitrary (unique) number";
				}
			else
				if (dataFields[i][0].equals("Map Order")) {
					problem.mapOrder = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Dimension of mapping between allele location and actual parameters values";
					dataHelps[i] = "e.g. in TSP problem Map Order = 2 (each point has an X and a Y)";
				}
			else
				if (dataFields[i][0].equals("Def Order")) {
					problem.defOrder = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enter 1 for automatic constraint definition, 2 for reading constraints from file";
					dataHelps[i] = "Must be either 1 or 2";
				}
			else
				if (dataFields[i][0].equals("GA Type")) {
					problem.gaType = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enter 1 for independent alleles (parameters), 2 for unique alleles";
					dataHelps[i] = "Must be 1 or 2. Type 2 is typical for TSP";
				}
			else
				if (dataFields[i][0].equals("MinMax Type")) {
					problem.minmaxType = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enter 1 for Maximum optimization, 2 for Minimum optimization";
					dataHelps[i] = "Must be 1 or 2";
				}
			else
				if (dataFields[i][0].equals("Stagnation Limit")) {
					problem.stagnationLimit = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Number of non-changing generations before a kick is activated";
					dataHelps[i] = "Enter a large value for stable evolution, a small number for hectic one";
				}
			else
				if (dataFields[i][0].equals("Degrade Limit")) {
					problem.degradeLimit = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Number of degrading generations before a kick is activated";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Survivors Percent")) {
					problem.survivorsPercent = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Percent of best chromosomes to be transferred to next generation";
					dataHelps[i] = "Elitistic mechanism";
				}
			else
				if (dataFields[i][0].equals("Redundancy Factor")) {
					problem.redundancyFactor = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Multiplier factor to create several genes from a single variable";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Crossover Type")) {
					problem.crossoverType = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enter 1 for single point crossover, 2 for two-points crossover";
					dataHelps[i] = "Currently only 1 is implemented";
				}
			else
				if (dataFields[i][0].equals("Mutation Type")) {
					problem.mutationType = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Not implemented";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Selection Type")) {
					problem.selectionType = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Not implemented";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Inversion Type")) {
					problem.inversionType = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Not implemented";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Number of Variables")) {
					problem.variablesNumber = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Number of unique parameters (usually equivalent to number of genes)";
					dataHelps[i] = "Number of genes must be a whole number multiplication of this value";
				}
			else
				if (dataFields[i][0].equals("User Defined Integer")) {
					problem.udfInteger = Integer.parseInt(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "An Integer variable, to be used for any purpose";
					dataHelps[i] = "The extra integer parameter can be used in any function";
				}
				
			else
				if (dataFields[i][0].equals("Crossover Rate")) {
					problem.crossoverRate = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Percent of matings going through crossover";
					dataHelps[i] = "1 = all, 0 = none. Where there is no crossover, the sun is identical to father";
				}
			else
				if (dataFields[i][0].equals("Mutation Rate")) {
					problem.mutationRate = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Per gene mutation frequency";
					dataHelps[i] = "The probability of each (child's) gene to mutate in the mating process";
				}
			else
				if (dataFields[i][0].equals("Inversion Rate")) {
					problem.inversionRate = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Inversion frequency in Kick operation";
					dataHelps[i] = "In inversion part of the chrompsome is inverted";
				}
			else
				if (dataFields[i][0].equals("Shuffle Rate")) {
					problem.shuffleRate = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Shuffling frequency in normal mating operation";
					dataHelps[i] = "Enter a low value for a stable evolution, a high value for a hectic one";
				}
			else
				if (dataFields[i][0].equals("Inversion Shuffle")) {
					problem.inversionShuffle = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Shuffling frequency in Kick operation";
					dataHelps[i] = "Enter a low value for a stable evolution, a high value for a hectic one";
				}
			else
				if (dataFields[i][0].equals("Kick Distribution")) {
					problem.kickDistribution = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Mutation/Inversion factor in Kick operations";
					dataHelps[i] = "Defines the inversion share in the shuffling processes";
				}
				
			else
				if (dataFields[i][0].equals("Min Value")) {
					problem.minVal = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Lowest parameter value (for homogenuous parameters)";
					dataHelps[i] = "Not relevant in TSP and other Type 2 problems";
				}
			else
				if (dataFields[i][0].equals("Max Value")) {
					problem.maxVal = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Highest parameter value (for homogenuous parameters)";
					dataHelps[i] = "Not relevant in TSP and other Type 2 problems";

				}
			else
				if (dataFields[i][0].equals("Step Value")) {
					problem.stepVal = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Parameter step value (for homogenuous parameters)";
					dataHelps[i] = "Not relevant in TSP and other Type 2 problems";
				}
			else
				if (dataFields[i][0].equals("Default Value")) {
					problem.defVal = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Parameter default values (for homogenuous parameters)";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Exit Value")) {
					problem.exitValue = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Object function value at which evolution should stop";
					dataHelps[i] = "Enter an expected or approximate value";
				}
			else
				if (dataFields[i][0].equals("Exit Tolerance")) {
					problem.exitTolerance = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Tolerance on exit value";
					dataHelps[i] = "Defines when a soultion is good enough";
				}
			else
				if (dataFields[i][0].equals("Kin Competition Factor")) {
					problem.kinFactor = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "Factor by which fitness of identical elements is decreased";
					dataHelps[i] = "Enter a low value for a more diverse population";
				}
			else
				if (dataFields[i][0].equals("User Defined Real")) {
					problem.udfDouble = Double.valueOf(dataFields[i][1]).doubleValue();
					dataTypes[i] = dataType;
					dataTips[i] = "A Real variable, to be used for any purpose";
					dataHelps[i] = "The extra real parameter can be used in any function";
				}
				
				
			else
				if (dataFields[i][0].equals("Alleles Def File")) {
					problem.defFileName = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "Name of file containing alleles (constraints) definition";
					dataHelps[i] = "Needed when different paramaters have different constraints";
				}
			else
				if (dataFields[i][0].equals("Alleles Map File")) {
					problem.mapFileName = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "Name of file containing allele mapping values";
					dataHelps[i] = "e.g. Coordinates file for a TSP problem";
				}
			else
				if (dataFields[i][0].equals("Title")) {
					problem.problemTitle = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "A name to identify the problem";
					dataHelps[i] = "";
				}
			else
				if (dataFields[i][0].equals("Description")) {
					problem.problemDescription = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "A short description of the problem";
					dataHelps[i] = "";
				}
			else
				if (dataFields[i][0].equals("Map Delimiter")) {
					problem.mapDelimiter = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "Delimiter character used in the mapping file (Default = <Space>)";
					dataHelps[i] = "The default is , (comma)";
				}
			else
				if (dataFields[i][0].equals("Input String #1")) {
					problem.inputString1 = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "A general purpose input";
					dataHelps[i] = "An extra input variable that can be used for any purpose";
				}
			else
				if (dataFields[i][0].equals("Input String #2")) {
					problem.inputString2 = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "A general purpose input";
					dataHelps[i] = "An extra input variable that can be used for any purpose";
				}
			else
				if (dataFields[i][0].equals("User Defined Expression")) {
					problem.udfExpression = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "A user defined string expression to optimize";
					dataHelps[i] = "The definition of this parameter is best accomplished in the Define Function tab";
				}
			else
				if (dataFields[i][0].equals("User Defined String")) {
					problem.udfString = dataFields[i][1];
					dataTypes[i] = dataType;
					dataTips[i] = "A String variable, to be used for any purpose";
					dataHelps[i] = "The extra string parameter can be used in any function";
				}
				

			else
				if (dataFields[i][0].equals("Status Help")) {
					problem.withStatusHelp = GaaMisc.stringToBoolean(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enable a one-line help in status bar when cursor is over item";
					dataHelps[i] = "If you find the rapidly changing status bar annoying, uncheck this option";
				}
			else
				if (dataFields[i][0].equals("Text Window")) {
					problem.withTextWindow = GaaMisc.stringToBoolean(dataFields[i][1]);
					problem.withStatusText = problem.withTextWindow;
					problem.withGraphicText = problem.withTextWindow;
					dataTypes[i] = dataType;
					dataTips[i] = "Enable continuous reporting in text window during execution";
					dataHelps[i] = "Switching Text Window off increases performance";
				}
			else
				if (dataFields[i][0].equals("Graphic Window")) {
					problem.withGraphicWindow = GaaMisc.stringToBoolean(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enable continuous drawing in graphic window during execution";
					dataHelps[i] = "Switching Graphic Window off increases performance";
				}
			else
				if (dataFields[i][0].equals("Sound")) {
					problem.withSound = GaaMisc.stringToBoolean(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enable sound effects";
					dataHelps[i] = "Not implemented";
				}
			else
				if (dataFields[i][0].equals("Logging")) {
					problem.withLogging = GaaMisc.stringToBoolean(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "Enable continuous output of debug and other information to log window";
					dataHelps[i] = "Switching logging off increases performance";
				}
			else
				if (dataFields[i][0].equals("User Defined Flag")) {
					problem.udfBoolean = GaaMisc.stringToBoolean(dataFields[i][1]);
					dataTypes[i] = dataType;
					dataTips[i] = "A Boolean variable, to be used for any purpose";
					dataHelps[i] = "The extra boolean parameter can be used in any function";
				}
				
		}
		
	}
	
	
	
}		

⌨️ 快捷键说明

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