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.terminators.CombinedTerminator;
|
||||
import eva2.server.go.operators.terminators.EvaluationTerminator;
|
||||
import eva2.server.go.populations.PBILPopulation;
|
||||
import eva2.server.go.populations.Population;
|
||||
import eva2.server.go.problems.AbstractOptimizationProblem;
|
||||
import eva2.server.go.problems.B1Problem;
|
||||
import eva2.server.go.strategies.ClusterBasedNichingEA;
|
||||
import eva2.server.go.strategies.ClusteringHillClimbing;
|
||||
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.MultiObjectiveEA;
|
||||
import eva2.server.go.strategies.ParticleSwarmOptimization;
|
||||
import eva2.server.go.strategies.PopulationBasedIncrementalLearning;
|
||||
import eva2.server.go.strategies.SimulatedAnnealing;
|
||||
import eva2.server.go.strategies.Tribes;
|
||||
import eva2.server.modules.GOParameters;
|
||||
@ -104,6 +107,8 @@ public class OptimizerFactory {
|
||||
public final static int CMA_ES_IPOP = 11;
|
||||
|
||||
public final static int CBN_GA = 12;
|
||||
|
||||
public final static int PBIL = 13;
|
||||
|
||||
public final static int defaultFitCalls = 10000;
|
||||
|
||||
@ -496,6 +501,41 @@ public class OptimizerFactory {
|
||||
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
|
||||
public static InterfaceTerminator makeDefaultTerminator() {
|
||||
return new EvaluationTerminator(defaultFitCalls);
|
||||
@ -547,6 +587,8 @@ public class OptimizerFactory {
|
||||
return cmaESIPOP(problem);
|
||||
case CBN_GA:
|
||||
return cbnGA(problem);
|
||||
case PBIL:
|
||||
return standardPBIL(problem);
|
||||
default:
|
||||
System.err.println("Error: optimizer type " + optType
|
||||
+ " is unknown!");
|
||||
@ -562,7 +604,8 @@ public class OptimizerFactory {
|
||||
*/
|
||||
public static String showOptimizers() {
|
||||
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());
|
||||
}
|
||||
|
||||
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
|
||||
* 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 {
|
||||
|
||||
private double[] m_ProbabilityVector = new double[0];
|
||||
private double[] m_ProbabilityVector = new double[1];
|
||||
|
||||
public PBILPopulation() {
|
||||
}
|
||||
|
||||
public PBILPopulation(int popSize) {
|
||||
super(popSize);
|
||||
}
|
||||
|
||||
public PBILPopulation(PBILPopulation population) {
|
||||
this.m_Generation = population.m_Generation;
|
||||
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) {
|
||||
this.m_ProbabilityVector = pv;
|
||||
}
|
||||
public double[] getProbabilityVector(double[] pv) {
|
||||
public double[] getProbabilityVector() {
|
||||
return this.m_ProbabilityVector;
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,7 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
|
||||
private double m_MutationRate = 0.5;
|
||||
private double m_MutateSigma = 0.01;
|
||||
private int m_NumberOfPositiveSamples = 1;
|
||||
private double[] m_initialProbabilities = ((PBILPopulation)m_Population).getProbabilityVector();
|
||||
|
||||
public PopulationBasedIncrementalLearning() {
|
||||
}
|
||||
@ -59,6 +60,11 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
|
||||
|
||||
public void init() {
|
||||
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.firePropertyChangedEvent(Population.nextGenerationPerformed);
|
||||
}
|
||||
@ -308,4 +314,12 @@ public class PopulationBasedIncrementalLearning implements InterfaceOptimizer, j
|
||||
public String positiveSamplesTipText() {
|
||||
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