Changeset 5212 for branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/ParameterConfigurationEvaluator.cs
- Timestamp:
- 01/05/11 02:03:20 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/ParameterConfigurationEvaluator.cs
r5207 r5212 40 40 } 41 41 42 public LookupParameter<DoubleArray> ProblemQualityMediansParameter { 43 get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityMedians"]; } 44 } 45 42 46 public IntValue Repetitions { 43 47 get { return RepetitionsParameter.ActualValue; } … … 51 55 Parameters.Add(new LookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "Missing description.")); 52 56 Parameters.Add(new LookupParameter<IntValue>(MetaOptimizationProblem.RepetitionsParameterName, "Number of evaluations on one problem.")); 57 Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityMedians", "")); 53 58 } 54 59 … … 66 71 IItemList<ISingleObjectiveProblem> problems = ProblemsParameter.ActualValue; 67 72 73 double[] medians; 74 if (ProblemQualityMediansParameter.ActualValue == null) { 75 // this is generation zero. no reference qualities for scaling have been calculated yet. calculate a random individuum to get reference values 76 medians = new double[problems.Count]; // todo 77 for (int i = 0; i < medians.Length; i++) { 78 medians[i] = 10; 79 } 80 } else { 81 medians = ProblemQualityMediansParameter.ActualValue.ToArray(); 82 } 83 68 84 // set parameters 69 85 ParameterConfigurationParameter.ActualValue.Parameterize(algorithm); 70 86 algorithm.StoreAlgorithmInEachRun = false; 71 87 72 List< double> qualities = new List<double>();73 List< TimeSpan> executionTimes = new List<TimeSpan>();88 List<List<double>> qualities = new List<List<double>>(); 89 List<List<TimeSpan>> executionTimes = new List<List<TimeSpan>>(); 74 90 algorithm.Engine = new SequentialEngine.SequentialEngine(); 75 91 algorithm.Prepare(true); … … 77 93 foreach (ISingleObjectiveProblem problem in problems) { 78 94 algorithm.Problem = (IProblem)problem.Clone(); 95 var problemQualities = new List<double>(); 96 var problemExecutionTimes = new List<TimeSpan>(); 79 97 80 98 for (int i = 0; i < Repetitions.Value; i++) { … … 86 104 if (algorithm.ExecutionState == ExecutionState.Paused) { 87 105 // this parametercombination was bad. set penalty for this solution 88 qualities.Add(PenaltyQuality); // todo: respect Maximization; problem: this messes up average value; solution: use currently worst quality*289 executionTimes.Add(algorithm.ExecutionTime);106 problemQualities.Add(PenaltyQuality); // todo: respect Maximization; problem: this messes up average value; solution: use currently worst quality*2 107 problemExecutionTimes.Add(algorithm.ExecutionTime); 90 108 } else { 91 qualities.Add(((DoubleValue)algorithm.Results["BestQuality"].Value).Value);92 executionTimes.Add(algorithm.ExecutionTime);109 problemQualities.Add(((DoubleValue)algorithm.Results["BestQuality"].Value).Value); 110 problemExecutionTimes.Add(algorithm.ExecutionTime); 93 111 94 112 // parameters will be stored in ParameterConfigurationTree anyway. they would be redundant in runs … … 98 116 } 99 117 } 118 qualities.Add(problemQualities); 119 executionTimes.Add(problemExecutionTimes); 100 120 } 101 121 algorithm.Prepare(); 102 122 103 qualities = qualities.OrderBy(x => x).ToList(); // todo: respect Maximization:true/false 104 105 ParameterConfigurationParameter.ActualValue.AverageExecutionTime = new TimeSpanValue(TimeSpan.FromMilliseconds(executionTimes.Average(t => t.TotalMilliseconds))); 123 ParameterConfigurationParameter.ActualValue.AverageExecutionTimes = new ItemList<TimeSpanValue>(executionTimes.Select(t => new TimeSpanValue(TimeSpan.FromMilliseconds(t.Average(ts => ts.TotalMilliseconds))))); 106 124 ParameterConfigurationParameter.ActualValue.Repetitions = (IntValue)Repetitions.Clone(); 107 ParameterConfigurationParameter.ActualValue.BestQualit y = new DoubleValue(qualities.First());108 ParameterConfigurationParameter.ActualValue.AverageQualit y = new DoubleValue(qualities.Average());109 ParameterConfigurationParameter.ActualValue.WorstQualit y = new DoubleValue(qualities.Last());110 ParameterConfigurationParameter.ActualValue.QualityVariance = new DoubleValue(qualities.Variance());111 ParameterConfigurationParameter.ActualValue.QualityStandardDeviation = new DoubleValue(qualities.StandardDeviation());125 ParameterConfigurationParameter.ActualValue.BestQualities = new DoubleArray(qualities.Select(q => q.Min()).ToArray()); // todo: respect Maximization:true/false 126 ParameterConfigurationParameter.ActualValue.AverageQualities = new DoubleArray(qualities.Select(q => q.Average()).ToArray()); 127 ParameterConfigurationParameter.ActualValue.WorstQualities = new DoubleArray(qualities.Select(q => q.Max()).ToArray()); // todo: respect Maximization:true/false 128 ParameterConfigurationParameter.ActualValue.QualityVariances = new DoubleArray(qualities.Select(q => q.Variance()).ToArray()); 129 ParameterConfigurationParameter.ActualValue.QualityStandardDeviations = new DoubleArray(qualities.Select(q => q.StandardDeviation()).ToArray()); 112 130 ParameterConfigurationParameter.ActualValue.Runs = (RunCollection)algorithm.Runs.Clone(); 113 131 114 double quality = ParameterConfigurationParameter.ActualValue.AverageQuality.Value; // todo: also include other measures (executiontime, variance) 115 this.QualityParameter.ActualValue = new DoubleValue(quality); 132 // normalize qualities 133 double[] qualitiesNormalized = new double[problems.Count]; 134 for (int i = 0; i < problems.Count; i++) { 135 qualitiesNormalized[i] = qualities[i].Average() / medians[i]; 136 } 137 ParameterConfigurationParameter.ActualValue.QualitiesNormalized = new DoubleArray(qualitiesNormalized); 138 ParameterConfigurationParameter.ActualValue.AverageQualityNormalized = new DoubleValue(qualitiesNormalized.Average()); 139 140 this.QualityParameter.ActualValue = ParameterConfigurationParameter.ActualValue.AverageQualityNormalized; 116 141 117 142 return base.Apply(); … … 129 154 } 130 155 156 /// <summary> 157 /// Can execute an algorithm synchronously 158 /// </summary> 131 159 public class AlgorithmExecutor { 132 160 private EngineAlgorithm algorithm;
Note: See TracChangeset
for help on using the changeset viewer.