Changeset 13361 for branches/ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/EvaluationTracker.cs
- Timestamp:
- 11/24/15 16:01:02 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/EvaluationTracker.cs
r13339 r13361 22 22 23 23 using System; 24 using HeuristicLab.Common;24 using System.Collections.Generic; 25 25 using HeuristicLab.Core; 26 using HeuristicLab.Data;27 26 using HeuristicLab.Encodings.BinaryVectorEncoding; 28 27 using HeuristicLab.Optimization; 29 using HeuristicLab.Parameters;30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;31 28 32 29 namespace HeuristicLab.Algorithms.ParameterlessPopulationPyramid { … … 34 31 // B. W. Goldman and W. F. Punch, "Parameter-less Population Pyramid," GECCO, pp. 785–792, 2014 35 32 // and the original source code in C++11 available from: https://github.com/brianwgoldman/Parameter-less_Population_Pyramid 36 internal sealed class EvaluationTracker : SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector> {37 private readonly ISingleObjectiveProblem <BinaryVectorEncoding, BinaryVector> problem;33 internal sealed class EvaluationTracker : ISingleObjectiveProblemDefinition<BinaryVectorEncoding, BinaryVector> { 34 private readonly ISingleObjectiveProblemDefinition<BinaryVectorEncoding, BinaryVector> problem; 38 35 39 36 private int maxEvaluations; … … 60 57 } 61 58 62 public newBinaryVectorEncoding Encoding {59 public BinaryVectorEncoding Encoding { 63 60 get { return problem.Encoding; } 64 61 } 65 62 #endregion 66 63 67 [StorableConstructor] 68 private EvaluationTracker(bool deserializing) : base(deserializing) { } 69 private EvaluationTracker(EvaluationTracker original, Cloner cloner) 70 : base(original, cloner) { 71 problem = cloner.Clone(original.problem); 72 maxEvaluations = original.maxEvaluations; 73 BestQuality = original.BestQuality; 74 Evaluations = original.Evaluations; 75 BestFoundOnEvaluation = original.BestFoundOnEvaluation; 76 BestSolution = cloner.Clone(BestSolution); 77 } 78 public override IDeepCloneable Clone(Cloner cloner) { 79 return new EvaluationTracker(this, cloner); 80 } 81 public EvaluationTracker(ISingleObjectiveProblem<BinaryVectorEncoding, BinaryVector> problem, int maxEvaluations) { 64 public EvaluationTracker(ISingleObjectiveProblemDefinition<BinaryVectorEncoding, BinaryVector> problem, int maxEvaluations) { 82 65 this.problem = problem; 83 66 this.maxEvaluations = maxEvaluations; … … 86 69 Evaluations = 0; 87 70 BestFoundOnEvaluation = 0; 88 89 if (Parameters.ContainsKey("Maximization")) Parameters.Remove("Maximization");90 Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });91 71 } 92 72 93 public override double Evaluate(BinaryVector vector, IRandom random) { 73 74 75 public double Evaluate(BinaryVector vector, IRandom random) { 94 76 if (Evaluations >= maxEvaluations) throw new OperationCanceledException("Maximum Evaluation Limit Reached"); 95 77 Evaluations++; … … 103 85 } 104 86 105 public overridebool Maximization {87 public bool Maximization { 106 88 get { 107 89 if (problem == null) return false; … … 110 92 } 111 93 112 public overridebool IsBetter(double quality, double bestQuality) {94 public bool IsBetter(double quality, double bestQuality) { 113 95 return problem.IsBetter(quality, bestQuality); 114 96 } 115 97 98 public void Analyze(BinaryVector[] individuals, double[] qualities, ResultCollection results, IRandom random) { 99 problem.Analyze(individuals, qualities, results, random); 100 } 101 102 public IEnumerable<BinaryVector> GetNeighbors(BinaryVector individual, IRandom random) { 103 return problem.GetNeighbors(individual, random); 104 } 116 105 } 117 106 }
Note: See TracChangeset
for help on using the changeset viewer.