Added simple initialization range interface (req. change of IndividualInterface); added MutateGAUniform;
This commit is contained in:
parent
bac6beb204
commit
126a1780f3
@ -1,8 +1,9 @@
|
||||
function int = JEInterface(fhandle, range, varargin)
|
||||
% EvA2 Interface for Matlab
|
||||
% JEInterface(fhandle, range)
|
||||
% JEInterface(fhandle, range, defaultargs)
|
||||
% JEInterface(fhandle, range, defaultargs, options...)
|
||||
% JEInterface(fhandle, range, initRange)
|
||||
% JEInterface(fhandle, range, initRange, defaultargs)
|
||||
% JEInterface(fhandle, range, initRange, defaultargs, options...)
|
||||
%
|
||||
% Arguments:
|
||||
% fhandle: a function handle defining the optimization target.
|
||||
@ -43,6 +44,7 @@ int.resultArr = [];
|
||||
int.f = '';
|
||||
int.dim = 0;
|
||||
int.range = [];
|
||||
int.initialRange=[];
|
||||
int.mp = [];
|
||||
int.msg = '';
|
||||
int.funCalls = 0;
|
||||
@ -78,21 +80,42 @@ int = class(int,'JEInterface');
|
||||
int.opts = makeOptions(int);
|
||||
|
||||
if (nargin>2)
|
||||
int.args = varargin{1};
|
||||
disp('Fitness function argument: '); disp(int.args);
|
||||
if (nargin > 3)
|
||||
if (rem(nargin,2)==0)
|
||||
error('Invalid number of arguments!');
|
||||
int.initialRange=varargin{1};
|
||||
|
||||
if (isa(varargin{1}, 'double') && (size(varargin{1},1) == 2))
|
||||
if (int.dim ~= size(varargin{1},2))
|
||||
error('Invalid initial range: wrong dimensions');
|
||||
end
|
||||
disp('Reading options:');
|
||||
for i=2:2:nargin-2
|
||||
int=setOpt(int, varargin{i}, varargin{i+1});
|
||||
int.initialRange=transpose(varargin{1});
|
||||
s = ['Double valued initial search space: ' mat2str(int.initialRange)];
|
||||
disp(s);
|
||||
end
|
||||
|
||||
if (nargin>3)
|
||||
int.args = varargin{2};
|
||||
disp('Fitness function argument: '); disp(int.args);
|
||||
if (nargin > 4)
|
||||
if (rem(nargin,2)==1)
|
||||
error('Invalid number of arguments!');
|
||||
end
|
||||
disp('Reading options:');
|
||||
for i=3:2:nargin-2
|
||||
int=setOpt(int, varargin{i}, varargin{i+1});
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
display(getOptions(int));
|
||||
% finally create the java object
|
||||
int.mp = eva2.server.go.problems.MatlabProblem(int.dim, int.range);
|
||||
if (isempty(int.initialRange))
|
||||
int.mp = eva2.server.go.problems.MatlabProblem(int.dim, int.range);
|
||||
else
|
||||
if (eq(size(int.range), size(int.initialRange)))
|
||||
int.mp = eva2.server.go.problems.MatlabProblem(int.dim, int.range, int.initialRange);
|
||||
else
|
||||
error('Mismatching dimensions of range and initial range!');
|
||||
end
|
||||
end
|
||||
disp('Java object created');
|
||||
|
||||
testEvalFunc(int);
|
||||
|
@ -1,4 +1,7 @@
|
||||
package eva2.server.go;
|
||||
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
|
||||
/*
|
||||
* Title: EvA2
|
||||
* Description:
|
||||
@ -62,7 +65,9 @@ public interface IndividualInterface {
|
||||
public void defaultMutate();
|
||||
|
||||
/**
|
||||
* Initialize the genotype randomly, usually in a uniform distribution.
|
||||
* Initialize the genotype randomly, usually in a uniform distribution. Make sure,
|
||||
* if the problem has an initial range (it implements InterfaceHasInitialRange), that this
|
||||
* initial range is used.
|
||||
*/
|
||||
public void defaultInit();
|
||||
public void defaultInit(InterfaceOptimizationProblem prob);
|
||||
}
|
@ -269,7 +269,11 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java.
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public abstract void init(InterfaceOptimizationProblem opt);
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit(opt);
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
|
@ -5,6 +5,7 @@ import java.util.BitSet;
|
||||
import eva2.server.go.operators.crossover.CrossoverESDefault;
|
||||
import eva2.server.go.operators.mutation.InterfaceMutation;
|
||||
import eva2.server.go.operators.mutation.MutateESGlobal;
|
||||
import eva2.server.go.problems.InterfaceHasInitRange;
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
import eva2.tools.math.RNG;
|
||||
|
||||
@ -170,15 +171,6 @@ public class ESIndividualBinaryData extends AbstractEAIndividual implements Inte
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -189,7 +181,7 @@ public class ESIndividualBinaryData extends AbstractEAIndividual implements Inte
|
||||
BitSet bs = (BitSet) obj;
|
||||
this.SetBinaryGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for ESIndividualBinaryData is no BitSet!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -260,10 +252,9 @@ public class ESIndividualBinaryData extends AbstractEAIndividual implements Inte
|
||||
ESIndividualDoubleData.defaultMutate(m_Genotype, m_Range);
|
||||
}
|
||||
|
||||
/** This method initializes the double vector
|
||||
*/
|
||||
public void defaultInit() {
|
||||
ESIndividualDoubleData.defaultInit(m_Genotype, m_Range);
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
if (prob instanceof InterfaceHasInitRange && (((InterfaceHasInitRange)prob).getInitRange()!=null)) ESIndividualDoubleData.defaultInit(m_Genotype, (double[][])((InterfaceHasInitRange)prob).getInitRange());
|
||||
else ESIndividualDoubleData.defaultInit(m_Genotype, m_Range);
|
||||
}
|
||||
/**********************************************************************************************************************
|
||||
* These are for GUI
|
||||
|
@ -4,6 +4,7 @@ package eva2.server.go.individuals;
|
||||
import eva2.server.go.operators.crossover.CrossoverESDefault;
|
||||
import eva2.server.go.operators.mutation.InterfaceMutation;
|
||||
import eva2.server.go.operators.mutation.MutateESGlobal;
|
||||
import eva2.server.go.problems.InterfaceHasInitRange;
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
import eva2.tools.EVAERROR;
|
||||
import eva2.tools.math.Mathematics;
|
||||
@ -200,9 +201,7 @@ public class ESIndividualDoubleData extends AbstractEAIndividual implements Inte
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
super.init(opt);
|
||||
// evil operators may not respect the range, so at least give some hint
|
||||
if (!Mathematics.isInRange(m_Genotype, m_Range)) EVAERROR.errorMsgOnce("Warning: Individual out of range after initialization (and potential initial crossover/mutation)!");
|
||||
}
|
||||
@ -218,7 +217,7 @@ public class ESIndividualDoubleData extends AbstractEAIndividual implements Inte
|
||||
if (bs.length != this.m_Genotype.length) System.out.println("Init value and requested length doesn't match!");
|
||||
this.SetDoubleGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for ESIndividualDoubleData is not double[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -300,10 +299,9 @@ public class ESIndividualDoubleData extends AbstractEAIndividual implements Inte
|
||||
if (genotype[mutationIndex] > range[mutationIndex][1]) genotype[mutationIndex] = range[mutationIndex][1];
|
||||
}
|
||||
|
||||
/** This method initializes the double vector
|
||||
*/
|
||||
public void defaultInit() {
|
||||
ESIndividualDoubleData.defaultInit(m_Genotype, m_Range);
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
if (prob instanceof InterfaceHasInitRange && (((InterfaceHasInitRange)prob).getInitRange()!=null)) ESIndividualDoubleData.defaultInit(m_Genotype, (double[][])((InterfaceHasInitRange)prob).getInitRange());
|
||||
else ESIndividualDoubleData.defaultInit(m_Genotype, m_Range);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,12 +1,9 @@
|
||||
package eva2.server.go.individuals;
|
||||
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import eva2.server.go.IndividualInterface;
|
||||
import eva2.server.go.operators.crossover.CrossoverESDefault;
|
||||
import eva2.server.go.operators.mutation.InterfaceMutation;
|
||||
import eva2.server.go.operators.mutation.MutateESGlobal;
|
||||
import eva2.server.go.problems.InterfaceHasInitRange;
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
import eva2.tools.math.RNG;
|
||||
|
||||
@ -187,14 +184,6 @@ public class ESIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
@ -207,7 +196,7 @@ public class ESIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
if (bs.length != this.m_Genotype.length) System.out.println("Init value and requested length doesn't match!");
|
||||
this.SetIntGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for ESIndividualIntegerData is not int[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -276,11 +265,11 @@ public class ESIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
return result;
|
||||
}
|
||||
|
||||
/** This method initializes the double vector
|
||||
*/
|
||||
public void defaultInit() {
|
||||
for (int i = 0; i < this.m_Genotype.length; i++) {
|
||||
this.m_Genotype[i] = RNG.randomInt(this.m_Range[i][0], this.m_Range[i][1]);
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
int[][] range = m_Range;
|
||||
if (prob instanceof InterfaceHasInitRange && (((InterfaceHasInitRange)prob).getInitRange()!=null)) range = (int[][])((InterfaceHasInitRange)prob).getInitRange();
|
||||
for (int i = 0; i < this.m_Genotype.length; i++) {
|
||||
this.m_Genotype[i] = RNG.randomInt(range[i][0], range[i][1]);
|
||||
}
|
||||
}
|
||||
/**********************************************************************************************************************
|
||||
|
@ -1,9 +1,9 @@
|
||||
package eva2.server.go.individuals;
|
||||
|
||||
import eva2.server.go.IndividualInterface;
|
||||
import eva2.server.go.operators.crossover.CrossoverESDefault;
|
||||
import eva2.server.go.operators.mutation.InterfaceMutation;
|
||||
import eva2.server.go.operators.mutation.MutateESGlobal;
|
||||
import eva2.server.go.problems.InterfaceHasInitRange;
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
import eva2.tools.math.RNG;
|
||||
|
||||
@ -214,14 +214,6 @@ public class ESIndividualPermutationData extends AbstractEAIndividual implements
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
@ -234,7 +226,7 @@ public class ESIndividualPermutationData extends AbstractEAIndividual implements
|
||||
if (bs.length != this.m_Genotype.length) System.out.println("Init value and requested length doesn't match!");
|
||||
this.SetPermutationGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for ESIndividualPermutationData is not int[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -325,12 +317,12 @@ public class ESIndividualPermutationData extends AbstractEAIndividual implements
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes the double vector
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
double[][][] range = m_Range;
|
||||
if (prob instanceof InterfaceHasInitRange && (((InterfaceHasInitRange)prob).getInitRange()!=null)) range = (double[][][])((InterfaceHasInitRange)prob).getInitRange();
|
||||
|
||||
for (int i = 0; i < this.m_Genotype.length; i++) {
|
||||
ESIndividualDoubleData.defaultInit(m_Genotype[i], m_Range[i]);
|
||||
ESIndividualDoubleData.defaultInit(m_Genotype[i], range[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,9 +75,9 @@ public class GAESIndividualBinaryDoubleData extends AbstractEAIndividual impleme
|
||||
((AbstractEAIndividual)this.m_BitSet).init(opt);
|
||||
}
|
||||
|
||||
public void defaultInit() {
|
||||
((AbstractEAIndividual)this.m_Numbers).defaultInit();
|
||||
((AbstractEAIndividual)this.m_BitSet).defaultInit();
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
((AbstractEAIndividual)this.m_Numbers).defaultInit(prob);
|
||||
((AbstractEAIndividual)this.m_BitSet).defaultInit(prob);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
|
@ -91,15 +91,6 @@ public class GAIndividualBinaryData extends AbstractEAIndividual implements Inte
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -110,7 +101,7 @@ public class GAIndividualBinaryData extends AbstractEAIndividual implements Inte
|
||||
BitSet bs = (BitSet) obj;
|
||||
this.SetBinaryGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for GAIndividualBinaryData is no BitSet!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -175,9 +166,7 @@ public class GAIndividualBinaryData extends AbstractEAIndividual implements Inte
|
||||
return this.m_GenotypeLength;
|
||||
}
|
||||
|
||||
/** This method inits the genotpye of the individual
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
for (int i = 0; i < this.m_GenotypeLength; i++) {
|
||||
if (RNG.flipCoin(0.5)) this.m_Genotype.set(i);
|
||||
else this.m_Genotype.clear(i);
|
||||
|
@ -208,14 +208,6 @@ public class GAIndividualDoubleData extends AbstractEAIndividual implements Inte
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
@ -228,7 +220,7 @@ public class GAIndividualDoubleData extends AbstractEAIndividual implements Inte
|
||||
if (bs.length != this.m_Range.length) System.out.println("Init value and requested length doesn't match!");
|
||||
this.SetDoubleGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for GAIndividualDoubleData is not double[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -290,9 +282,7 @@ public class GAIndividualDoubleData extends AbstractEAIndividual implements Inte
|
||||
return this.m_GenotypeLength;
|
||||
}
|
||||
|
||||
/** This method inits the genotpye of the individual
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
for (int i = 0; i < this.m_GenotypeLength; i++) {
|
||||
if (RNG.flipCoin(0.5)) this.m_Genotype.set(i);
|
||||
else this.m_Genotype.clear(i);
|
||||
|
@ -237,15 +237,6 @@ public class GAIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -257,7 +248,7 @@ public class GAIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
if (bs.length != this.m_Range.length) System.out.println("Init value and requested length doesn't match!");
|
||||
this.SetIntGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for GAIndividualDoubleData is not double[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -333,9 +324,7 @@ public class GAIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
return overallLength;
|
||||
}
|
||||
|
||||
/** This method inits the genotpye of the individual
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
int overallLength = 0;
|
||||
for (int i = 0; i < this.m_CodingLenghts.length; i++) overallLength += this.m_CodingLenghts[i];
|
||||
for (int i = 0; i < overallLength; i++) {
|
||||
@ -365,7 +354,7 @@ public class GAIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
}
|
||||
indy.setIntegerDataLength(dimension);
|
||||
indy.SetIntRange(range);
|
||||
indy.defaultInit();
|
||||
indy.defaultInit(null);
|
||||
System.out.println(""+indy.getStringRepresentation());
|
||||
System.out.println("System.exit(0)");
|
||||
int[] data = indy.getIntegerData();
|
||||
|
@ -74,9 +74,9 @@ public class GAPIndividualProgramData extends AbstractEAIndividual implements In
|
||||
((AbstractEAIndividual)this.m_Program).init(opt);
|
||||
}
|
||||
|
||||
public void defaultInit() {
|
||||
((AbstractEAIndividual)this.m_Numbers).defaultInit();
|
||||
((AbstractEAIndividual)this.m_Program).defaultInit();
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
((AbstractEAIndividual)this.m_Numbers).defaultInit(prob);
|
||||
((AbstractEAIndividual)this.m_Program).defaultInit(prob);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
|
@ -501,15 +501,6 @@ public class GEIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
/************************************************************************************
|
||||
* InterfaceEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -519,7 +510,7 @@ public class GEIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
if (obj instanceof InterfaceProgram) {
|
||||
this.SetProgramGenotype((InterfaceProgram[])obj);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for GPIndividualDoubleData is no InterfaceProgram[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -574,9 +565,7 @@ public class GEIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
return this.m_GenotypeLengthPerProgram*this.m_Area.length;
|
||||
}
|
||||
|
||||
/** This method inits the genotpye of the individual
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
for (int i = 0; i < this.m_GenotypeLengthPerProgram*this.m_Area.length; i++) {
|
||||
if (RNG.flipCoin(0.5)) this.m_Genotype.set(i);
|
||||
else this.m_Genotype.clear(i);
|
||||
|
@ -3,6 +3,7 @@ package eva2.server.go.individuals;
|
||||
import eva2.server.go.operators.crossover.CrossoverGIDefault;
|
||||
import eva2.server.go.operators.mutation.InterfaceMutation;
|
||||
import eva2.server.go.operators.mutation.MutateDefault;
|
||||
import eva2.server.go.problems.InterfaceHasInitRange;
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
import eva2.tools.math.RNG;
|
||||
|
||||
@ -189,15 +190,6 @@ public class GIIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
/************************************************************************************
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -209,7 +201,7 @@ public class GIIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
if (bs.length != this.m_Range.length) System.out.println("Init value and requested length doesn't match!");
|
||||
this.SetIntGenotype(bs);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for GAIndividualDoubleData is not double[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -279,11 +271,12 @@ public class GIIndividualIntegerData extends AbstractEAIndividual implements Int
|
||||
this.m_Genotype[mutationIndex] = RNG.randomInt(this.m_Range[mutationIndex][0], this.m_Range[mutationIndex][1]);
|
||||
}
|
||||
|
||||
/** This method initializes the GA genotype randomly
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
int[][] range = m_Range;
|
||||
if (prob instanceof InterfaceHasInitRange && (((InterfaceHasInitRange)prob).getInitRange()!=null)) range = (int[][])((InterfaceHasInitRange)prob).getInitRange();
|
||||
|
||||
for (int i = 0; i < this.m_Genotype.length; i++) {
|
||||
this.m_Genotype[i] = RNG.randomInt(this.m_Range[i][0], this.m_Range[i][1]);
|
||||
this.m_Genotype[i] = RNG.randomInt(range[i][0], range[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,9 +75,9 @@ public class GIOBGAIndividualIntegerPermutationData extends AbstractEAIndividual
|
||||
((AbstractEAIndividual)this.m_Permutation).init(opt);
|
||||
}
|
||||
|
||||
public void defaultInit() {
|
||||
((AbstractEAIndividual)this.m_Integer).defaultInit();
|
||||
((AbstractEAIndividual)this.m_Permutation).defaultInit();
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
((AbstractEAIndividual)this.m_Integer).defaultInit(prob);
|
||||
((AbstractEAIndividual)this.m_Permutation).defaultInit(prob);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
|
@ -193,15 +193,6 @@ public class GPIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
/************************************************************************************
|
||||
* InterfaceEAIndividual methods
|
||||
*/
|
||||
/** This method will allow a default initialisation of the individual
|
||||
* @param opt The optimization problem that is to be solved.
|
||||
*/
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -211,7 +202,7 @@ public class GPIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
if (obj instanceof InterfaceProgram[]) {
|
||||
this.SetProgramGenotype((InterfaceProgram[])obj);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for GPIndividualDoubleData is no InterfaceProgram[]!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -271,7 +262,7 @@ public class GPIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
this.m_Genotype[i].addNodesTo(allNodes);
|
||||
AbstractGPNode nodeToMutate = (AbstractGPNode) allNodes.get(RNG.randomInt(0, allNodes.size()-1));
|
||||
if (nodeToMutate.getParent() == null) {
|
||||
this.defaultInit();
|
||||
this.defaultInit(null);
|
||||
} else {
|
||||
AbstractGPNode parent = nodeToMutate.getParent();
|
||||
AbstractGPNode newNode = (AbstractGPNode)(((AbstractGPNode)this.m_Area[i].getRandomNode().clone()));
|
||||
@ -282,9 +273,7 @@ public class GPIndividualProgramData extends AbstractEAIndividual implements Int
|
||||
}
|
||||
}
|
||||
|
||||
/** This method initializes the program
|
||||
*/
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
for (int i = 0; i < this.m_Area.length; i++) {
|
||||
if (this.m_Area[i] == null) {
|
||||
EVAERROR.errorMsgOnce("Error in GPIndividualProgramData.defaultInit(): Area["+i+"] == null !!");
|
||||
|
@ -91,12 +91,6 @@ public class OBGAIndividualPermutationData extends AbstractEAIndividual implemen
|
||||
* AbstractEAIndividual methods
|
||||
*/
|
||||
|
||||
public void init(InterfaceOptimizationProblem opt) {
|
||||
this.defaultInit();
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
this.m_CrossoverOperator.init(this, opt);
|
||||
}
|
||||
|
||||
/** This method will init the individual with a given value for the
|
||||
* phenotype.
|
||||
* @param obj The initial value for the phenotype
|
||||
@ -106,7 +100,7 @@ public class OBGAIndividualPermutationData extends AbstractEAIndividual implemen
|
||||
if (obj instanceof int[]) {
|
||||
this.SetPermutationGenotype((int[][]) obj);
|
||||
} else {
|
||||
this.defaultInit();
|
||||
this.defaultInit(opt);
|
||||
System.out.println("Initial value for OBGAIndividualBinaryData is no Permutation!");
|
||||
}
|
||||
this.m_MutationOperator.init(this, opt);
|
||||
@ -180,8 +174,7 @@ public class OBGAIndividualPermutationData extends AbstractEAIndividual implemen
|
||||
this.SetPermutationGenotype(permmatrix);
|
||||
}
|
||||
|
||||
/*generates a random permutation */
|
||||
public void defaultInit(){
|
||||
public void defaultInit(InterfaceOptimizationProblem prob){
|
||||
//System.out.println("Default Init!");
|
||||
int[][] perm = new int[this.m_Genotype.length][];
|
||||
for (int p = 0; p < perm.length; p++) {
|
||||
|
@ -216,10 +216,10 @@ public class CrossoverESPCX implements InterfaceCrossover, java.io.Serializable
|
||||
indy4 = (ESIndividualDoubleData)indy1.clone();
|
||||
if (false) {
|
||||
// random init
|
||||
indy1.defaultInit();
|
||||
indy2.defaultInit();
|
||||
indy3.defaultInit();
|
||||
indy4.defaultInit();
|
||||
indy1.defaultInit(prob);
|
||||
indy2.defaultInit(prob);
|
||||
indy3.defaultInit(prob);
|
||||
indy4.defaultInit(prob);
|
||||
} else {
|
||||
// value init
|
||||
tmpD[0] = 0;
|
||||
|
@ -130,9 +130,9 @@ public class CrossoverESSBX implements InterfaceCrossover, java.io.Serializable
|
||||
indy3 = (ESIndividualDoubleData)indy1.clone();
|
||||
if (false) {
|
||||
// random init
|
||||
indy1.defaultInit();
|
||||
indy2.defaultInit();
|
||||
indy3.defaultInit();
|
||||
indy1.defaultInit(prob);
|
||||
indy2.defaultInit(prob);
|
||||
indy3.defaultInit(prob);
|
||||
} else {
|
||||
// value init
|
||||
tmpD[0] = 0.5;
|
||||
|
@ -145,10 +145,10 @@ public class CrossoverESSPX implements InterfaceCrossover, java.io.Serializable
|
||||
indy4 = (ESIndividualDoubleData)indy1.clone();
|
||||
if (false) {
|
||||
// random init
|
||||
indy1.defaultInit();
|
||||
indy2.defaultInit();
|
||||
indy3.defaultInit();
|
||||
indy4.defaultInit();
|
||||
indy1.defaultInit(prob);
|
||||
indy2.defaultInit(prob);
|
||||
indy3.defaultInit(prob);
|
||||
indy4.defaultInit(prob);
|
||||
} else {
|
||||
// value init
|
||||
tmpD[0] = -1;
|
||||
|
@ -205,10 +205,10 @@ public class CrossoverESUNDX implements InterfaceCrossover, java.io.Serializable
|
||||
indy4 = (ESIndividualDoubleData)indy1.clone();
|
||||
if (false) {
|
||||
// random init
|
||||
indy1.defaultInit();
|
||||
indy2.defaultInit();
|
||||
indy3.defaultInit();
|
||||
indy4.defaultInit();
|
||||
indy1.defaultInit(prob);
|
||||
indy2.defaultInit(prob);
|
||||
indy3.defaultInit(prob);
|
||||
indy4.defaultInit(prob);
|
||||
} else {
|
||||
// value init
|
||||
tmpD[0] = -1.9;
|
||||
|
97
src/eva2/server/go/operators/mutation/MutateGAUniform.java
Normal file
97
src/eva2/server/go/operators/mutation/MutateGAUniform.java
Normal file
@ -0,0 +1,97 @@
|
||||
package eva2.server.go.operators.mutation;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import eva2.gui.GenericObjectEditor;
|
||||
import eva2.server.go.individuals.AbstractEAIndividual;
|
||||
import eva2.server.go.individuals.InterfaceGAIndividual;
|
||||
import eva2.server.go.populations.Population;
|
||||
import eva2.server.go.problems.InterfaceOptimizationProblem;
|
||||
import eva2.tools.EVAERROR;
|
||||
import eva2.tools.math.RNG;
|
||||
|
||||
/**
|
||||
* Uniform mutation mutates every GA bit with a fixed probability.
|
||||
*
|
||||
* @author mkron
|
||||
*
|
||||
*/
|
||||
public class MutateGAUniform implements InterfaceMutation, Serializable {
|
||||
double bitwiseProb = 0.1;
|
||||
private boolean useInvertedLength = true;
|
||||
|
||||
public MutateGAUniform() {}
|
||||
|
||||
public MutateGAUniform(MutateGAUniform o) {
|
||||
setBitwiseProb(o.getBitwiseProb());
|
||||
}
|
||||
|
||||
public void crossoverOnStrategyParameters(AbstractEAIndividual indy1,
|
||||
Population partners) {
|
||||
if (indy1.getMutationOperator() instanceof MutateGAUniform) {
|
||||
MutateGAUniform mute = (MutateGAUniform)indy1.getMutationOperator();
|
||||
double smallerProb, largerProb;
|
||||
smallerProb = Math.min(getBitwiseProb(), mute.getBitwiseProb());
|
||||
largerProb = Math.max(getBitwiseProb(), mute.getBitwiseProb());
|
||||
setBitwiseProb(RNG.randomDouble(smallerProb, largerProb));
|
||||
}
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
return new MutateGAUniform(this);
|
||||
}
|
||||
|
||||
public void hideHideable() {
|
||||
setUseInvertedLength(isUseInvertedLength());
|
||||
}
|
||||
|
||||
public String getStringRepresentation() {
|
||||
return "Uniform GA mutation (" + getBitwiseProb() + ")";
|
||||
}
|
||||
|
||||
public void init(AbstractEAIndividual individual,
|
||||
InterfaceOptimizationProblem opt) {
|
||||
if (useInvertedLength && (individual instanceof InterfaceGAIndividual)) setBitwiseProb(((InterfaceGAIndividual)individual).getGenotypeLength());
|
||||
}
|
||||
|
||||
/**
|
||||
* Flip every bit with a certain probability.
|
||||
*/
|
||||
public void mutate(AbstractEAIndividual individual) {
|
||||
if (individual instanceof InterfaceGAIndividual) {
|
||||
InterfaceGAIndividual indy = (InterfaceGAIndividual)individual;
|
||||
for (int i=0; i<indy.getGenotypeLength(); i++) {
|
||||
if (RNG.flipCoin(bitwiseProb)) indy.getBGenotype().flip(i);
|
||||
}
|
||||
} else EVAERROR.errorMsgOnce("Error: Skipped mutation since " + this.getClass() + " is applicable for InterfaceGAIndividual individuals only! (pot. multiple occ.)");
|
||||
}
|
||||
|
||||
public double getBitwiseProb() {
|
||||
return bitwiseProb;
|
||||
}
|
||||
public void setBitwiseProb(double bitwiseProb) {
|
||||
this.bitwiseProb = bitwiseProb;
|
||||
}
|
||||
public String bitwiseProbTipText() {
|
||||
return "The probability of every bit to be flipped.";
|
||||
}
|
||||
|
||||
public void setUseInvertedLength(boolean useInvertedLength) {
|
||||
this.useInvertedLength = useInvertedLength;
|
||||
GenericObjectEditor.setHideProperty(this.getClass(), "bitwiseProb", useInvertedLength);
|
||||
}
|
||||
public boolean isUseInvertedLength() {
|
||||
return useInvertedLength;
|
||||
}
|
||||
public String useInvertedLengthTipText() {
|
||||
return "Switch for using 1/l as mutation rate.";
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return "Uniform-GA-Mutation";
|
||||
}
|
||||
|
||||
public String globalInfo() {
|
||||
return "Uniform mutation mutates every GA bit with a fixed probability.";
|
||||
}
|
||||
}
|
@ -1054,7 +1054,7 @@ public class PostProcess {
|
||||
for (int i=0; i<curPopSize; i++) {
|
||||
// fill pop randomly
|
||||
indy = prob.getIndividualTemplate().getClone();
|
||||
indy.defaultInit();
|
||||
indy.defaultInit(prob);
|
||||
pop.add(indy);
|
||||
}
|
||||
pop.synchSize();
|
||||
|
@ -240,21 +240,21 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
|
||||
firePropertyChangedEvent(Population.populationInitialized);
|
||||
}
|
||||
|
||||
/** This method inits the population. Function and generation counters
|
||||
* are reset and m_Size default Individuals are created and initialized by
|
||||
* the GAIndividual default init() method.
|
||||
*/
|
||||
public void defaultInit(AbstractEAIndividual template) {
|
||||
this.m_Generation = 0;
|
||||
this.m_FunctionCalls = 0;
|
||||
this.m_Archive = null;
|
||||
this.clear();
|
||||
for (int i = 0; i < this.m_TargetSize; i++) {
|
||||
AbstractEAIndividual tmpIndy = (AbstractEAIndividual)template.clone();
|
||||
tmpIndy.defaultInit();
|
||||
super.add(tmpIndy);
|
||||
}
|
||||
}
|
||||
// /** This method inits the population. Function and generation counters
|
||||
// * are reset and m_Size default Individuals are created and initialized by
|
||||
// * the GAIndividual default init() method.
|
||||
// */
|
||||
// public void defaultInit(AbstractEAIndividual template) { Were missing the optimization problem - thus no initial range can be specified. And since no one calls this method, I removed it for now
|
||||
// this.m_Generation = 0;
|
||||
// this.m_FunctionCalls = 0;
|
||||
// this.m_Archive = null;
|
||||
// this.clear();
|
||||
// for (int i = 0; i < this.m_TargetSize; i++) {
|
||||
// AbstractEAIndividual tmpIndy = (AbstractEAIndividual)template.clone();
|
||||
// tmpIndy.defaultInit(null);
|
||||
// super.add(tmpIndy);
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Create a population instance which distributes the individuals according to
|
||||
|
@ -184,7 +184,13 @@ public abstract class AbstractOptimizationProblem implements InterfaceOptimizati
|
||||
*/
|
||||
public abstract void evaluate(AbstractEAIndividual individual);
|
||||
|
||||
|
||||
/**
|
||||
* The default initialization method. Clone the given template individual, calls its init method
|
||||
* and add it to the population until the target size is reached. Earlier individuals are removed.
|
||||
* @param population
|
||||
* @param template
|
||||
* @param prob
|
||||
*/
|
||||
public static void defaultInitPopulation(Population population, AbstractEAIndividual template, InterfaceOptimizationProblem prob) {
|
||||
AbstractEAIndividual tmpIndy;
|
||||
population.clear();
|
||||
|
@ -1,6 +1,7 @@
|
||||
package eva2.server.go.problems;
|
||||
|
||||
import eva2.server.go.strategies.InterfaceOptimizer;
|
||||
import eva2.tools.math.Mathematics;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
@ -9,7 +10,9 @@ import eva2.server.go.strategies.InterfaceOptimizer;
|
||||
* Time: 17:58:55
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class F1Problem extends AbstractProblemDoubleOffset implements Interface2DBorderProblem, java.io.Serializable, InterfaceFirstOrderDerivableProblem {
|
||||
public class F1Problem extends AbstractProblemDoubleOffset implements Interface2DBorderProblem, InterfaceHasInitRange, java.io.Serializable, InterfaceFirstOrderDerivableProblem {
|
||||
private double initialRangeRatio=1.; // reduce to initialize in a smaller subrange of the original range (in the corner box)
|
||||
|
||||
public F1Problem() {
|
||||
super();
|
||||
setDefaultRange(10);
|
||||
@ -93,4 +96,23 @@ public class F1Problem extends AbstractProblemDoubleOffset implements Interface2
|
||||
}
|
||||
return grads;
|
||||
}
|
||||
|
||||
/**
|
||||
* If initialRangeRatio<1, produce a reduced initial range in the negative corner of the range.
|
||||
*/
|
||||
public Object getInitRange() {
|
||||
if (initialRangeRatio<1.) {
|
||||
double[][] gR=makeRange();
|
||||
double[][] initR = makeRange();
|
||||
// double[] rng = Mathematics.shiftRange(initR);
|
||||
Mathematics.scaleRange(initialRangeRatio, initR);
|
||||
for (int i=0; i<getProblemDimension(); i++) {
|
||||
double d=gR[i][0]-initR[i][0];
|
||||
initR[i][0]+=d; // shift back by original offsets
|
||||
initR[i][1]+=d;
|
||||
}
|
||||
// System.out.println(BeanInspector.toString(initR));
|
||||
return initR;
|
||||
} else return makeRange();
|
||||
}
|
||||
}
|
||||
|
@ -2,13 +2,20 @@ package eva2.server.go.problems;
|
||||
|
||||
/**
|
||||
* An interface for optimization problems having an extra initial range
|
||||
* opposed to the all-over problem range.
|
||||
*
|
||||
* TODO generalize this!
|
||||
* opposed to the global search range. This makes sense mainly for double
|
||||
* and integer data types such as ESIndividuals and GIIndividuals. For binary types,
|
||||
* the search range is defined by the bit length of the individual, respectively the
|
||||
* dimension of the problem.
|
||||
*
|
||||
* @author mkron
|
||||
*
|
||||
*/
|
||||
public interface InterfaceHasInitRange {
|
||||
public double[][] getInitRange();
|
||||
/**
|
||||
* The method should return the type expected by the individual type, e.g. double[][] or int[][].
|
||||
* It may return null, in that case the global search range is used as initial range.
|
||||
*
|
||||
* @return An initial search range or null in case it is equal to the global search range.
|
||||
*/
|
||||
public Object getInitRange();
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
|
||||
import eva2.OptimizerFactory;
|
||||
import eva2.OptimizerRunnable;
|
||||
@ -28,7 +29,7 @@ import eva2.server.stat.InterfaceTextListener;
|
||||
* @author mkron
|
||||
*
|
||||
*/
|
||||
public class MatlabProblem extends AbstractOptimizationProblem implements InterfaceTextListener, Serializable {
|
||||
public class MatlabProblem extends AbstractOptimizationProblem implements InterfaceHasInitRange, InterfaceTextListener, Serializable {
|
||||
private static final long serialVersionUID = 4913310869887420815L;
|
||||
public static boolean TRACE = false;
|
||||
transient OptimizerRunnable runnable = null;
|
||||
@ -42,6 +43,7 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf
|
||||
int verbosityLevel = 0;
|
||||
private MatlabEvalMediator handler = null;
|
||||
private boolean isDouble = true;
|
||||
private double[][] initialRange = null; // the initial range for double-valued problems
|
||||
|
||||
public static boolean hideFromGOE = true;
|
||||
|
||||
@ -59,6 +61,7 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf
|
||||
// if (o.res != null) if (o.res.get() != null) res.set(o.res.get());
|
||||
this.range = o.range;
|
||||
this.isDouble = o.isDouble;
|
||||
this.initialRange = o.initialRange;
|
||||
// this.mtCmd = o.mtCmd;
|
||||
// currArray = null;
|
||||
}
|
||||
@ -72,7 +75,11 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf
|
||||
}
|
||||
|
||||
public MatlabProblem(int dim, double[][] range) {
|
||||
init(dim, range, defTestOut);
|
||||
init(dim, range, null, defTestOut);
|
||||
}
|
||||
|
||||
public MatlabProblem(int dim, double[][] range, double[][] initRange) {
|
||||
init(dim, range, initRange, defTestOut);
|
||||
}
|
||||
|
||||
public MatlabProblem(int dim, double lower, double upper) {
|
||||
@ -112,13 +119,36 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf
|
||||
}
|
||||
|
||||
public void initProblem() {
|
||||
init(this.problemDimension, range, defTestOut);
|
||||
init(this.problemDimension, range, initialRange, defTestOut);
|
||||
}
|
||||
|
||||
private void init(int dim, double[][] rng, String outFile) {
|
||||
problemDimension = dim;
|
||||
/**
|
||||
* Make deep clones for the ranges, or there may be deadlocks in communicating with Matlab!
|
||||
*
|
||||
* @param dim
|
||||
* @param globalRange
|
||||
* @param initRange
|
||||
* @param outFile
|
||||
*/
|
||||
private void init(int dim, double[][] globalRange, double[][] initRange, String outFile) {
|
||||
this.problemDimension = dim;
|
||||
// if ((rng != null) && (dim != rng.length)) throw new ArrayIndexOutOfBoundsException("Mismatching dimension and range!");
|
||||
range = rng;
|
||||
if (globalRange!=null) { // these may be Matlab objects, so I do it by foot, just to be sure not to clone them within Matlab instead of here
|
||||
this.range = new double[globalRange.length][globalRange[0].length];
|
||||
for (int i=0; i<this.range.length; i++) {
|
||||
for (int j=0; j<this.range[0].length; j++) this.range[i][j]=globalRange[i][j];
|
||||
}
|
||||
} else this.range=null;
|
||||
|
||||
if (initialRange!=null) { // these may be Matlab objects, so I do it by foot, just to be sure not to clone them within Matlab instead of here
|
||||
this.initialRange = new double[initRange.length][initRange[0].length];
|
||||
for (int i=0; i<this.initialRange.length; i++) {
|
||||
for (int j=0; j<this.initialRange[0].length; j++) this.initialRange[i][j]=initRange[i][j];
|
||||
}
|
||||
} else this.initialRange=null;
|
||||
|
||||
if (Arrays.deepEquals(initialRange, range)) initialRange=null;
|
||||
|
||||
if (range==null) isDouble = false;
|
||||
else isDouble = true;
|
||||
|
||||
@ -128,6 +158,7 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf
|
||||
// res = new ResultArr();
|
||||
|
||||
setDebugOut(TRACE, defTestOut);
|
||||
log("Initial range is " + BeanInspector.toString(initialRange) + "\n");
|
||||
|
||||
// log("range is " + BeanInspector.toString(range)+ "\n");
|
||||
// log("template len: " + ((ESIndividualDoubleData)m_Template).getDGenotype().length + "\n");
|
||||
@ -448,4 +479,9 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf
|
||||
//sb.append("\n");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public Object getInitRange() {
|
||||
log("retrieving initial range..., first entry: " + ((initialRange==null) ? "null" : BeanInspector.toString(initialRange[0])));
|
||||
return initialRange;
|
||||
}
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ public class FloodAlgorithm implements InterfaceOptimizer, java.io.Serializable
|
||||
public void defaultInit() {
|
||||
this.m_FitnessCallsNeeded = 0;
|
||||
this.m_Best = new GAIndividualBinaryData();
|
||||
this.m_Best.defaultInit();
|
||||
this.m_Best.defaultInit(m_Problem);
|
||||
}
|
||||
|
||||
/** This method will optimize
|
||||
|
@ -76,13 +76,17 @@ public class MonteCarloSearch implements InterfaceOptimizer, java.io.Serializabl
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will optimize without specific operators, by just calling the problem method
|
||||
* for population initialization.
|
||||
* This method will optimize without specific operators, by just calling the individual method
|
||||
* for initialization.
|
||||
*/
|
||||
public void optimize() {
|
||||
Population original = (Population)this.m_Population.clone();
|
||||
|
||||
this.m_Problem.initPopulation(this.m_Population);
|
||||
// this.m_Problem.initPopulation(this.m_Population);
|
||||
for (int i=0; i<m_Population.size(); i++) {
|
||||
m_Population.getEAIndividual(i).defaultInit(null);
|
||||
}
|
||||
|
||||
this.m_Population.SetFunctionCalls(original.getFunctionCalls());
|
||||
this.m_Problem.evaluate(this.m_Population);
|
||||
for (int i = 0; i < this.m_Population.size(); i++) {
|
||||
@ -111,7 +115,7 @@ public class MonteCarloSearch implements InterfaceOptimizer, java.io.Serializabl
|
||||
public void defaultInit() {
|
||||
this.m_FitnessCallsNeeded = 0;
|
||||
this.m_Best = new GAIndividualBinaryData();
|
||||
this.m_Best.defaultInit();
|
||||
this.m_Best.defaultInit(m_Problem);
|
||||
}
|
||||
|
||||
/** This method will optimize
|
||||
@ -119,7 +123,7 @@ public class MonteCarloSearch implements InterfaceOptimizer, java.io.Serializabl
|
||||
public void defaultOptimize() {
|
||||
for (int i = 0; i < m_FitnessCalls; i++) {
|
||||
this.m_Test = new GAIndividualBinaryData();
|
||||
this.m_Test.defaultInit();
|
||||
this.m_Test.defaultInit(m_Problem);
|
||||
if (this.m_Test.defaultEvaulateAsMiniBits() < this.m_Best.defaultEvaulateAsMiniBits()) this.m_Best = this.m_Test;
|
||||
this.m_FitnessCallsNeeded = i;
|
||||
if (this.m_Best.defaultEvaulateAsMiniBits() == 0) i = this.m_FitnessCalls +1;
|
||||
|
@ -102,7 +102,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
|
||||
transient final static String partTypeKey = "ParticleType";
|
||||
public transient final static String partBestPosKey = "BestPosition";
|
||||
transient final static String partBestFitKey = "BestFitness";
|
||||
transient final static String partVelKey = "Velocity";
|
||||
public transient final static String partVelKey = "Velocity";
|
||||
transient final static String multiSwTypeKey="MultiSwarmType";
|
||||
transient final static String multiSwSizeKey="MultiSwarmSize";
|
||||
transient final static String indexKey="particleIndex";
|
||||
@ -569,7 +569,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
|
||||
public static void resetIndividual(AbstractEAIndividual indy, double initialV) {
|
||||
if (indy instanceof InterfaceDataTypeDouble) {
|
||||
indy.setParents(null);
|
||||
indy.defaultInit();
|
||||
indy.defaultInit(null);
|
||||
indy.putData(partTypeKey, defaultType); // turn into default type
|
||||
initIndividualDefaults(indy, initialV);
|
||||
initIndividualMemory(indy);
|
||||
|
@ -138,7 +138,7 @@ public class SimulatedAnnealing implements InterfaceOptimizer, java.io.Serializa
|
||||
public void defaultInit() {
|
||||
this.m_FitnessCallsNeeded = 0;
|
||||
this.m_Best = new GAIndividualBinaryData();
|
||||
this.m_Best.defaultInit();
|
||||
this.m_Best.defaultInit(m_Problem);
|
||||
}
|
||||
|
||||
/** This method will optimize
|
||||
|
@ -130,7 +130,7 @@ public class ThresholdAlgorithm implements InterfaceOptimizer, java.io.Serializa
|
||||
public void defaultInit() {
|
||||
this.m_FitnessCallsNeeded = 0;
|
||||
this.m_Best = new GAIndividualBinaryData();
|
||||
this.m_Best.defaultInit();
|
||||
this.m_Best.defaultInit(m_Problem);
|
||||
}
|
||||
|
||||
/** This method will optimize
|
||||
|
@ -207,7 +207,7 @@ public class Tribes implements InterfaceOptimizer, java.io.Serializable {
|
||||
m_problem = (AbstractOptimizationProblem)problem;
|
||||
range = null;
|
||||
if (problem instanceof InterfaceHasInitRange) {
|
||||
initRange = ((InterfaceHasInitRange)problem).getInitRange();
|
||||
initRange = (double[][])((InterfaceHasInitRange)problem).getInitRange();
|
||||
}
|
||||
Population pop = new Population(1);
|
||||
problem.initPopulation(pop);
|
||||
|
@ -956,7 +956,7 @@ v[d] = cmin * v[d];
|
||||
}
|
||||
}
|
||||
|
||||
public void defaultInit() {
|
||||
public void defaultInit(InterfaceOptimizationProblem prob) {
|
||||
// shouldnt be called as we are beyond the EvA framework in this class
|
||||
for (int i = 0; i < this.position.x.length; i++) {
|
||||
this.position.x[0] = 0.;
|
||||
|
Loading…
x
Reference in New Issue
Block a user