Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/17/17 13:01:00 (7 years ago)
Author:
abeham
Message:

#2701: disabled learning

  • updated HeuristicLab.Data to trunk
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/MemPRAlgorithm/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs

    r14420 r14680  
    3030using HeuristicLab.Analysis;
    3131using HeuristicLab.Collections;
     32using HeuristicLab.Common;
    3233using HeuristicLab.Core.Views;
    3334using HeuristicLab.Data;
     
    334335      // aggregating over multiple problem instances     
    335336      var maxEfforts = new Dictionary<ProblemDescription, double>();
     337      var worstKnowns = new Dictionary<ProblemDescription, double>();
    336338      double minEff = double.MaxValue, maxEff = double.MinValue;
    337339      foreach (var group in groupedRuns) {
     
    343345          var bestKnownTarget = problem.Value.Item1;
    344346          var max = problem.Key.IsMaximization();
    345           var worstTarget = (max ? (1 - targets.Max()) : (1 + targets.Max())) * bestKnownTarget;
    346           var bestTarget = (max ? (1 - targets.Min()) : (1 + targets.Min())) * bestKnownTarget;
     347          double worstTarget = 0, bestTarget = 0;
     348          if (bestKnownTarget > 0) {
     349            worstTarget = (max ? (1 - targets.Max()) : (1 + targets.Max())) * bestKnownTarget;
     350            bestTarget = (max ? (1 - targets.Min()) : (1 + targets.Min())) * bestKnownTarget;
     351          } else if (bestKnownTarget < 0) {
     352            worstTarget = (max ? (1 + targets.Max()) : (1 - targets.Max())) * bestKnownTarget;
     353            bestTarget = (max ? (1 + targets.Min()) : (1 - targets.Min())) * bestKnownTarget;
     354          } else {
     355            var initials = problem.Value.Item2.Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.First().Item2);
     356            var worstKnown = max ? initials.Min() : initials.Max();
     357            if (!worstKnown.IsAlmost(0)) {
     358              worstTarget = targets.Max() * worstKnown;
     359              bestTarget = targets.Min() * worstKnown;
     360              worstKnowns[problem.Key] = worstKnown;
     361            }
     362          }
    347363          foreach (var run in problem.Value.Item2) {
    348364            var row = ((IndexedDataTable<double>)run.Results[table]).Rows.First().Values;
     
    389405
    390406            if (aggregateTargetsCheckBox.Checked) {
    391               var length = CalculateHitsForAllTargets(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, maxEff);
     407              var length = CalculateHitsForAllTargets(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, worstKnowns.ContainsKey(problem.Key) ? worstKnowns[problem.Key] : 0, maxEff);
    392408              maxLength = Math.Max(length, maxLength);
    393409            } else {
    394               CalculateHitsForEachTarget(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, maxEff);
     410              CalculateHitsForEachTarget(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, worstKnowns.ContainsKey(problem.Key) ? worstKnowns[problem.Key] : 0, maxEff);
    395411            }
    396412            noRuns++;
     
    495511                                            Dictionary<string, SortedList<double, int>> misses,
    496512                                            IndexedDataRow<double> row, ProblemDescription problem,
    497                                             string group, double bestTarget, double maxEffort) {
    498       foreach (var t in targets.Select(x => Tuple.Create((problem.IsMaximization() ? (1 - x) : (1 + x)) * bestTarget, x))) {
     513                                            string group, double bestTarget, double worstKnown, double maxEffort) {
     514      var max = problem.IsMaximization();
     515      var targetValues = targets.Select(t => {
     516        double target = 0;
     517        if (bestTarget > 0) {
     518          target = (max ? (1 - t) : (1 + t)) * bestTarget;
     519        } else if (bestTarget < 0) {
     520          target = (max ? (1 + t) : (1 - t)) * bestTarget;
     521        } else {
     522          if (!worstKnown.IsAlmost(0))
     523            target = t * worstKnown;
     524        }
     525        return Tuple.Create(target, t);
     526      });
     527      foreach (var t in targetValues) {
    499528        var l = t.Item1;
    500529        var key = group + "_" + (t.Item2 * 100) + "%_" + l;
     
    515544        }
    516545        if (!hit) {
    517           var max = Math.Min(row.Values.Last().Item1, maxEffort);
    518           if (misses[key].ContainsKey(max))
    519             misses[key][max]++;
    520           else misses[key][max] = 1;
     546          var maxEff = Math.Min(row.Values.Last().Item1, maxEffort);
     547          if (misses[key].ContainsKey(maxEff))
     548            misses[key][maxEff]++;
     549          else misses[key][maxEff] = 1;
    521550        }
    522551      }
     
    526555                                              Dictionary<string, SortedList<double, int>> misses,
    527556                                              IndexedDataRow<double> row, ProblemDescription problem,
    528                                               string group, double bestTarget, double maxEffort) {
     557                                              string group, double bestTarget, double worstKnown, double maxEffort) {
    529558      var values = row.Values;
    530559      if (!hits.ContainsKey(group)) {
     
    536565      var j = 0;
    537566      while (i < targets.Length && j < values.Count) {
    538         var target = (problem.IsMaximization() ? (1 - targets[i]) : (1 + targets[i])) * bestTarget;
     567        var max = problem.IsMaximization();
     568        double target = 0;
     569        if (bestTarget > 0) {
     570          target = (max ? (1 - targets[i]) : (1 + targets[i])) * bestTarget;
     571        } else if (bestTarget < 0) {
     572          target = (max ? (1 + targets[i]) : (1 - targets[i])) * bestTarget;
     573        } else {
     574          if (!worstKnown.IsAlmost(0))
     575            target = targets[i] * worstKnown;
     576        }
    539577        var current = values[j];
    540578        if (current.Item1 > maxEffort) break;
Note: See TracChangeset for help on using the changeset viewer.