Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/12/10 11:34:13 (14 years ago)
Author:
cneumuel
Message:

#1215

  • enabled multiple problems
  • enabled n repetitions
  • improved results output
  • reduced memory footprint significantly
  • removed viewhost icons for less screen space waste
Location:
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestParameterConfigurationAnalyzer.cs

    r5023 r5087  
    4040    }
    4141
    42     public BestParameterConfigurationAnalyzer() : base() {
     42    public BestParameterConfigurationAnalyzer()
     43      : base() {
    4344      Parameters.Add(new ScopeTreeLookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "TODO The TSP solutions given in path representation from which the best solution should be analyzed."));
    4445      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "TODO The qualities of the TSP solutions which should be analyzed."));
     
    6364      ItemArray<ParameterConfigurationTree> parameterTrees = ParameterConfigurationParameter.ActualValue;
    6465
    65       int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
     66      int idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
    6667
    67       EngineAlgorithm bestAlg = ((EngineAlgorithm)((ParameterConfigurationTree)parameterTrees[i]).ActualValue.Value);
    68       Run bestRun = new Run(bestAlg);
    69       ((ParameterConfigurationTree)parameterTrees[i]).CollectResultValues(bestRun.Results);
    7068
    71       if (bestKnownQuality == null || qualities[i].Value < bestKnownQuality.Value) { // todo: respect Maximization:true/false
    72         BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
     69      ParameterConfigurationTree best = (ParameterConfigurationTree)parameterTrees[idxBest];
     70      IRun bestRun = new Run();
     71      best.CollectResultValues(bestRun.Results);
     72      best.CollectParameterValues(bestRun.Parameters);
     73
     74      if (bestKnownQuality == null || qualities[idxBest].Value < bestKnownQuality.Value) { // todo: respect Maximization:true/false
     75        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[idxBest].Value);
     76
    7377        BestKnownSolutionParameter.ActualValue = bestRun;
    7478      }
    7579
    76       IRun best = BestSolutionParameter.ActualValue;
    77       if (best == null) {
     80      if (BestSolutionParameter.ActualValue == null) {
    7881        BestSolutionParameter.ActualValue = bestRun;
    7982        results.Add(new Result("Best Parameter Settings", bestRun));
     
    8487
    8588      // population
     89
     90      int i = 0;
    8691      RunCollection rc = new RunCollection();
    8792      foreach (ParameterConfigurationTree pt in parameterTrees.OrderByDescending(x => x.BestQuality.Value)) { // todo: respect Maximization:true/false
    88         IAlgorithm alg = (IAlgorithm)pt.ActualValue.Value;
    89         alg.StoreAlgorithmInEachRun = false;
    90         IRun run = new Run(alg);
     93        IRun run = new Run();
     94        run.Name = string.Format("Individuum ({0})", i);
    9195        pt.CollectResultValues(run.Results);
     96        pt.CollectParameterValues(run.Parameters);
    9297        rc.Add(run);
     98        i++;
    9399      }
    94100      if (PopulationParameter.ActualValue == null) {
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurationTree.cs

    r5023 r5087  
    1313  [StorableClass]
    1414  public class ParameterConfigurationTree : ValueConfiguration {
    15     [Storable]
    16     public EngineAlgorithm Algorithm {
    17       get { return (EngineAlgorithm)base.ActualValue.Value; }
    18       set {
    19         base.ActualValue.Value = value;
    20       }
    21     }
     15    //[Storable]
     16    //public EngineAlgorithm Algorithm {
     17    //  get { return (EngineAlgorithm)base.ActualValue.Value; }
     18    //  set {
     19    //    base.ActualValue.Value = value;
     20    //  }
     21    //}
    2222
    2323    [Storable]
     
    4848      set { worstQuality = value; }
    4949    }
    50    
     50
    5151    [Storable]
    5252    private DoubleValue qualityVariance;
     
    5555      set { qualityVariance = value; }
    5656    }
    57    
     57
    5858    [Storable]
    5959    private DoubleValue qualityStandardDeviation;
     
    6262      set { qualityStandardDeviation = value; }
    6363    }
    64    
     64
    6565    [Storable]
    6666    private TimeSpanValue averageExecutionTime;
     
    7878
    7979    [Storable]
    80     public RunCollection Runs { get; set; }
    81    
     80    protected RunCollection runs;
     81    public RunCollection Runs {
     82      get { return runs; }
     83      set { runs = value; }
     84     }
     85
     86    protected IDictionary<string, IItem> parameters;
     87    public IDictionary<string, IItem> Parameters {
     88      get { return parameters; }
     89      set { parameters = value; }
     90    }
     91
    8292    #region constructors and cloning
    83     public ParameterConfigurationTree(EngineAlgorithm algorithm) : base(algorithm, algorithm.GetType()) {
     93    public ParameterConfigurationTree(EngineAlgorithm algorithm)
     94      : base(null, algorithm.GetType()) {
    8495      this.Optimize = true; // root must always be optimized
    8596      this.BestQuality = new DoubleValue();
     97      this.parameters = new Dictionary<string, IItem>();
     98
     99      PopulateParameterConfigurations(algorithm);
     100      Initialize();
    86101    }
    87102    public ParameterConfigurationTree() {
     
    90105    [StorableConstructor]
    91106    protected ParameterConfigurationTree(bool deserializing) : base(deserializing) { }
    92     protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner) : base(original, cloner) {
     107    protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner)
     108      : base(original, cloner) {
    93109      this.bestQuality = cloner.Clone(original.BestQuality);
    94       this.Algorithm.Prepare();
    95       this.Algorithm.Runs.Clear();
     110      this.parameters = new Dictionary<string, IItem>();
     111      foreach (var p in original.parameters) {
     112        this.parameters.Add(p.Key, cloner.Clone(p.Value));
     113      }
    96114      Initialize();
    97115    }
     
    121139    }
    122140
     141    public virtual void CollectParameterValues(IDictionary<string, IItem> values) {
     142      foreach (var p in parameters) {
     143        values.Add(p);
     144      }
     145    }
     146
    123147    #region Events
    124148    //public event EventHandler AlgorithmChanged;
     
    134158
    135159    //private void RegisterAlgorithmEvents() {
    136      
     160
    137161    //}
    138162    //private void DeregisterAlgorithmEvents() {
     
    151175    #endregion
    152176
     177    public override void Parameterize(IParameterizedItem item) {
     178      base.Parameterize(item);
     179      this.parameters.Clear();
     180      ((IAlgorithm)item).CollectParameterValues(this.Parameters);
     181    }
    153182  }
    154183}
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs

    r5023 r5087  
    281281    public void Randomize(IRandom random) {
    282282      if (Optimize) {
     283        foreach (var vc in this.ValueConfigurations.CheckedItems) {
     284          vc.Randomize(random);
     285        }
    283286        actualValueConfigurationIndex = random.Next(ValueConfigurations.CheckedItems.Count());
    284         this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).Randomize(random);
    285287        this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue;
    286288      }
     
    294296        actualValueConfigurationIndex = random.Next(ValueConfigurations.CheckedItems.Count());
    295297        this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue;
    296         this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).Mutate(random);
    297298      }
    298299    }
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs

    r5023 r5087  
    3434          if (optimize) {
    3535            ClearParameterConfigurations();
    36             PopulateParameterConfigurations();
     36            if (this.actualValue.Value is IParameterizedNamedItem) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem);
    3737          } else {
    3838            ClearParameterConfigurations();
     
    5353    [Storable]
    5454    protected ConstrainedValue actualValue;
    55     public ConstrainedValue ActualValue {
     55    public virtual ConstrainedValue ActualValue {
    5656      get { return actualValue; }
    5757      set {
     
    5959          ClearParameterConfigurations();
    6060          this.actualValue = value;
    61           PopulateParameterConfigurations();
     61          if (this.actualValue.Value is IParameterizedNamedItem) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem);
    6262          OnValueChanged();
    6363          OnToStringChanged();
     
    112112    #endregion
    113113
    114     protected virtual void PopulateParameterConfigurations() {
    115       if (this.actualValue.Value is IParameterizedNamedItem) {
    116         var parameterizedItem = this.actualValue.Value as IParameterizedNamedItem;
    117         foreach (var childParameter in parameterizedItem.Parameters) {
    118           var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
    119           if (pc != null) this.parameterConfigurations.Add(pc);
    120         }
     114    protected virtual void PopulateParameterConfigurations(IParameterizedNamedItem parameterizedItem) {
     115      foreach (var childParameter in parameterizedItem.Parameters) {
     116        var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
     117        if (pc != null) this.parameterConfigurations.Add(pc);
    121118      }
    122119    }
     
    195192    }
    196193
    197     public void Parameterize(IParameterizedItem item) {
     194    public virtual void Parameterize(IParameterizedItem item) {
    198195      foreach (IParameterConfiguration pc in this.ParameterConfigurations) {
    199196        pc.Parameterize((IValueParameter)item.Parameters[pc.ParameterName]);
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/MetaOptimizationEvaluator.cs

    r5023 r5087  
    6363
    6464    public override IOperation Apply() {
    65       EngineAlgorithm algorithm = (EngineAlgorithm)ParameterConfigurationParameter.ActualValue.ActualValue.Value;
     65      EngineAlgorithm algorithm = AlgorithmParameter.ActualValue;
     66      IItemList<ISingleObjectiveProblem> problems = ProblemsParameter.ActualValue;
    6667
    6768      // set parameters
    6869      ParameterConfigurationParameter.ActualValue.Parameterize(algorithm);
     70      algorithm.Problem = problems.First();
     71      algorithm.StoreAlgorithmInEachRun = false;
    6972
    7073      algorithmStopped = false;
     
    7376      List<double> qualities = new List<double>();
    7477      List<TimeSpan> executionTimes = new List<TimeSpan>();
     78      algorithm.Engine = new SequentialEngine.SequentialEngine();
    7579      algorithm.Prepare(true);
    7680
    77       for (int i = 0; i < Repetitions.Value; i++) {
    78         algorithm.Engine = new SequentialEngine.SequentialEngine();
    79         algorithm.Prepare();
    80         algorithm.Start();
    81         while (!algorithmStopped) {
    82           Thread.Sleep(200); // 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)
     81      foreach (ISingleObjectiveProblem problem in problems) {
     82        algorithm.Problem = problem;
     83
     84        for (int i = 0; i < Repetitions.Value; i++) {
     85          algorithm.Prepare();
     86          algorithm.Start();
     87          while (!algorithmStopped) {
     88            Thread.Sleep(200); // 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)
     89          }
     90          qualities.Add(((DoubleValue)algorithm.Results["BestQuality"].Value).Value);
     91          executionTimes.Add(algorithm.ExecutionTime);
     92
     93          // parameters will be stored in ParameterConfigurationTree anyway. they would be redundant in runs
     94          algorithm.Runs.Last().Parameters.Clear();
     95          // but keep the problem, since this differs in runs
     96          algorithm.Runs.Last().Parameters.Add("Problem", problem);
     97          algorithmStopped = false;
    8398        }
    84         qualities.Add(((DoubleValue)algorithm.Results["BestQuality"].Value).Value);
    85         executionTimes.Add(algorithm.ExecutionTime);
    8699
    87         algorithmStopped = false;
    88100      }
     101
     102
    89103      algorithm.Stopped -= new EventHandler(ActualValue_Stopped);
     104      algorithm.Prepare();
    90105
    91106      qualities = qualities.OrderBy(x => x).ToList();  // todo: respect Maximization:true/false
    92      
     107
    93108      ParameterConfigurationParameter.ActualValue.AverageExecutionTime = new TimeSpanValue(TimeSpan.FromMilliseconds(executionTimes.Average(t => t.TotalMilliseconds)));
    94109      ParameterConfigurationParameter.ActualValue.Repetitions = Repetitions;
     
    102117      double quality = ParameterConfigurationParameter.ActualValue.AverageQuality.Value; // todo: also include other measures (executiontime, variance)
    103118      this.QualityParameter.ActualValue = new DoubleValue(quality);
    104      
     119
    105120      return base.Apply();
    106121    }
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj

    r5023 r5087  
    7979    </Reference>
    8080    <Reference Include="HeuristicLab.SequentialEngine-3.3">
    81       <HintPath>..\..\HeuristicLab.MetaOptimization.Test\bin\Debug\HeuristicLab.SequentialEngine-3.3.dll</HintPath>
     81      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.SequentialEngine-3.3.dll</HintPath>
    8282    </Reference>
    8383    <Reference Include="System" />
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs

    r5009 r5087  
    151151    }
    152152    void BaseLevelAlgorithmParameter_ValueChanged(object sender, EventArgs e) {
    153       Algorithm.ProblemChanged += new EventHandler(BaseLevelAlgorithm_ProblemChanged); // when to deregister?
    154       BaseLevelAlgorithm_ProblemChanged(sender, e);
     153      AlgorithmParameterConfiguration = new ParameterConfigurationTree(Algorithm);
     154
     155      //Algorithm.ProblemChanged += new EventHandler(BaseLevelAlgorithm_ProblemChanged); // when to deregister?
     156      //BaseLevelAlgorithm_ProblemChanged(sender, e);
    155157    }
    156158
    157159    void BaseLevelAlgorithm_ProblemChanged(object sender, EventArgs e) {
    158       if (Algorithm != null && Algorithm.Problem != null) {
    159         AlgorithmParameterConfiguration = new ParameterConfigurationTree(Algorithm);
    160       }
     160      //if (Algorithm != null && Algorithm.Problem != null) {
     161      //  AlgorithmParameterConfiguration = new ParameterConfigurationTree(Algorithm);
     162      //}
    161163    }
    162164    #endregion
Note: See TracChangeset for help on using the changeset viewer.