Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/28/15 14:41:03 (9 years ago)
Author:
abeham
Message:

#2431:

  • added ability to plot curves for multiple targets at once
  • fixed bug in IndexedDataTableView regarding log-scaling
  • added result that counts restarts
  • fixed bugs in IRRestarter
  • Set LineWidth = 2 in analyzers for chart
  • fixed bugs in RLD view
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PerformanceComparison/HeuristicLab.Analysis/3.3/Optimizers/IRRestarter.cs

    r12804 r12808  
    3333
    3434namespace HeuristicLab.Analysis {
    35   public enum TerminationCriterium { OnlyByTime, OnlyByEvaluations, OnlyByTarget, ByTargetAndTime, ByTargetAndEvaluations, WhicheverHitsFirst, WhicheverHitsLast }
     35  public enum TerminationCriterium { OnlyByTime, OnlyByEvaluations, OnlyByTarget, ByTargetAndTime, ByTargetAndEvaluations, ByTimeAndEvaluations, WhicheverHitsFirst, WhicheverHitsLast }
    3636  /// <summary>
    3737  /// A run in which an algorithm is executed for a certain maximum time only.
     
    4343    private const string ExecutionTimeResultName = "Execution Time";
    4444    private const string BestQualityResultName = "BestQuality";
     45    private const string RandomRestartsResultName = "RandomRestarts";
    4546
    4647    public string Filename { get; set; }
     
    153154    }
    154155
    155     private int lastAlgorithmEvaluatedSolutions;
    156     private int lastAlgorithmEvaluatedMoves;
    157156    [Storable]
    158157    private double evaluations;
     
    239238        return timeHit && evalHit && targetHit
    240239          || timeHit && (TerminationCriterium == TerminationCriterium.OnlyByTime
     240                      || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst
    241241                      || TerminationCriterium == TerminationCriterium.ByTargetAndTime
    242                       || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst)
     242                      || TerminationCriterium == TerminationCriterium.ByTimeAndEvaluations)
    243243          || evalHit && (TerminationCriterium == TerminationCriterium.OnlyByEvaluations
     244                      || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst
    244245                      || TerminationCriterium == TerminationCriterium.ByTargetAndEvaluations
    245                       || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst)
     246                      || TerminationCriterium == TerminationCriterium.ByTimeAndEvaluations)
    246247          || targetHit && (TerminationCriterium == TerminationCriterium.OnlyByTarget
    247248                        || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst
     
    267268      bestSoFar = original.bestSoFar;
    268269      lastAlgorithmExecutionTime = original.lastAlgorithmExecutionTime;
    269       lastAlgorithmEvaluatedSolutions = original.lastAlgorithmEvaluatedSolutions;
    270       lastAlgorithmEvaluatedMoves = original.lastAlgorithmEvaluatedMoves;
    271270
    272271      perClockAnalyzer = cloner.Clone(original.perClockAnalyzer);
     
    294293      bestSoFar = double.NaN;
    295294      lastAlgorithmExecutionTime = TimeSpan.Zero;
    296       lastAlgorithmEvaluatedSolutions = 0;
    297       lastAlgorithmEvaluatedMoves = 0;
    298295
    299296      perClockAnalyzer = new QualityPerClockAnalyzer();
     
    316313      bestSoFar = double.NaN;
    317314      lastAlgorithmExecutionTime = TimeSpan.Zero;
    318       lastAlgorithmEvaluatedSolutions = 0;
    319       lastAlgorithmEvaluatedMoves = 0;
    320315
    321316      perClockAnalyzer = new QualityPerClockAnalyzer();
     
    337332      bestSoFar = double.NaN;
    338333      lastAlgorithmExecutionTime = TimeSpan.Zero;
    339       lastAlgorithmEvaluatedSolutions = 0;
    340       lastAlgorithmEvaluatedMoves = 0;
    341334
    342335      perClockAnalyzer = new QualityPerClockAnalyzer();
     
    366359      BestSoFar = double.NaN;
    367360      lastAlgorithmExecutionTime = TimeSpan.Zero;
    368       lastAlgorithmEvaluatedSolutions = 0;
    369       lastAlgorithmEvaluatedMoves = 0;
    370361
    371362      CurrentRun = null;
     
    399390        CurrentRun.Results.Add(perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName, new IntValue(0));
    400391        CurrentRun.Results.Add(BestQualityResultName, new DoubleValue(Maximization ? double.MinValue : double.MaxValue));
     392        CurrentRun.Results.Add(RandomRestartsResultName, new IntValue(0));
    401393      }
    402394      Algorithm.Start();
     
    492484      algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred;
    493485      algorithm.ExecutionTimeChanged += Algorithm_ExecutionTimeChanged;
    494       algorithm.ExecutionStateChanged += Algorithm_ExecutionStateChanged;
    495486      algorithm.Paused += Algorithm_Paused;
    496487      algorithm.Prepared += Algorithm_Prepared;
    497       algorithm.Started += Algorithm_Started;
    498488      algorithm.Stopped += Algorithm_Stopped;
    499489      algorithm.ProblemChanged += Algorithm_ProblemChanged;
     
    503493      algorithm.ExceptionOccurred -= Algorithm_ExceptionOccurred;
    504494      algorithm.ExecutionTimeChanged -= Algorithm_ExecutionTimeChanged;
    505       algorithm.ExecutionStateChanged -= Algorithm_ExecutionStateChanged;
    506495      algorithm.Paused -= Algorithm_Paused;
    507496      algorithm.Prepared -= Algorithm_Prepared;
    508       algorithm.Started -= Algorithm_Started;
    509497      algorithm.Stopped -= Algorithm_Stopped;
    510498      algorithm.ProblemChanged -= Algorithm_ProblemChanged;
     
    514502    }
    515503    private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
    516       if (Algorithm.ExecutionState != ExecutionState.Started) return;
    517 
    518       if (ExecutionState == ExecutionState.Started)
    519         UpdateAlgorithmResults();
    520 
    521       if (IsFinished && ExecutionState != ExecutionState.Stopped) {
    522         Algorithm.Stop();
    523       }
    524       OnExecutionTimeChanged();
    525     }
    526 
    527     private void Algorithm_ExecutionStateChanged(object sender, EventArgs e) {
    528       //OnExecutionStateChanged();
     504      ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime;
     505      lastAlgorithmExecutionTime = Algorithm.ExecutionTime;
    529506    }
    530507    private void Algorithm_Paused(object sender, EventArgs e) {
    531       UpdateAlgorithmResults();
     508      ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime;
     509      lastAlgorithmExecutionTime = Algorithm.ExecutionTime;
    532510      OnPaused();
    533511    }
    534512    private void Algorithm_Prepared(object sender, EventArgs e) {
    535       lastAlgorithmEvaluatedSolutions = 0;
    536       lastAlgorithmEvaluatedMoves = 0;
    537513      lastAlgorithmExecutionTime = TimeSpan.Zero;
    538     }
    539     private void Algorithm_Started(object sender, EventArgs e) {
    540       //OnStarted();
    541514    }
    542515    private void Algorithm_Stopped(object sender, EventArgs e) {
    543516      var bestQuality = UpdateAlgorithmResults();
    544517
    545       var execTime = ((TimeSpanValue)currentRun.Results[ExecutionTimeResultName]).Value;
     518      var execTime = ((TimeSpanValue)CurrentRun.Results[ExecutionTimeResultName]).Value;
    546519      foreach (var result in Algorithm.Results) {
    547520        if (result.Name == perClockAnalyzer.QualityPerClockParameter.ResultName) {
    548           if (!currentRun.Results.ContainsKey(result.Name))
    549             currentRun.Results.Add(result.Name, (IItem)result.Value.Clone());
     521          if (!CurrentRun.Results.ContainsKey(result.Name))
     522            CurrentRun.Results.Add(result.Name, (IItem)result.Value.Clone());
    550523          else {
    551             var dt = (IndexedDataTable<double>)currentRun.Results[result.Name];
     524            var dt = (IndexedDataTable<double>)CurrentRun.Results[result.Name];
    552525            var best = dt.Rows.First().Values.Last().Item2;
    553526            var resultDt = (IndexedDataTable<double>)result.Value;
     
    560533          }
    561534        } else if (result.Name == perEvaluationsAnalyzer.QualityPerEvaluationsParameter.ResultName) {
    562           if (!currentRun.Results.ContainsKey(result.Name))
    563             currentRun.Results.Add(result.Name, (IItem)result.Value.Clone());
     535          if (!CurrentRun.Results.ContainsKey(result.Name))
     536            CurrentRun.Results.Add(result.Name, (IItem)result.Value.Clone());
    564537          else {
    565             var dt = (IndexedDataTable<double>)currentRun.Results[result.Name];
    566             var evalSols = ((IntValue)currentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]).Value;
    567             var evalMoves = ((IntValue)currentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]).Value;
     538            var dt = (IndexedDataTable<double>)CurrentRun.Results[result.Name];
     539            var evalSols = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]).Value;
     540            var evalMoves = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]).Value;
    568541            var best = dt.Rows.First().Values.Last().Item2;
    569542            var resultDt = (IndexedDataTable<double>)result.Value;
     
    576549          }
    577550        } else if (result.Name == perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName) {
    578           var evalSols = ((IntValue)currentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]);
    579           evalSols.Value += ((IntValue)result.Value).Value;
     551          var evalSols = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]).Value;
     552          CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName] = new IntValue(evalSols + ((IntValue)result.Value).Value);
    580553        } else if (result.Name == perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName) {
    581           var evalMoves = ((IntValue)currentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]);
    582           evalMoves.Value += ((IntValue)result.Value).Value;
     554          var evalMoves = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]).Value;
     555          CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName] = new IntValue(evalMoves + ((IntValue)result.Value).Value);
    583556        } else if (result.Name == perEvaluationsAnalyzer.BestQualityParameter.ActualName) {
    584           var best = ((DoubleValue)currentRun.Results[BestQualityResultName]).Value;
     557          var best = ((DoubleValue)CurrentRun.Results[BestQualityResultName]).Value;
    585558          if (Maximization && best < bestQuality || !Maximization && best > bestQuality)
    586             currentRun.Results[BestQualityResultName] = new DoubleValue(bestQuality);
     559            CurrentRun.Results[BestQualityResultName] = new DoubleValue(bestQuality);
    587560        } else if (result.Name.ToLower().EndsWith("solution") && BestSoFar == bestQuality) {
    588           if (currentRun.Results.ContainsKey(result.Name))
    589             currentRun.Results[result.Name] = (IItem)result.Value.Clone();
    590           else currentRun.Results.Add(result.Name, (IItem)result.Value.Clone());
     561          if (CurrentRun.Results.ContainsKey(result.Name))
     562            CurrentRun.Results[result.Name] = (IItem)result.Value.Clone();
     563          else CurrentRun.Results.Add(result.Name, (IItem)result.Value.Clone());
    591564        }
    592565      }
    593       currentRun.Results[ExecutionTimeResultName] = new TimeSpanValue(execTime + Algorithm.ExecutionTime);
     566      CurrentRun.Results[ExecutionTimeResultName] = new TimeSpanValue(execTime + Algorithm.ExecutionTime);
    594567
    595568      if (!forceStop && !IsFinished) {
     569        CurrentRun.Results[RandomRestartsResultName] = new IntValue(1 + ((IntValue)CurrentRun.Results[RandomRestartsResultName]).Value);
    596570        Algorithm.Prepare();
    597571        Algorithm.Start();
    598572      } else {
    599573        forceStop = false;
    600         Runs.Add(currentRun);
    601         currentRun = null;
     574        Runs.Add(CurrentRun);
    602575        Algorithm.Prepare(true);
    603576        ExecutionState = ExecutionState.Stopped;
     
    613586      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName, out evaluationsResult)) {
    614587        var evals = ((IntValue)evaluationsResult.Value).Value;
    615         Evaluations += evals - lastAlgorithmEvaluatedSolutions;
    616         lastAlgorithmEvaluatedSolutions = evals;
     588        Evaluations += evals;
    617589      }
    618590      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName, out evaluationsResult)) {
    619591        var evals = ((IntValue)evaluationsResult.Value).Value;
    620         Evaluations += moveCostPerSolution * (evals - lastAlgorithmEvaluatedMoves);
    621         lastAlgorithmEvaluatedMoves = evals;
     592        Evaluations += moveCostPerSolution * evals;
    622593      }
    623594      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.BestQualityParameter.ActualName, out evaluationsResult)) {
Note: See TracChangeset for help on using the changeset viewer.