Changeset 6018 for branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs
- Timestamp:
- 04/17/11 18:22:28 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs
r5653 r6018 2 2 using System.Collections.Generic; 3 3 using System.Linq; 4 using System.Text; 4 using HeuristicLab.Common; 5 using HeuristicLab.Core; 6 using HeuristicLab.Data; 5 7 using HeuristicLab.Operators; 8 using HeuristicLab.Optimization; 9 using HeuristicLab.Parameters; 6 10 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 7 using HeuristicLab.Core;8 using HeuristicLab.Common;9 using HeuristicLab.Parameters;10 using HeuristicLab.Data;11 using HeuristicLab.Optimization;12 11 13 12 namespace HeuristicLab.Problems.MetaOptimization { … … 32 31 get { return (ILookupParameter<IItemList<IProblem>>)Parameters[MetaOptimizationProblem.ProblemsParameterName]; } 33 32 } 34 public LookupParameter<DoubleArray> ProblemQualityReferencesParameter { 35 get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityReferences"]; } 33 public LookupParameter<DoubleArray> ReferenceQualityAveragesParameter { 34 get { return (LookupParameter<DoubleArray>)Parameters["ReferenceQualityAverages"]; } 35 } 36 public LookupParameter<DoubleArray> ReferenceQualityDeviationsParameter { 37 get { return (LookupParameter<DoubleArray>)Parameters["ReferenceQualityDeviations"]; } 38 } 39 public LookupParameter<DoubleArray> ReferenceEvaluatedSolutionAveragesParameter { 40 get { return (LookupParameter<DoubleArray>)Parameters["ReferenceEvaluatedSolutionAverages"]; } 36 41 } 37 42 public LookupParameter<ResultCollection> ResultsParameter { … … 47 52 get { return (ScopeTreeLookupParameter<IntValue>)Parameters["RepetitionIndex"]; } 48 53 } 54 public LookupParameter<BoolValue> MaximizationParameter { 55 get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; } 56 } 49 57 #endregion 50 58 … … 58 66 Parameters.Add(new LookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "")); 59 67 Parameters.Add(new LookupParameter<IItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName, "")); 60 Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityReferences", "")); 68 Parameters.Add(new LookupParameter<DoubleArray>("ReferenceQualityAverages", "")); 69 Parameters.Add(new LookupParameter<DoubleArray>("ReferenceQualityDeviations", "")); 70 Parameters.Add(new LookupParameter<DoubleArray>("ReferenceEvaluatedSolutionAverages", "")); 61 71 Parameters.Add(new LookupParameter<ResultCollection>("Results", "")); 62 72 Parameters.Add(new ScopeTreeLookupParameter<IAlgorithm>("Algorithm", "The finished algorithms containing Runs.")); 63 73 Parameters.Add(new ScopeTreeLookupParameter<IntValue>("ProblemIndex", "The index of the problem an algorithm was executed with.")); 64 74 Parameters.Add(new ScopeTreeLookupParameter<IntValue>("RepetitionIndex", "The index of the repetition")); 75 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.")); 65 76 } 66 77 protected AlgorithmRunsAnalyzer(AlgorithmRunsAnalyzer original, Cloner cloner) … … 78 89 IEnumerable<string> parameterNames = parameterConfiguration.GetOptimizedParameterNames(); 79 90 IItemList<IProblem> problems = ProblemsParameter.ActualValue; 91 bool maximization = MaximizationParameter.ActualValue.Value; 80 92 int repetitions = RepetitionsParameter.ActualValue.Value; 81 var resultNames = new List<string> { "BestQuality", "Execution Time" };93 var resultNames = new List<string> { "BestQuality", "Execution Time", "EvaluatedSolutions" }; 82 94 int currentGeneration = GenerationsParameter.ActualValue != null ? GenerationsParameter.ActualValue.Value : 0; 83 double[] referenceQualities = GetReferenceQualities(problems.Count); 95 double[] referenceQualityAverages; 96 double[] referenceQualityDeviations; 97 double[] referenceEvaluatedSolutionAverages; 98 GetReferenceValues(problems.Count, out referenceQualityAverages, out referenceQualityDeviations, out referenceEvaluatedSolutionAverages); 99 84 100 ResultCollection results = ResultsParameter.ActualValue; 85 101 … … 88 104 var qualities = new double[problems.Count][]; 89 105 var executionTimes = new TimeSpan[problems.Count][]; 106 var evaluatedSolutions = new int[problems.Count][]; 90 107 91 108 for (int i = 0; i < problems.Count; i++) { 92 109 qualities[i] = new double[repetitions]; 110 evaluatedSolutions[i] = new int[repetitions]; 93 111 executionTimes[i] = new TimeSpan[repetitions]; 94 112 } … … 98 116 int repetitionIndex = repetitionIndices[i].Value; 99 117 100 IRun run = algorithms[i].Runs. First();118 IRun run = algorithms[i].Runs.Single(); 101 119 MetaOptimizationUtil.ClearResults(run, resultNames); 102 120 MetaOptimizationUtil.ClearParameters(run, parameterNames); … … 107 125 qualities[problemIndex][repetitionIndex] = (((DoubleValue)run.Results["BestQuality"]).Value); 108 126 executionTimes[problemIndex][repetitionIndex] = (((TimeSpanValue)run.Results["Execution Time"]).Value); 127 evaluatedSolutions[problemIndex][repetitionIndex] = (((IntValue)run.Results["EvaluatedSolutions"]).Value); 109 128 runs.Add((IRun)run.Clone()); 110 129 } 111 130 112 131 parameterConfiguration.AverageExecutionTimes = new ItemList<TimeSpanValue>(executionTimes.Select(t => new TimeSpanValue(TimeSpan.FromMilliseconds(t.Average(ts => ts.TotalMilliseconds))))); 132 parameterConfiguration.AverageEvaluatedSolutions = new DoubleArray(evaluatedSolutions.Select(x => x.Average()).ToArray()); 113 133 parameterConfiguration.Repetitions = new IntValue(repetitions); 114 parameterConfiguration.BestQualities = new DoubleArray(qualities.Select(q => q.Min()).ToArray()); // todo: respect Maximization:true/false115 134 parameterConfiguration.AverageQualities = new DoubleArray(qualities.Select(q => q.Average()).ToArray()); 116 parameterConfiguration.WorstQualities = new DoubleArray(qualities.Select(q => q.Max()).ToArray()); // todo: respect Maximization:true/false 135 136 if(maximization) 137 parameterConfiguration.BestQualities = new DoubleArray(qualities.Select(q => q.Max()).ToArray()); 138 else 139 parameterConfiguration.BestQualities = new DoubleArray(qualities.Select(q => q.Min()).ToArray()); 140 141 if (maximization) 142 parameterConfiguration.WorstQualities = new DoubleArray(qualities.Select(q => q.Min()).ToArray()); 143 else 144 parameterConfiguration.WorstQualities = new DoubleArray(qualities.Select(q => q.Max()).ToArray()); 145 117 146 parameterConfiguration.QualityVariances = new DoubleArray(qualities.Select(q => q.Variance()).ToArray()); 118 147 parameterConfiguration.QualityStandardDeviations = new DoubleArray(qualities.Select(q => q.StandardDeviation()).ToArray()); 119 148 parameterConfiguration.Runs = runs; 120 149 121 this.QualityParameter.ActualValue = new DoubleValue(MetaOptimizationUtil.Normalize Qualities(parameterConfiguration, referenceQualities));150 this.QualityParameter.ActualValue = new DoubleValue(MetaOptimizationUtil.Normalize(parameterConfiguration, referenceQualityAverages, referenceQualityDeviations, referenceEvaluatedSolutionAverages, 1, 1, 1, maximization)); 122 151 } else { 123 152 // something terrible happened -> most probably due to invalid parameters. 124 153 // penalty with worst quality from latest generation! 125 154 126 double penaltyValue = results.ContainsKey("CurrentWorstQuality") ? ((DoubleValue)results["CurrentWorstQuality"]).Value : referenceQualit ies.Max(); // todo: respect min/max155 double penaltyValue = results.ContainsKey("CurrentWorstQuality") ? ((DoubleValue)results["CurrentWorstQuality"]).Value : referenceQualityAverages.Max(); // todo: respect min/max 127 156 this.QualityParameter.ActualValue = new DoubleValue(penaltyValue); 128 157 } … … 131 160 } 132 161 133 private double[] GetReferenceQualities(int problemsCount) { 134 double[] referenceQualities; 135 if (ProblemQualityReferencesParameter.ActualValue == null) { 162 private void GetReferenceValues(int problemsCount, out double[] referenceQualityAverages, out double[] referenceQualityDeviations, out double[] referenceEvaluatedSolutionAverages) { 163 if (ReferenceQualityAveragesParameter.ActualValue == null) { 136 164 // this is generation zero. no reference qualities for normalization have been calculated yet. in this special case the ReferenceQualityAnalyzer will do the normalization 137 referenceQualities = new double[problemsCount]; 138 for (int i = 0; i < referenceQualities.Length; i++) { 139 referenceQualities[i] = 1; 165 referenceQualityAverages = new double[problemsCount]; 166 referenceQualityDeviations = new double[problemsCount]; 167 referenceEvaluatedSolutionAverages = new double[problemsCount]; 168 for (int i = 0; i < referenceQualityAverages.Length; i++) { 169 referenceQualityAverages[i] = 1; 170 referenceQualityDeviations[i] = 1; 171 referenceEvaluatedSolutionAverages[i] = 1; 140 172 } 141 173 } else { 142 referenceQualities = ProblemQualityReferencesParameter.ActualValue.ToArray(); 174 referenceQualityAverages = ReferenceQualityAveragesParameter.ActualValue.ToArray(); 175 referenceQualityDeviations = ReferenceQualityDeviationsParameter.ActualValue.ToArray(); 176 referenceEvaluatedSolutionAverages = ReferenceEvaluatedSolutionAveragesParameter.ActualValue.ToArray(); 143 177 } 144 return referenceQualities;145 178 } 146 179 }
Note: See TracChangeset
for help on using the changeset viewer.