Free cookie consent management tool by TermsFeed Policy Generator

source: branches/1614_GeneralizedQAP/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs @ 16749

Last change on this file since 16749 was 16103, checked in by abeham, 6 years ago

#1614: the exclusion of runs leads to somewhat unexpected results

File size: 1.9 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Globalization;
4using System.Linq;
5using HeuristicLab.Optimization;
6
7namespace HeuristicLab.Analysis {
8  public static class ExpectedRuntimeHelper {
9    public static ErtCalculationResult CalculateErt(IEnumerable<IEnumerable<Tuple<double, double>>> convGraphs, double target, bool maximization) {
10      var successful = new List<double>();
11      var unsuccessful = new List<double>();
12
13      foreach (var graph in convGraphs) {
14        var targetAchieved = false;
15        var lastEffort = double.MaxValue;
16        foreach (var v in graph) {
17          if (maximization && v.Item2 >= target || !maximization && v.Item2 <= target) {
18            successful.Add(v.Item1);
19            targetAchieved = true;
20            break;
21          }
22          lastEffort = v.Item1;
23        }
24        if (!targetAchieved) unsuccessful.Add(lastEffort);
25      }
26
27      var ert = double.PositiveInfinity;
28
29      var nRuns = successful.Count + unsuccessful.Count;
30      if (successful.Count > 0)
31        ert = (successful.Average() * nRuns) / successful.Count;
32      return new ErtCalculationResult(successful.Count, nRuns, ert);
33    }
34
35    public static ErtCalculationResult CalculateErt(List<IRun> runs, string indexedDataTableName, double target, bool maximization) {
36      return CalculateErt(runs.Select(r => ((IndexedDataTable<double>)r.Results[indexedDataTableName]).Rows.First().Values), target, maximization);
37    }
38  }
39
40  public struct ErtCalculationResult {
41    public readonly int SuccessfulRuns;
42    public readonly int TotalRuns;
43    public readonly double ExpectedRuntime;
44
45    public ErtCalculationResult(int successful, int total, double ert) {
46      SuccessfulRuns = successful;
47      TotalRuns = total;
48      ExpectedRuntime = ert;
49    }
50
51    public override string ToString() {
52      return ExpectedRuntime.ToString("##,0.0", CultureInfo.CurrentCulture.NumberFormat);
53    }
54  }
55}
Note: See TracBrowser for help on using the repository browser.