Making PBIL available from the Matlab interface.
This commit is contained in:
parent
947ee034bd
commit
b1a7fa7949
@ -36,8 +36,10 @@ import eva2.server.go.operators.selection.InterfaceSelection;
|
|||||||
import eva2.server.go.operators.selection.SelectBestIndividuals;
|
import eva2.server.go.operators.selection.SelectBestIndividuals;
|
||||||
import eva2.server.go.operators.terminators.CombinedTerminator;
|
import eva2.server.go.operators.terminators.CombinedTerminator;
|
||||||
import eva2.server.go.operators.terminators.EvaluationTerminator;
|
import eva2.server.go.operators.terminators.EvaluationTerminator;
|
||||||
|
import eva2.server.go.populations.PBILPopulation;
|
||||||
import eva2.server.go.populations.Population;
|
import eva2.server.go.populations.Population;
|
||||||
import eva2.server.go.problems.AbstractOptimizationProblem;
|
import eva2.server.go.problems.AbstractOptimizationProblem;
|
||||||
|
import eva2.server.go.problems.B1Problem;
|
||||||
import eva2.server.go.strategies.ClusterBasedNichingEA;
|
import eva2.server.go.strategies.ClusterBasedNichingEA;
|
||||||
import eva2.server.go.strategies.ClusteringHillClimbing;
|
import eva2.server.go.strategies.ClusteringHillClimbing;
|
||||||
import eva2.server.go.strategies.DifferentialEvolution;
|
import eva2.server.go.strategies.DifferentialEvolution;
|
||||||
@ -50,6 +52,7 @@ import eva2.server.go.strategies.InterfaceOptimizer;
|
|||||||
import eva2.server.go.strategies.MonteCarloSearch;
|
import eva2.server.go.strategies.MonteCarloSearch;
|
||||||
import eva2.server.go.strategies.MultiObjectiveEA;
|
import eva2.server.go.strategies.MultiObjectiveEA;
|
||||||
import eva2.server.go.strategies.ParticleSwarmOptimization;
|
import eva2.server.go.strategies.ParticleSwarmOptimization;
|
||||||
|
import eva2.server.go.strategies.PopulationBasedIncrementalLearning;
|
||||||
import eva2.server.go.strategies.SimulatedAnnealing;
|
import eva2.server.go.strategies.SimulatedAnnealing;
|
||||||
import eva2.server.go.strategies.Tribes;
|
import eva2.server.go.strategies.Tribes;
|
||||||
import eva2.server.modules.GOParameters;
|
import eva2.server.modules.GOParameters;
|
||||||
@ -104,6 +107,8 @@ public class OptimizerFactory {
|
|||||||
public final static int CMA_ES_IPOP = 11;
|
public final static int CMA_ES_IPOP = 11;
|
||||||
|
|
||||||
public final static int CBN_GA = 12;
|
public final static int CBN_GA = 12;
|
||||||
|
|
||||||
|
public final static int PBIL = 13;
|
||||||
|
|
||||||
public final static int defaultFitCalls = 10000;
|
public final static int defaultFitCalls = 10000;
|
||||||
|
|
||||||
@ -496,6 +501,41 @@ public class OptimizerFactory {
|
|||||||
return sa;
|
return sa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calling init here makes problems when using the Matlab interface.
|
||||||
|
*
|
||||||
|
* @param learningRate
|
||||||
|
* @param mutateSigma
|
||||||
|
* @param mutationRate
|
||||||
|
* @param positiveSamples
|
||||||
|
* @param selection
|
||||||
|
* @param popsize
|
||||||
|
* @param problem
|
||||||
|
* @param listener
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static final PopulationBasedIncrementalLearning createPBIL(
|
||||||
|
double learningRate, double mutateSigma, double mutationRate,
|
||||||
|
int positiveSamples, InterfaceSelection selection, int popsize,
|
||||||
|
AbstractOptimizationProblem problem, InterfacePopulationChangedEventListener listener) {
|
||||||
|
problem.initProblem();
|
||||||
|
PopulationBasedIncrementalLearning pbil = new PopulationBasedIncrementalLearning();
|
||||||
|
|
||||||
|
pbil.setLearningRate(learningRate);
|
||||||
|
pbil.setMutateSigma(mutateSigma);
|
||||||
|
pbil.setMutationRate(mutationRate);
|
||||||
|
pbil.setPopulation(new PBILPopulation(popsize));
|
||||||
|
pbil.setSelectionMethod(selection);
|
||||||
|
pbil.setPositiveSamples(positiveSamples);
|
||||||
|
|
||||||
|
pbil.addPopulationChangedEventListener(listener);
|
||||||
|
pbil.SetProblem(problem);
|
||||||
|
|
||||||
|
if (listener != null) listener.registerPopulationStateChanged(pbil.getPopulation(), "");
|
||||||
|
|
||||||
|
return pbil;
|
||||||
|
}
|
||||||
|
|
||||||
// /////////////////////////// Termination criteria
|
// /////////////////////////// Termination criteria
|
||||||
public static InterfaceTerminator makeDefaultTerminator() {
|
public static InterfaceTerminator makeDefaultTerminator() {
|
||||||
return new EvaluationTerminator(defaultFitCalls);
|
return new EvaluationTerminator(defaultFitCalls);
|
||||||
@ -547,6 +587,8 @@ public class OptimizerFactory {
|
|||||||
return cmaESIPOP(problem);
|
return cmaESIPOP(problem);
|
||||||
case CBN_GA:
|
case CBN_GA:
|
||||||
return cbnGA(problem);
|
return cbnGA(problem);
|
||||||
|
case PBIL:
|
||||||
|
return standardPBIL(problem);
|
||||||
default:
|
default:
|
||||||
System.err.println("Error: optimizer type " + optType
|
System.err.println("Error: optimizer type " + optType
|
||||||
+ " is unknown!");
|
+ " is unknown!");
|
||||||
@ -562,7 +604,8 @@ public class OptimizerFactory {
|
|||||||
*/
|
*/
|
||||||
public static String showOptimizers() {
|
public static String showOptimizers() {
|
||||||
return "1: Standard ES \n2: CMA-ES \n3: GA \n4: PSO \n5: DE \n6: Tribes \n7: Random (Monte Carlo) "
|
return "1: Standard ES \n2: CMA-ES \n3: GA \n4: PSO \n5: DE \n6: Tribes \n7: Random (Monte Carlo) "
|
||||||
+ "\n8: Hill-Climbing \n9: Cluster-based niching ES \n10: Clustering Hill-Climbing \n11: IPOP-CMA-ES.";
|
+ "\n8: Hill-Climbing \n9: Cluster-based niching ES \n10: Clustering Hill-Climbing \n11: IPOP-CMA-ES "
|
||||||
|
+ "\n12: Cluster-based niching GA \n13: PBIL";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1110,6 +1153,13 @@ public class OptimizerFactory {
|
|||||||
return makeParams(cbn, 100, problem, randSeed, makeDefaultTerminator());
|
return makeParams(cbn, 100, problem, randSeed, makeDefaultTerminator());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final GOParameters standardPBIL(AbstractOptimizationProblem problem) {
|
||||||
|
PopulationBasedIncrementalLearning pbil = createPBIL(0.04, 0.01, 0.5, 1,
|
||||||
|
new SelectBestIndividuals(), 50, problem, null);
|
||||||
|
|
||||||
|
return makeParams(pbil, pbil.getPopulation(), problem, randSeed, makeDefaultTerminator());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a standard clustering hill climbing employing simple ES mutation with adaptive
|
* Create a standard clustering hill climbing employing simple ES mutation with adaptive
|
||||||
* step size, starting in parallel 100 local searches and clustering intermediate populations
|
* step size, starting in parallel 100 local searches and clustering intermediate populations
|
||||||
|
@ -19,11 +19,15 @@ import wsi.ra.math.RNG;
|
|||||||
|
|
||||||
public class PBILPopulation extends Population implements Cloneable, java.io.Serializable {
|
public class PBILPopulation extends Population implements Cloneable, java.io.Serializable {
|
||||||
|
|
||||||
private double[] m_ProbabilityVector = new double[0];
|
private double[] m_ProbabilityVector = new double[1];
|
||||||
|
|
||||||
public PBILPopulation() {
|
public PBILPopulation() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PBILPopulation(int popSize) {
|
||||||
|
super(popSize);
|
||||||
|
}
|
||||||
|
|
||||||
public PBILPopulation(PBILPopulation population) {
|
public PBILPopulation(PBILPopulation population) {
|
||||||
this.m_Generation = population.m_Generation;
|
this.m_Generation = population.m_Generation;
|
||||||
this.m_FunctionCalls = population.m_FunctionCalls;
|
this.m_FunctionCalls = population.m_FunctionCalls;
|
||||||
@ -132,7 +136,7 @@ public class PBILPopulation extends Population implements Cloneable, java.io.Ser
|
|||||||
public void SetProbabilityVector(double[] pv) {
|
public void SetProbabilityVector(double[] pv) {
|
||||||
this.m_ProbabilityVector = pv;
|
this.m_ProbabilityVector = pv;
|
||||||
}
|
}
|
||||||
public double[] getProbabilityVector(double[] pv) {
|
public double[] getProbabilityVector() {
|
||||||
return this.m_ProbabilityVector;
|
return this.m_ProbabilityVector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
|
|||||||
private double m_MutationRate = 0.5;
|
private double m_MutationRate = 0.5;
|
||||||
private double m_MutateSigma = 0.01;
|
private double m_MutateSigma = 0.01;
|
||||||
private int m_NumberOfPositiveSamples = 1;
|
private int m_NumberOfPositiveSamples = 1;
|
||||||
|
private double[] m_initialProbabilities = ((PBILPopulation)m_Population).getProbabilityVector();
|
||||||
|
|
||||||
public PopulationBasedIncrementalLearning() {
|
public PopulationBasedIncrementalLearning() {
|
||||||
}
|
}
|
||||||
@ -59,6 +60,11 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
|
|||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
this.m_Problem.initPopulation(this.m_Population);
|
this.m_Problem.initPopulation(this.m_Population);
|
||||||
|
if ((m_initialProbabilities!=null) && (m_initialProbabilities.length==((PBILPopulation)m_Population).getProbabilityVector().length)) {
|
||||||
|
((PBILPopulation)m_Population).SetProbabilityVector(m_initialProbabilities);
|
||||||
|
} else {
|
||||||
|
if (m_initialProbabilities!=null) System.err.println("Warning: initial probability vector doesnt match in length!");
|
||||||
|
}
|
||||||
this.evaluatePopulation(this.m_Population);
|
this.evaluatePopulation(this.m_Population);
|
||||||
this.firePropertyChangedEvent(Population.nextGenerationPerformed);
|
this.firePropertyChangedEvent(Population.nextGenerationPerformed);
|
||||||
}
|
}
|
||||||
@ -308,4 +314,12 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
|
|||||||
public String positiveSamplesTipText() {
|
public String positiveSamplesTipText() {
|
||||||
return "The number of positive samples that update the PBIL vector.";
|
return "The number of positive samples that update the PBIL vector.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double[] getInitialProbabilities() {
|
||||||
|
return m_initialProbabilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInitialProbabilities(double[] probabilities) {
|
||||||
|
m_initialProbabilities = probabilities;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user