Making PBIL available from the Matlab interface.
This commit is contained in:
		@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user