parent
e18f9e3b38
commit
62e436274c
@ -26,7 +26,6 @@ import eva2.optimization.population.Population;
|
|||||||
import eva2.optimization.population.PopulationInterface;
|
import eva2.optimization.population.PopulationInterface;
|
||||||
import eva2.optimization.population.SolutionSet;
|
import eva2.optimization.population.SolutionSet;
|
||||||
import eva2.problems.*;
|
import eva2.problems.*;
|
||||||
import eva2.tools.SelectedTag;
|
|
||||||
import eva2.tools.chart2d.*;
|
import eva2.tools.chart2d.*;
|
||||||
import eva2.util.annotation.Description;
|
import eva2.util.annotation.Description;
|
||||||
import eva2.util.annotation.Hidden;
|
import eva2.util.annotation.Hidden;
|
||||||
|
@ -17,7 +17,6 @@ import eva2.optimization.population.Population;
|
|||||||
import eva2.optimization.population.PopulationInterface;
|
import eva2.optimization.population.PopulationInterface;
|
||||||
import eva2.optimization.population.SolutionSet;
|
import eva2.optimization.population.SolutionSet;
|
||||||
import eva2.problems.*;
|
import eva2.problems.*;
|
||||||
import eva2.tools.SelectedTag;
|
|
||||||
import eva2.tools.chart2d.DPoint;
|
import eva2.tools.chart2d.DPoint;
|
||||||
import eva2.tools.chart2d.DPointSet;
|
import eva2.tools.chart2d.DPointSet;
|
||||||
import eva2.tools.math.Jama.Matrix;
|
import eva2.tools.math.Jama.Matrix;
|
||||||
|
@ -4,7 +4,6 @@ import eva2.OptimizerFactory;
|
|||||||
import eva2.OptimizerRunnable;
|
import eva2.OptimizerRunnable;
|
||||||
import eva2.gui.BeanInspector;
|
import eva2.gui.BeanInspector;
|
||||||
import eva2.gui.editor.GenericObjectEditor;
|
import eva2.gui.editor.GenericObjectEditor;
|
||||||
import eva2.optimization.population.InterfacePopulationChangedEventListener;
|
|
||||||
import eva2.optimization.individuals.AbstractEAIndividual;
|
import eva2.optimization.individuals.AbstractEAIndividual;
|
||||||
import eva2.optimization.individuals.InterfaceDataTypeDouble;
|
import eva2.optimization.individuals.InterfaceDataTypeDouble;
|
||||||
import eva2.optimization.modules.OptimizationParameters;
|
import eva2.optimization.modules.OptimizationParameters;
|
||||||
@ -12,6 +11,7 @@ import eva2.optimization.operator.distancemetric.PhenotypeMetric;
|
|||||||
import eva2.optimization.operator.postprocess.PostProcess;
|
import eva2.optimization.operator.postprocess.PostProcess;
|
||||||
import eva2.optimization.operator.terminators.EvaluationTerminator;
|
import eva2.optimization.operator.terminators.EvaluationTerminator;
|
||||||
import eva2.optimization.operator.terminators.InterfaceTerminator;
|
import eva2.optimization.operator.terminators.InterfaceTerminator;
|
||||||
|
import eva2.optimization.population.InterfacePopulationChangedEventListener;
|
||||||
import eva2.optimization.population.InterfaceSolutionSet;
|
import eva2.optimization.population.InterfaceSolutionSet;
|
||||||
import eva2.optimization.population.Population;
|
import eva2.optimization.population.Population;
|
||||||
import eva2.optimization.population.SolutionSet;
|
import eva2.optimization.population.SolutionSet;
|
||||||
@ -19,11 +19,11 @@ import eva2.problems.AbstractOptimizationProblem;
|
|||||||
import eva2.problems.F1Problem;
|
import eva2.problems.F1Problem;
|
||||||
import eva2.problems.InterfaceOptimizationProblem;
|
import eva2.problems.InterfaceOptimizationProblem;
|
||||||
import eva2.tools.Pair;
|
import eva2.tools.Pair;
|
||||||
import eva2.tools.SelectedTag;
|
|
||||||
import eva2.tools.math.Mathematics;
|
import eva2.tools.math.Mathematics;
|
||||||
import eva2.tools.math.RNG;
|
import eva2.tools.math.RNG;
|
||||||
import eva2.util.annotation.Description;
|
import eva2.util.annotation.Description;
|
||||||
import eva2.util.annotation.Hidden;
|
import eva2.util.annotation.Hidden;
|
||||||
|
import eva2.util.annotation.Parameter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@ -45,6 +45,8 @@ import java.util.ArrayList;
|
|||||||
@Description("A scatter search variant after Rodiguez-Fernandez, J.Egea and J.Banga: Novel metaheuristic for parameter estimation in nonlinear dynamic biological systems, BMC Bioinf. 2006")
|
@Description("A scatter search variant after Rodiguez-Fernandez, J.Egea and J.Banga: Novel metaheuristic for parameter estimation in nonlinear dynamic biological systems, BMC Bioinf. 2006")
|
||||||
public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable, InterfacePopulationChangedEventListener {
|
public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable, InterfacePopulationChangedEventListener {
|
||||||
|
|
||||||
|
public enum LocalSearchMethod { HillClimber, NelderMead }
|
||||||
|
|
||||||
transient private InterfacePopulationChangedEventListener listener = null;
|
transient private InterfacePopulationChangedEventListener listener = null;
|
||||||
private String identifier = "ScatterSearch";
|
private String identifier = "ScatterSearch";
|
||||||
private AbstractOptimizationProblem optimizationProblem = new F1Problem();
|
private AbstractOptimizationProblem optimizationProblem = new F1Problem();
|
||||||
@ -61,7 +63,7 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
private int probDim = -1;
|
private int probDim = -1;
|
||||||
private boolean firstTime = true;
|
private boolean firstTime = true;
|
||||||
private int lastImprovementCount = 0;
|
private int lastImprovementCount = 0;
|
||||||
private SelectedTag localSearchMethod = new SelectedTag(1, "Hill-Climber", "Nelder-Mead");
|
private LocalSearchMethod localSearchMethod = LocalSearchMethod.NelderMead;
|
||||||
// simulate an EvA generational cycle
|
// simulate an EvA generational cycle
|
||||||
private int generationCycle = 50;
|
private int generationCycle = 50;
|
||||||
private int fitCrit = -1;
|
private int fitCrit = -1;
|
||||||
@ -372,7 +374,7 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Pair<AbstractEAIndividual, Integer> localSolver(AbstractEAIndividual cand, int hcSteps) {
|
private Pair<AbstractEAIndividual, Integer> localSolver(AbstractEAIndividual cand, int hcSteps) {
|
||||||
if (localSearchMethod.getSelectedTagID() == 0) {
|
if (localSearchMethod == LocalSearchMethod.HillClimber) {
|
||||||
return localSolverHC(cand, hcSteps);
|
return localSolverHC(cand, hcSteps);
|
||||||
} else {
|
} else {
|
||||||
return PostProcess.localSolverNMS(cand, hcSteps, nelderMeadInitPerturbation, optimizationProblem);
|
return PostProcess.localSolverNMS(cand, hcSteps, nelderMeadInitPerturbation, optimizationProblem);
|
||||||
@ -715,7 +717,7 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean useLSHC() {
|
private boolean useLSHC() {
|
||||||
return localSearchMethod.getSelectedTagID() == 0;
|
return localSearchMethod == LocalSearchMethod.NelderMead;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -728,6 +730,7 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param doLocalSearch the doLocalSearch to set
|
* @param doLocalSearch the doLocalSearch to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "Perform a local search step")
|
||||||
public void setDoLocalSearch(boolean doLocalSearch) {
|
public void setDoLocalSearch(boolean doLocalSearch) {
|
||||||
this.doLocalSearch = doLocalSearch;
|
this.doLocalSearch = doLocalSearch;
|
||||||
setLSShowProps();
|
setLSShowProps();
|
||||||
@ -741,10 +744,6 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
GenericObjectEditor.setShowProperty(this.getClass(), "localSearchMethod", doLocalSearch);
|
GenericObjectEditor.setShowProperty(this.getClass(), "localSearchMethod", doLocalSearch);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String doLocalSearchTipText() {
|
|
||||||
return "Perform a local search step";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the refSetSize
|
* @return the refSetSize
|
||||||
*/
|
*/
|
||||||
@ -755,14 +754,11 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param refSetSize the refSetSize to set
|
* @param refSetSize the refSetSize to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "Size of the reference set from which new candidates are created (similar to population size)")
|
||||||
public void setRefSetSize(int refSetSize) {
|
public void setRefSetSize(int refSetSize) {
|
||||||
this.refSetSize = refSetSize;
|
this.refSetSize = refSetSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String refSetSizeTipText() {
|
|
||||||
return "Size of the reference set from which new candidates are created (similar to population size)";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the localSearchSteps
|
* @return the localSearchSteps
|
||||||
*/
|
*/
|
||||||
@ -773,14 +769,11 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param localSearchSteps the localSearchSteps to set
|
* @param localSearchSteps the localSearchSteps to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "Define the number of evaluations performed for one local search.")
|
||||||
public void setLocalSearchSteps(int localSearchSteps) {
|
public void setLocalSearchSteps(int localSearchSteps) {
|
||||||
this.localSearchSteps = localSearchSteps;
|
this.localSearchSteps = localSearchSteps;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String localSearchStepsTipText() {
|
|
||||||
return "Define the number of evaluations performed for one local search.";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the localSearchFitnessFilter
|
* @return the localSearchFitnessFilter
|
||||||
*/
|
*/
|
||||||
@ -791,16 +784,11 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param localSearchFitnessFilter the localSearchFitnessFilter to set
|
* @param localSearchFitnessFilter the localSearchFitnessFilter to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "Local search is performed only if the fitness is better than this value (absolute crit) or by this factor * (worst-best) fitness (relative).")
|
||||||
public void setLocalSearchFitnessFilter(double localSearchFitnessFilter) {
|
public void setLocalSearchFitnessFilter(double localSearchFitnessFilter) {
|
||||||
this.localSearchFitnessFilter = localSearchFitnessFilter;
|
this.localSearchFitnessFilter = localSearchFitnessFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String localSearchFitnessFilterTipText() {
|
|
||||||
return "Local search is performed only if the fitness is better than this value (absolute crit) or by this factor * (worst-best) fitness (relative).";
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////7
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method performs a scatter search runnable.
|
* This method performs a scatter search runnable.
|
||||||
*/
|
*/
|
||||||
@ -861,14 +849,11 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param relativeFitCriterion the relativeFitCriterion to set
|
* @param relativeFitCriterion the relativeFitCriterion to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "If selected, local search will be triggered by relative fitness, else by absolute")
|
||||||
public void setLocalSearchRelativeFilter(boolean relativeFitCriterion) {
|
public void setLocalSearchRelativeFilter(boolean relativeFitCriterion) {
|
||||||
this.relativeFitCriterion = relativeFitCriterion;
|
this.relativeFitCriterion = relativeFitCriterion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String localSearchRelativeFilterTipText() {
|
|
||||||
return "If selected, local search will be triggered by relative fitness, else by absolute";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the nelderMeadInitPerturbation
|
* @return the nelderMeadInitPerturbation
|
||||||
*/
|
*/
|
||||||
@ -879,33 +864,27 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param nelderMeadInitPerturbation the nelderMeadInitPerturbation to set
|
* @param nelderMeadInitPerturbation the nelderMeadInitPerturbation to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "The relative range of the initial perturbation for creating the initial Nelder-Mead-Simplex")
|
||||||
public void setNelderMeadInitPerturbation(double nelderMeadInitPerturbation) {
|
public void setNelderMeadInitPerturbation(double nelderMeadInitPerturbation) {
|
||||||
this.nelderMeadInitPerturbation = nelderMeadInitPerturbation;
|
this.nelderMeadInitPerturbation = nelderMeadInitPerturbation;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String nelderMeadInitPerturbationTipText() {
|
|
||||||
return "The relative range of the initial perturbation for creating the initial Nelder-Mead-Simplex";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the localSearchMethod
|
* @return the localSearchMethod
|
||||||
*/
|
*/
|
||||||
public SelectedTag getLocalSearchMethod() {
|
public LocalSearchMethod getLocalSearchMethod() {
|
||||||
return localSearchMethod;
|
return localSearchMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param localSearchMethod the localSearchMethod to set
|
* @param localSearchMethod the localSearchMethod to set
|
||||||
*/
|
*/
|
||||||
public void setLocalSearchMethod(SelectedTag localSearchMethod) {
|
@Parameter(description = "The local search method to use")
|
||||||
|
public void setLocalSearchMethod(LocalSearchMethod localSearchMethod) {
|
||||||
this.localSearchMethod = localSearchMethod;
|
this.localSearchMethod = localSearchMethod;
|
||||||
setLSShowProps();
|
setLSShowProps();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String localSearchMethodTipText() {
|
|
||||||
return "The local search method to use";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the poolSize
|
* @return the poolSize
|
||||||
*/
|
*/
|
||||||
@ -916,35 +895,26 @@ public class ScatterSearch implements InterfaceOptimizer, java.io.Serializable,
|
|||||||
/**
|
/**
|
||||||
* @param poolSize the poolSize to set
|
* @param poolSize the poolSize to set
|
||||||
*/
|
*/
|
||||||
|
@Parameter(description = "The number of individuals created in the diversification step")
|
||||||
public void setPoolSize(int poolSize) {
|
public void setPoolSize(int poolSize) {
|
||||||
this.poolSize = poolSize;
|
this.poolSize = poolSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String poolSizeTipText() {
|
|
||||||
return "The number of individuals created in the diversification step";
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getImprovementEpsilon() {
|
public double getImprovementEpsilon() {
|
||||||
return improvementEpsilon;
|
return improvementEpsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Parameter(description = "Minimal relative fitness improvement for a candidate to enter the refSet - set to zero to deactivate.")
|
||||||
public void setImprovementEpsilon(double improvementEpsilon) {
|
public void setImprovementEpsilon(double improvementEpsilon) {
|
||||||
this.improvementEpsilon = improvementEpsilon;
|
this.improvementEpsilon = improvementEpsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String improvementEpsilonTipText() {
|
|
||||||
return "Minimal relative fitness improvement for a candidate to enter the refSet - set to zero to deactivate.";
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getMinDiversityEpsilon() {
|
public double getMinDiversityEpsilon() {
|
||||||
return minDiversityEpsilon;
|
return minDiversityEpsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Parameter(description = "Minimal distance to other individuals in the refSet for a candidate to enter the refSet - set to zero to deactivate.")
|
||||||
public void setMinDiversityEpsilon(double minDiversityEpsilon) {
|
public void setMinDiversityEpsilon(double minDiversityEpsilon) {
|
||||||
this.minDiversityEpsilon = minDiversityEpsilon;
|
this.minDiversityEpsilon = minDiversityEpsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String minDiversityEpsilonTipText() {
|
|
||||||
return "Minimal distance to other individuals in the refSet for a candidate to enter the refSet - set to zero to deactivate.";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user