📄 gaafileinput.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 + -