Changeset 8589


Ignore:
Timestamp:
09/06/12 14:13:36 (7 years ago)
Author:
jkarder
Message:

#1727:

  • set the number of evaluated solutions to zero if the result is missing in the run
  • improved result lookup
Location:
branches/HeuristicLab.MetaOptimization (trunk integration)/HeuristicLab.Problems.MetaOptimization/3.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization (trunk integration)/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs

    r8576 r8589  
    182182          run.Name = string.Format("{0} Problem {1} Run {2}", parameterConfiguration.ParameterInfoString, problemIndex, repetitionIndex);
    183183
    184           qualities[problemIndex][repetitionIndex] = GetResultValue<DoubleValue>(run.Results, qualityMeasureName).Value;
    185           executionTimes[problemIndex][repetitionIndex] = (((TimeSpanValue)run.Results["Execution Time"]).Value);
    186           if (run.Results.ContainsKey("EvaluatedSolutions")) {
    187             evaluatedSolutions[problemIndex][repetitionIndex] = (((IntValue)run.Results["EvaluatedSolutions"]).Value);
    188           } else {
    189             evaluatedSolutions[problemIndex][repetitionIndex] = 1;
    190           }
     184          DoubleValue quality;
     185          if (TryGetResultValue(run.Results, qualityMeasureName, out quality))
     186            qualities[problemIndex][repetitionIndex] = quality.Value;
     187
     188          TimeSpanValue execTime;
     189          if (TryGetResultValue(run.Results, "Execution Time", out execTime))
     190            executionTimes[problemIndex][repetitionIndex] = execTime.Value;
     191
     192          IntValue evalSolutions;
     193          if (TryGetResultValue(run.Results, "EvaluatedSolutions", out evalSolutions))
     194            evaluatedSolutions[problemIndex][repetitionIndex] = evalSolutions.Value;
     195
    191196          runs.Add(run);
    192197        }
     
    236241
    237242      // in OSGA there are more subscopes, so be careful which to delete
    238       CurrentScope.SubScopes.RemoveAll(x => x.Variables.Count((v) => (v.Name == "RepetitionCount")) == 1);
     243      CurrentScope.SubScopes.RemoveAll(x => x.Variables.Count(v => (v.Name == "RepetitionCount")) == 1);
    239244
    240245      return base.Apply();
    241246    }
    242247
    243     private T1 GetResultValue<T1>(IDictionary<string, IItem> results, string resultName) {
    244       return (T1)results[resultName];
    245 
    246       //string separator = ".";
    247       //string[] tokens = resultName.Split(separator.ToCharArray());
    248 
    249       //IDictionary<string, IItem> currentResults = results;
    250       //IItem currentResult = null;
    251       //for (int i = 0; i < tokens.Length; i++) {
    252       //  if(currentResults == null)
    253       //    throw new KeyNotFoundException("Result value " + resultName + " was not found");
    254       //  if (currentResults.ContainsKey(tokens[i])) {
    255       //    currentResult = currentResults[tokens[i]];
    256       //    currentResults = currentResult as IDictionary<string, IItem>;
    257       //  } else {
    258       //    throw new KeyNotFoundException("Result value " + resultName + " was not found");
    259       //  }
    260       //}
    261       //return (T1)currentResult;
     248    private bool TryGetResultValue<T>(IDictionary<string, IItem> results, string resultName, out T resultValue) {
     249      IDictionary<string, IItem> currentResults = results;
     250      string[] tokens = resultName.Split('.');
     251      T currentResultValue = default(T);
     252      bool found = true;
     253
     254      foreach (var token in tokens) {
     255        if (currentResults != null && currentResults.ContainsKey(token)) {
     256          currentResultValue = (T)currentResults[token];
     257          currentResults = currentResultValue as IDictionary<string, IItem>;
     258        } else {
     259          found = false;
     260          break;
     261        }
     262      }
     263
     264      resultValue = found ? currentResultValue : default(T);
     265      return found;
    262266    }
    263267
  • branches/HeuristicLab.MetaOptimization (trunk integration)/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationUtil.cs

    r8576 r8589  
    7474        qualityDeviationsNormalized[i] = parameterConfigurationTree.QualityStandardDeviations[i] / referenceQualityDeviations[i];
    7575        evaluatedSolutionAveragesNormalized[i] = parameterConfigurationTree.AverageEvaluatedSolutions[i] / referenceEvaluatedSolutionAverages[i];
     76        if (double.IsNaN(evaluatedSolutionAveragesNormalized[i])) evaluatedSolutionAveragesNormalized[i] = 0.0;
    7677      }
    7778      parameterConfigurationTree.NormalizedQualityAverages = new DoubleArray(qualityAveragesNormalized);
Note: See TracChangeset for help on using the changeset viewer.