Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/MetaOptimizationEvaluator.cs @ 4839

Last change on this file since 4839 was 4839, checked in by cneumuel, 13 years ago

#1215 worked on MetaOptimization

  • split configurations into ValueConfigurations and ParameterConfigurations
File size: 4.7 KB
Line 
1using System;
2using System.Threading;
3using HeuristicLab.Common;
4using HeuristicLab.Core;
5using HeuristicLab.Data;
6using HeuristicLab.Operators;
7using HeuristicLab.Optimization;
8using HeuristicLab.Parameters;
9using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
10
11namespace HeuristicLab.Problems.MetaOptimization {
12  /// <summary>
13  /// A base class for operators which evaluate TSP solutions.
14  /// </summary>
15  [Item("MetaOptimizationEvaluator", "A base class for operators which evaluate Meta Optimization solutions.")]
16  [StorableClass]
17  public class MetaOptimizationEvaluator : SingleSuccessorOperator, IMetaOptimizationEvaluator {
18    private const string RepetitionsParameterName = "Repetitions";
19
20    private bool algorithmStopped;
21
22    public ILookupParameter<DoubleValue> QualityParameter {
23      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
24    }
25    public ILookupParameter<IAlgorithm> AlgorithmParameter {
26      get { return (ILookupParameter<IAlgorithm>)Parameters["Algorithm"]; }
27    }
28    public ILookupParameter<IItemList<IProblem>> ProblemsParameter {
29      get { return (ILookupParameter<IItemList<IProblem>>)Parameters["Problems"]; }
30    }
31    public ILookupParameter<IParameterConfiguration> ParameterConfigurationParameter {
32      get { return (ILookupParameter<IParameterConfiguration>)Parameters["ParameterConfiguration"]; }
33    }
34    public ValueParameter<IntValue> RepetitionsParameter {
35      get { return (ValueParameter<IntValue>)Parameters[RepetitionsParameterName]; }
36    }
37
38    public IntValue Repetitions {
39      get { return RepetitionsParameter.Value; }
40      set { RepetitionsParameter.Value = value; }
41    }
42
43    public MetaOptimizationEvaluator() : base() {
44      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the ParameterVector."));
45      Parameters.Add(new LookupParameter<IAlgorithm>("Algorithm", "Missing description."));
46      Parameters.Add(new LookupParameter<IItemList<IProblem>>("Problems", "Missing description."));
47      Parameters.Add(new LookupParameter<IParameterConfiguration>("ParameterConfiguration", "Missing description."));
48      Parameters.Add(new ValueParameter<IntValue>(RepetitionsParameterName, "Number of evaluations for one individual.", new IntValue(3)));
49    }
50
51    [StorableConstructor]
52    protected MetaOptimizationEvaluator(bool deserializing) : base(deserializing) { }
53    protected MetaOptimizationEvaluator(MetaOptimizationEvaluator original, Cloner cloner)
54      : base(original, cloner) {
55      this.algorithmStopped = original.algorithmStopped;
56    }
57    public override IDeepCloneable Clone(Cloner cloner) {
58      return new MetaOptimizationEvaluator(this, cloner);
59    }
60
61    public override IOperation Apply() {
62      AlgorithmParameter.ActualValue.Prepare();
63      //ParameterizeAlgorithm();
64      //ParameterConfigurationParameter.ActualValue.Parameterize(AlgorithmParameter.ActualValue);
65      algorithmStopped = false;
66      AlgorithmParameter.ActualValue.Stopped += new EventHandler(ActualValue_Stopped);
67
68      double qualitySum = 0;
69
70      foreach (IProblem problem in ProblemsParameter.ActualValue) {
71        AlgorithmParameter.ActualValue.Problem = problem;
72        AlgorithmParameter.ActualValue.Start();
73        while (!algorithmStopped) {
74          Thread.Sleep(1000); // wait for algorithm to complete; do not rely on Algorithm.ExecutionState here, because change of ExecutionState happens before Run is added (which causes problems because Algorithm might get cloned when its started already)
75        }
76        AlgorithmParameter.ActualValue.Stopped -= new EventHandler(ActualValue_Stopped);
77        qualitySum += ((DoubleValue)AlgorithmParameter.ActualValue.Results["BestQuality"].Value).Value;
78      }
79
80      double qualityAvg = qualitySum / ProblemsParameter.ActualValue.Count;
81      this.QualityParameter.ActualValue = new DoubleValue(qualityAvg);
82
83      return base.Apply();
84    }
85
86    void ActualValue_Stopped(object sender, EventArgs e) {
87      algorithmStopped = true;
88    }
89
90    //private void ParameterizeAlgorithm() {
91    //  foreach (IParameterConfiguration parameter in ParameterVectorParameter.ActualValue) {
92    //    if (typeof(IAlgorithm).IsAssignableFrom(parameter.OperatorType)) {
93    //      this.AlgorithmParameter.ActualValue.Parameters[parameter.Parameter.Name].ActualValue = parameter.Parameter.ActualValue;
94    //    } else if (typeof(IProblem).IsAssignableFrom(parameter.OperatorType)) {
95    //      this.AlgorithmParameter.ActualValue.Problem.Parameters[parameter.Parameter.Name].ActualValue = parameter.Parameter.ActualValue;
96    //    }
97    //  }
98    //}
99  }
100}
Note: See TracBrowser for help on using the repository browser.