Changeset 6018 for branches/HeuristicLab.MetaOptimization
- Timestamp:
- 04/17/11 18:22:28 (14 years ago)
- Location:
- branches/HeuristicLab.MetaOptimization
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
r6017 r6018 47 47 //private static int baseAlgorithmMaxGenerations = 1000; 48 48 49 private static int metaAlgorithmPopulationSize = 20;50 private static int metaAlgorithmMaxGenerations = 20;51 private static int metaProblemRepetitions = 3;52 private static int baseAlgorithmMaxGenerations = 10 0;49 private static int metaAlgorithmPopulationSize = 10; 50 private static int metaAlgorithmMaxGenerations = 10; 51 private static int metaProblemRepetitions = 2; 52 private static int baseAlgorithmMaxGenerations = 10; 53 53 private static double mutationProbability = 0.10; 54 54 … … 80 80 MetaOptimizationProblem metaOptimizationProblem = new MetaOptimizationProblem(); 81 81 metaOptimizationProblem.Repetitions = new IntValue(metaProblemRepetitions); 82 //GeneticAlgorithm metaLevelAlgorithm = GetMetaGA(metaOptimizationProblem);83 GeneticAlgorithm metaLevelAlgorithm = GetParallelMetaGA(metaOptimizationProblem);82 GeneticAlgorithm metaLevelAlgorithm = GetMetaGA(metaOptimizationProblem); 83 //GeneticAlgorithm metaLevelAlgorithm = GetParallelMetaGA(metaOptimizationProblem); 84 84 //GeneticAlgorithm metaLevelAlgorithm = GetHiveParallelMetaGA(metaOptimizationProblem); 85 85 … … 88 88 var algorithmVc = SetupGAAlgorithm(typeof(GeneticAlgorithm), metaOptimizationProblem); 89 89 90 //TestToString(algorithmVc); 91 90 string info = algorithmVc.ParameterInfoString; 92 91 93 92 //Console.WriteLine("Press enter to start"); … … 116 115 117 116 var vc1 = new SymbolicExpressionGrammarValueConfiguration(grammar1); 117 118 string info = vc1.ParameterInfoString; 119 118 120 ConfigureSymbolicExpressionGrammarVc(vc1); 121 122 info = vc1.ParameterInfoString; 123 124 119 125 var vc2 = new SymbolicExpressionGrammarValueConfiguration(grammar2); 120 126 ConfigureSymbolicExpressionGrammarVc(vc2); … … 758 764 && pc.Name != "StartSymbol") { 759 765 pc.Optimize = true; 760 var initialFrequencyVc = ((ParameterizedValueConfiguration)pc.ValueConfigurations.First()).ParameterConfigurations.Single(x => x.Name == "InitialFrequency");761 initialFrequencyVc.Optimize = true;762 766 } 763 767 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/AlgorithmExecutor.cs
r5653 r6018 10 10 executor.StartSync(); 11 11 } 12 public static void StartSync(this IAlgorithm algorithm, CancellationToken cancellationToken) { 13 var executor = new AlgorithmExecutor(algorithm, cancellationToken); 14 executor.StartSync(); 15 } 12 16 } 13 17 … … 18 22 private IAlgorithm algorithm; 19 23 private AutoResetEvent waitHandle = new AutoResetEvent(false); 24 private CancellationToken cancellationToken; 25 private bool useCancellationToken = false; 20 26 21 27 public AlgorithmExecutor(IAlgorithm algorithm) { … … 23 29 } 24 30 31 public AlgorithmExecutor(IAlgorithm algorithm, CancellationToken cancellationToken) { 32 this.algorithm = algorithm; 33 this.cancellationToken = cancellationToken; 34 this.useCancellationToken = true; 35 } 36 25 37 public void StartSync() { 26 38 algorithm.Stopped += new EventHandler(algorithm_Stopped); 27 39 algorithm.Paused += new EventHandler(algorithm_Paused); 28 algorithm.Start(); 40 41 if(useCancellationToken && algorithm is EngineAlgorithm && ((EngineAlgorithm)algorithm).Engine is SequentialEngine.SequentialEngine) { 42 ((SequentialEngine.SequentialEngine)((EngineAlgorithm)algorithm).Engine).Start(cancellationToken); 43 } else { 44 algorithm.Start(); 45 } 46 29 47 waitHandle.WaitOne(); 30 48 waitHandle.Dispose(); -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestParameterConfigurationAnalyzer.cs
r5576 r6018 7 7 using HeuristicLab.Parameters; 8 8 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 9 using System.Collections.Generic;10 using System;11 9 12 10 namespace HeuristicLab.Problems.MetaOptimization { … … 39 37 get { return (LookupParameter<RunCollection>)Parameters["Population"]; } 40 38 } 41 public LookupParameter<DoubleArray> ProblemQualityReferencesParameter {42 get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityReferences"]; }43 }44 39 public LookupParameter<ConstrainedItemList<IProblem>> ProblemsParameter { 45 40 get { return (LookupParameter<ConstrainedItemList<IProblem>>)Parameters[MetaOptimizationProblem.ProblemsParameterName]; } 41 } 42 public LookupParameter<BoolValue> MaximizationParameter { 43 get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; } 46 44 } 47 45 … … 55 53 Parameters.Add(new LookupParameter<IRun>("BestKnownSolution", "")); 56 54 Parameters.Add(new LookupParameter<RunCollection>("Population", "")); 57 Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityReferences", ""));58 55 Parameters.Add(new LookupParameter<ConstrainedItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName)); 56 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.")); 59 57 } 60 58 … … 71 69 DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue; 72 70 ItemArray<ParameterConfigurationTree> parameterTrees = ParameterConfigurationParameter.ActualValue; 71 bool maximization = MaximizationParameter.ActualValue.Value; 73 72 74 int idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; 73 int idxBest; 74 if (maximization) 75 idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).Last().index; 76 else 77 idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; 75 78 76 79 ParameterConfigurationTree best = (ParameterConfigurationTree)parameterTrees[idxBest]; … … 79 82 best.CollectParameterValues(bestRun.Parameters); 80 83 81 if (bestKnownQuality == null || qualities[idxBest].Value < bestKnownQuality.Value) { // todo: respect Maximization:true/false 84 if (bestKnownQuality == null || 85 (!maximization && (qualities[idxBest].Value < bestKnownQuality.Value) || 86 (maximization && (qualities[idxBest].Value > bestKnownQuality.Value)))) { 82 87 BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[idxBest].Value); 83 88 … … 96 101 int i = 0; 97 102 RunCollection rc = new RunCollection(); 98 foreach (ParameterConfigurationTree pt in parameterTrees.OrderBy(x => x.AverageQualityNormalized)) { // todo: respect Maximization:true/false103 foreach (ParameterConfigurationTree pt in (maximization ? parameterTrees.OrderByDescending(x => x.Quality) : parameterTrees.OrderBy(x => x.Quality))) { 99 104 rc.Add(pt.ToRun(string.Format("Individual {0} ({1})", i, pt.ParameterInfoString))); 100 105 i++; -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/PMOBestSolutionHistoryAnalyzer.cs
r5576 r6018 7 7 using HeuristicLab.Parameters; 8 8 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 9 using System.Collections.Generic;10 using System;11 using HeuristicLab.Analysis;12 9 13 10 namespace HeuristicLab.Problems.MetaOptimization { … … 34 31 get { return (LookupParameter<IntValue>)Parameters["Generations"]; } 35 32 } 33 public LookupParameter<BoolValue> MaximizationParameter { 34 get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; } 35 } 36 36 37 37 public PMOBestSolutionHistoryAnalyzer() … … 42 42 Parameters.Add(new LookupParameter<ConstrainedItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName)); 43 43 Parameters.Add(new LookupParameter<IntValue>("Generations", "")); 44 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.")); 44 45 } 45 46 … … 56 57 ItemArray<ParameterConfigurationTree> parameterTrees = ParameterConfigurationParameter.ActualValue; 57 58 int currentGeneration = GenerationsParameter.ActualValue.Value; 58 int idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; // todo: respect Min/Max 59 bool maximization = MaximizationParameter.ActualValue.Value; 60 61 int idxBest; 62 if (maximization) 63 idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).Last().index; 64 else 65 idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; 66 59 67 ParameterConfigurationTree best = parameterTrees[idxBest]; 60 68 -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/PMOProblemQualitiesAnalyzer.cs
r5576 r6018 1 1 using System.Linq; 2 using HeuristicLab.Analysis; 2 3 using HeuristicLab.Common; 3 4 using HeuristicLab.Core; … … 7 8 using HeuristicLab.Parameters; 8 9 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 9 using System.Collections.Generic;10 using System;11 using HeuristicLab.Analysis;12 10 13 11 namespace HeuristicLab.Problems.MetaOptimization { … … 31 29 get { return (LookupParameter<ConstrainedItemList<IProblem>>)Parameters[MetaOptimizationProblem.ProblemsParameterName]; } 32 30 } 31 public LookupParameter<BoolValue> MaximizationParameter { 32 get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; } 33 } 33 34 34 35 public PMOProblemQualitiesAnalyzer() … … 38 39 Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "")); 39 40 Parameters.Add(new LookupParameter<ConstrainedItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName)); 41 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.")); 40 42 } 41 43 … … 51 53 ResultCollection results = ResultsParameter.ActualValue; 52 54 ItemArray<ParameterConfigurationTree> parameterTrees = ParameterConfigurationParameter.ActualValue; 53 int idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; // todo: respect Min/Max 54 int idxWorst = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).Last().index; 55 55 bool maximization = MaximizationParameter.ActualValue.Value; 56 57 int idxBest ; 58 int idxWorst; 59 if (maximization) { 60 idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).Last().index; 61 idxWorst = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; 62 } else { 63 idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; 64 idxWorst = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).Last().index; 65 } 66 56 67 int problemCount = ProblemsParameter.ActualValue.Count; 57 68 -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/ReferenceQualityAnalyzer.cs
r5653 r6018 7 7 using HeuristicLab.Parameters; 8 8 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 9 using System.Collections.Generic;10 using System;11 9 12 10 namespace HeuristicLab.Problems.MetaOptimization { … … 17 15 [StorableClass] 18 16 public sealed class ReferenceQualityAnalyzer : SingleSuccessorOperator, IAnalyzer { 19 17 20 18 public ValueLookupParameter<ResultCollection> ResultsParameter { 21 19 get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; } … … 27 25 get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; } 28 26 } 29 public LookupParameter<DoubleArray> ProblemQualityReferenceParameter { 30 get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityReferences"]; } 27 public LookupParameter<DoubleArray> ReferenceQualityAveragesParameter { 28 get { return (LookupParameter<DoubleArray>)Parameters["ReferenceQualityAverages"]; } 29 } 30 public LookupParameter<DoubleArray> ReferenceQualityDeviationsParameter { 31 get { return (LookupParameter<DoubleArray>)Parameters["ReferenceQualityDeviations"]; } 32 } 33 public LookupParameter<DoubleArray> ReferenceEvaluatedSolutionAveragesParameter { 34 get { return (LookupParameter<DoubleArray>)Parameters["ReferenceEvaluatedSolutionAverages"]; } 31 35 } 32 36 public LookupParameter<ConstrainedItemList<IProblem>> ProblemsParameter { 33 37 get { return (LookupParameter<ConstrainedItemList<IProblem>>)Parameters[MetaOptimizationProblem.ProblemsParameterName]; } 38 } 39 public LookupParameter<BoolValue> MaximizationParameter { 40 get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; } 34 41 } 35 42 … … 39 46 Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "")); 40 47 Parameters.Add(new ScopeTreeLookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "")); 41 Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityReferences", "")); 48 Parameters.Add(new LookupParameter<DoubleArray>("ReferenceQualityAverages", "")); 49 Parameters.Add(new LookupParameter<DoubleArray>("ReferenceQualityDeviations", "")); 50 Parameters.Add(new LookupParameter<DoubleArray>("ReferenceEvaluatedSolutionAverages", "")); 42 51 Parameters.Add(new LookupParameter<ConstrainedItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName, "")); 52 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.")); 43 53 } 44 54 … … 54 64 ItemArray<ParameterConfigurationTree> solutions = ParameterConfigurationParameter.ActualValue; 55 65 ItemArray<DoubleValue> qualities = QualityParameter.ActualValue; 66 bool maximization = MaximizationParameter.ActualValue.Value; 56 67 57 if (ProblemQualityReferenceParameter.ActualValue == null) { 58 DoubleArray referenceQualities = CalculateReferenceQualities(solutions); 59 ProblemQualityReferenceParameter.ActualValue = referenceQualities; 60 NormalizePopulation(solutions, qualities, referenceQualities); 61 results.Add(new Result("QualityReferences", referenceQualities)); 68 if (ReferenceQualityAveragesParameter.ActualValue == null) { 69 // this is generation zero. calculate the reference values and apply them on population. in future generations `AlgorithmRunsAnalyzer` will do the nomalization 70 DoubleArray referenceQualityAverages = CalculateReferenceQualityAverages(solutions, maximization); 71 DoubleArray referenceQualityDeviations = CalculateReferenceQualityDeviations(solutions, maximization); 72 DoubleArray referenceEvaluatedSolutionAverages = CalculateReferenceEvaluatedSolutionAverages(solutions, maximization); 73 74 ReferenceQualityAveragesParameter.ActualValue = referenceQualityAverages; 75 ReferenceQualityDeviationsParameter.ActualValue = referenceQualityDeviations; 76 ReferenceEvaluatedSolutionAveragesParameter.ActualValue = referenceEvaluatedSolutionAverages; 77 78 NormalizePopulation(solutions, qualities, referenceQualityAverages, referenceQualityDeviations, referenceEvaluatedSolutionAverages, 1, 1, 1, maximization); 79 80 results.Add(new Result("ReferenceQualities", referenceQualityAverages)); 81 results.Add(new Result("ReferenceQualityDeviations", referenceQualityDeviations)); 82 results.Add(new Result("ReferenceEvaluatedSolutionAverages", referenceEvaluatedSolutionAverages)); 62 83 } 63 84 … … 65 86 } 66 87 67 private DoubleArray CalculateReferenceQualit ies(ItemArray<ParameterConfigurationTree> solutions) {68 DoubleArray reference Qualities = new DoubleArray(ProblemsParameter.ActualValue.Count);88 private DoubleArray CalculateReferenceQualityAverages(ItemArray<ParameterConfigurationTree> solutions, bool maximization) { 89 DoubleArray references = new DoubleArray(ProblemsParameter.ActualValue.Count); 69 90 for (int pi = 0; pi < ProblemsParameter.ActualValue.Count; pi++) { 70 referenceQualities[pi] = solutions.Where(x => x.AverageQualities != null).Select(x => x.AverageQualities[pi]).Min(); // todo: respect minimization / maximization 91 if (maximization) 92 references[pi] = solutions.Where(x => x.AverageQualities != null).Select(x => x.AverageQualities[pi]).Max(); 93 else 94 references[pi] = solutions.Where(x => x.AverageQualities != null).Select(x => x.AverageQualities[pi]).Min(); 71 95 } 72 return reference Qualities;96 return references; 73 97 } 74 98 75 private void NormalizePopulation(ItemArray<ParameterConfigurationTree> solutions, ItemArray<DoubleValue> qualities, DoubleArray referenceQualities) { 99 private DoubleArray CalculateReferenceQualityDeviations(ItemArray<ParameterConfigurationTree> solutions, bool maximization) { 100 DoubleArray references = new DoubleArray(ProblemsParameter.ActualValue.Count); 101 for (int pi = 0; pi < ProblemsParameter.ActualValue.Count; pi++) { 102 if (maximization) 103 references[pi] = solutions.Where(x => x.QualityStandardDeviations != null).Select(x => x.QualityStandardDeviations[pi]).Max(); 104 else 105 references[pi] = solutions.Where(x => x.QualityStandardDeviations != null).Select(x => x.QualityStandardDeviations[pi]).Min(); 106 } 107 return references; 108 } 109 110 private DoubleArray CalculateReferenceEvaluatedSolutionAverages(ItemArray<ParameterConfigurationTree> solutions, bool maximization) { 111 DoubleArray references = new DoubleArray(ProblemsParameter.ActualValue.Count); 112 for (int pi = 0; pi < ProblemsParameter.ActualValue.Count; pi++) { 113 if (maximization) 114 references[pi] = solutions.Where(x => x.AverageEvaluatedSolutions != null).Select(x => x.AverageEvaluatedSolutions[pi]).Max(); 115 else 116 references[pi] = solutions.Where(x => x.AverageEvaluatedSolutions != null).Select(x => x.AverageEvaluatedSolutions[pi]).Min(); 117 } 118 return references; 119 } 120 121 private void NormalizePopulation(ItemArray<ParameterConfigurationTree> solutions, ItemArray<DoubleValue> qualities, 122 DoubleArray referenceQualityAverages, 123 DoubleArray referenceQualityDeviations, 124 DoubleArray referenceEvaluatedSolutionAverages, 125 double qualityAveragesWeight, 126 double qualityDeviationsWeight, 127 double evaluatedSolutionsWeight, 128 bool maximization) { 76 129 for (int i = 0; i < solutions.Length; i++) { 77 qualities[i].Value = MetaOptimizationUtil.NormalizeQualities(solutions[i], referenceQualities.ToArray()); 130 if (solutions[i].AverageQualities == null || solutions[i].QualityStandardDeviations == null || solutions[i].AverageEvaluatedSolutions == null) { 131 // this parameterConfigurationTree has not been evaluated correctly (due to a faulty configuration, which led to an exception) 132 // since we are in generation zero, there is no WorstQuality available for a penalty value 133 double penaltyValue = maximization ? double.MinValue : double.MaxValue; 134 qualities[i].Value = penaltyValue; 135 } else { 136 qualities[i].Value = MetaOptimizationUtil.Normalize(solutions[i], 137 referenceQualityAverages.ToArray(), 138 referenceQualityDeviations.ToArray(), 139 referenceEvaluatedSolutionAverages.ToArray(), 140 qualityAveragesWeight, 141 qualityDeviationsWeight, 142 evaluatedSolutionsWeight, 143 maximization); 144 } 78 145 } 79 146 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/SolutionCacheAnalyzer.cs
r5359 r6018 7 7 using HeuristicLab.Parameters; 8 8 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 9 using System.Collections.Generic;10 using System;11 9 12 10 namespace HeuristicLab.Problems.MetaOptimization { … … 27 25 get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; } 28 26 } 29 public LookupParameter<DoubleArray> ProblemQualityReferenceParameter {30 get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityReferences"]; }31 }32 27 public LookupParameter<ConstrainedItemList<IProblem>> ProblemsParameter { 33 28 get { return (LookupParameter<ConstrainedItemList<IProblem>>)Parameters[MetaOptimizationProblem.ProblemsParameterName]; } … … 45 40 Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "")); 46 41 Parameters.Add(new ScopeTreeLookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "")); 47 Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityReferences", ""));48 42 Parameters.Add(new LookupParameter<ConstrainedItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName, "")); 49 43 Parameters.Add(new LookupParameter<IntValue>("Generations", "")); -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs
r5927 r6018 16 16 17 17 [Storable] 18 private DoubleValue averageQualityNormalized;19 public DoubleValue AverageQualityNormalized{20 get { return averageQualityNormalized; }21 set { 22 if ( averageQualityNormalized!= value) {23 averageQualityNormalized= value;18 private DoubleValue quality; 19 public DoubleValue Quality { 20 get { return quality; } 21 set { 22 if (quality != value) { 23 quality = value; 24 24 OnQualityChanged(); 25 25 } … … 28 28 29 29 [Storable] 30 private DoubleArray qualitiesNormalized; 31 public DoubleArray QualitiesNormalized { 32 get { return qualitiesNormalized; } 33 set { 34 if (qualitiesNormalized != value) { 35 qualitiesNormalized = value; 36 } 37 } 38 } 39 30 private DoubleArray normalizedQualityAverages; 31 public DoubleArray NormalizedQualityAverages { 32 get { return normalizedQualityAverages; } 33 set { 34 if (normalizedQualityAverages != value) { 35 normalizedQualityAverages = value; 36 } 37 } 38 } 39 40 [Storable] 41 private DoubleArray normalizedQualityDeviations; 42 public DoubleArray NormalizedQualityDeviations { 43 get { return normalizedQualityDeviations; } 44 set { 45 if (normalizedQualityDeviations != value) { 46 normalizedQualityDeviations = value; 47 } 48 } 49 } 50 51 [Storable] 52 private DoubleArray normalizedEvaluatedSolutions; 53 public DoubleArray NormalizedEvaluatedSolutions { 54 get { return normalizedEvaluatedSolutions; } 55 set { 56 if (normalizedEvaluatedSolutions != value) { 57 normalizedEvaluatedSolutions = value; 58 } 59 } 60 } 61 40 62 [Storable] 41 63 private DoubleArray bestQualities; … … 85 107 86 108 [Storable] 109 private DoubleArray averageEvaluatedSolutions; 110 public DoubleArray AverageEvaluatedSolutions { 111 get { return averageEvaluatedSolutions; } 112 set { averageEvaluatedSolutions = value; } 113 } 114 115 [Storable] 87 116 private IntValue repetitions; 88 117 public IntValue Repetitions { … … 116 145 } 117 146 } 118 119 //[Storable]120 //protected string name;121 //public string Name {122 // get { return name; }123 // set { name = value; }124 //}125 147 126 148 #region constructors and cloning … … 136 158 algproblemitem.ProblemParameter.Value = problem; 137 159 this.discoverValidValues = false; 138 160 139 161 this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Algorithm", algproblemitem.AlgorithmParameter)); 140 162 this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Problem", algproblemitem.ProblemParameter)); … … 145 167 protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner) 146 168 : base(original, cloner) { 147 this.averageQualityNormalized = cloner.Clone(original.averageQualityNormalized); 148 this.qualitiesNormalized = cloner.Clone(original.qualitiesNormalized); 169 this.quality = cloner.Clone(original.quality); 170 this.normalizedQualityAverages = cloner.Clone(original.normalizedQualityAverages); 171 this.normalizedQualityDeviations = cloner.Clone(original.normalizedQualityDeviations); 172 this.normalizedEvaluatedSolutions = cloner.Clone(original.normalizedEvaluatedSolutions); 149 173 this.bestQualities = cloner.Clone(original.BestQualities); 150 174 this.averageQualities = cloner.Clone(original.averageQualities); … … 153 177 this.qualityVariances = cloner.Clone(original.qualityVariances); 154 178 this.averageExecutionTimes = cloner.Clone(original.averageExecutionTimes); 179 this.averageEvaluatedSolutions = cloner.Clone(original.averageEvaluatedSolutions); 155 180 this.repetitions = cloner.Clone(original.repetitions); 156 181 this.runs = cloner.Clone(original.runs); … … 171 196 public virtual void CollectResultValues(IDictionary<string, IItem> values) { 172 197 values.Add("RunsAverageExecutionTimes", AverageExecutionTimes); 198 values.Add("RunsAverageEvaluatedSolutions", AverageEvaluatedSolutions); 173 199 values.Add("Repetitions", Repetitions); 174 200 values.Add("RunsBestQualities", BestQualities); … … 177 203 values.Add("RunsQualityVariances", QualityVariances); 178 204 values.Add("RunsQualityStandardDeviations", QualityStandardDeviations); 179 values.Add("QualitiesNormalized", QualitiesNormalized);180 values.Add("AverageQualityNormalized", AverageQualityNormalized);205 values.Add("QualitiesNormalized", NormalizedQualityAverages); 206 values.Add("AverageQualityNormalized", Quality); 181 207 values.Add("Runs", Runs); 182 208 } … … 209 235 210 236 algorithm.CollectParameterValues(this.Parameters); 211 //((IProblem)ProblemConfiguration.ActualValue.Value).CollectParameterValues(this.Parameters); 212 //CollectAlgorithmParameterValues((IAlgorithm)AlgorithmConfiguration.ActualValue.Value, parameters); 213 } 214 215 //protected virtual void CollectAlgorithmParameterValues(IAlgorithm algorithm, IDictionary<string, IItem> values) { 216 // var algorithmValues = new Dictionary<string, IItem>(); 217 // algorithm.CollectParameterValues(algorithmValues); 218 // foreach (var value in algorithmValues) { 219 // values.Add("Algorithm." + value.Key, value.Value); 220 // } 221 //} 237 } 222 238 223 239 public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions) { … … 294 310 var sb = new StringBuilder(); 295 311 if (!string.IsNullOrEmpty(algorithmInfo)) { 296 sb.Append("Algorithm :");312 sb.Append("Algorithm ("); 297 313 sb.Append(algorithmInfo); 314 sb.Append(")"); 298 315 } 299 316 if (!string.IsNullOrEmpty(problemInfo)) { 300 317 if (sb.Length > 0) 301 318 sb.Append(", "); 302 sb.Append("Problem :");319 sb.Append("Problem( "); 303 320 sb.Append(problemInfo); 321 sb.Append(")"); 304 322 } 305 323 return sb.ToString(); … … 311 329 ProblemConfiguration.CollectOptimizedParameterNames(parameterNames, string.Empty); 312 330 } 313 314 315 331 } 316 332 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs
r6017 r6018 92 92 if (this.valueConfigurations != null) DeregisterValueConfigurationEvents(); 93 93 this.valueConfigurations = value; 94 KeepActualValueConfigurationIndexConsistent(); 94 95 if (this.valueConfigurations != null) RegisterValueConfigurationEvents(); 95 96 } … … 144 145 set { autoPopulateValueConfigurations = value; } 145 146 } 146 147 147 148 148 149 #region Constructors and Cloning … … 258 259 } else { 259 260 IItem val; 260 if (ActualValue.Value != null && ActualValue.Value DataType== t) {261 if (ActualValue.Value != null && ActualValue.Value.GetType() == t) { 261 262 val = (IItem)ActualValue.Value.Clone(); // use existing value for that type (if available) 262 263 } else { … … 363 364 void ValueConfigurations_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) { 364 365 OnToStringChanged(); 365 } 366 KeepActualValueConfigurationIndexConsistent(); 367 } 368 366 369 void ValueConfigurations_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) { 367 370 OnToStringChanged(); 371 KeepActualValueConfigurationIndexConsistent(); 368 372 } 369 373 void ValueConfigurations_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) { 370 374 OnToStringChanged(); 375 KeepActualValueConfigurationIndexConsistent(); 371 376 } 372 377 … … 440 445 } 441 446 442 public string ParameterInfoString {447 public virtual string ParameterInfoString { 443 448 get { 444 449 StringBuilder sb = new StringBuilder(); … … 455 460 } 456 461 457 if (this. ActualValue.Value is IParameterizedItem) {462 if (this.ValueConfigurations[actualValueConfigurationIndex] is ParameterizedValueConfiguration) { 458 463 string subParams = this.ValueConfigurations[actualValueConfigurationIndex].ParameterInfoString; 459 464 if (!string.IsNullOrEmpty(subParams)) { … … 583 588 } 584 589 } 590 591 /// <summary> 592 /// Ensures that the ActualValueConfigurationIndex has a valid value 593 /// Only indices of items which are checked are allowed 594 /// </summary> 595 private void KeepActualValueConfigurationIndexConsistent() { 596 if (this.valueConfigurations != null && this.valueConfigurations.CheckedItems.Count() > 0) { 597 if(this.valueConfigurations.Count <= this.actualValueConfigurationIndex && 598 this.valueConfigurations.CheckedItems.Count(x => x.Index == this.actualValueConfigurationIndex) == 1) { 599 // everything is ok; do nothing 600 } else { 601 // current index is invalid, set new one 602 this.ActualValueConfigurationIndex = this.valueConfigurations.CheckedItems.First().Index; 603 } 604 } else { 605 // no checked valueConfiguration is available; cannot be used 606 this.ActualValueConfigurationIndex = -1; 607 } 608 } 585 609 } 586 610 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs
r5927 r6018 24 24 this.discoverValidValues = false; 25 25 this.validValues = new ItemSet<IItem> { valueConfiguration.ActualValue.Value }; 26 this.validTypes = new Type[] { valueConfiguration.ActualValue.ValueDataType};26 this.validTypes = new Type[] { valueConfiguration.ActualValue.ValueDataType }; 27 27 this.IsNullable = false; 28 28 this.itemImage = valueConfiguration.ItemImage; … … 69 69 OnToStringChanged(); 70 70 } 71 72 public override string ParameterInfoString { 73 get { 74 if (this.Optimize) { 75 return string.Format("{0} ({1})", this.Name, this.ValueConfigurations.Single().ParameterInfoString); 76 } else { 77 return string.Empty; 78 } 79 } 80 } 71 81 } 72 82 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmEvaluator.cs
r6017 r6018 64 64 var sw = new Stopwatch(); 65 65 sw.Start(); 66 algorithm.StartSync( );66 algorithm.StartSync(CancellationToken); 67 67 sw.Stop(); 68 68 Console.WriteLine("{0},{1}: {2} (Grammar: {3})", ProblemIndexParameter.ActualValue.Value, RepetitionIndexParameter.ActualValue.Value, sw.Elapsed, PrintGrammar(srp.SymbolicExpressionTreeGrammar)); -
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 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmSubScopesCreator.cs
r5927 r6018 9 9 10 10 namespace HeuristicLab.Problems.MetaOptimization { 11 [Item(" ChildrenCreator", "An operator which is used to prepare crossover. The sub-scopes of the current scope the operator is applied on represent the parents. The operator creates new and empty scopes for each child, adds the scopes that represent the child's parents as sub-scopes to the child and adds the child as sub-scope to the current scope.")]11 [Item("AlgorithmSubScopesCreator", "An operator which ...")] 12 12 [StorableClass] 13 13 public class AlgorithmSubScopesCreator : SingleSuccessorOperator { -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/PMOEvaluator.cs
r5653 r6018 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 1 using HeuristicLab.Common; 2 using HeuristicLab.Core; 3 using HeuristicLab.Data; 5 4 using HeuristicLab.Operators; 6 using HeuristicLab. Common;7 using HeuristicLab. Core;5 using HeuristicLab.Optimization; 6 using HeuristicLab.Parameters; 8 7 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 9 using HeuristicLab.Parameters;10 using HeuristicLab.Data;11 using HeuristicLab.Optimization;12 8 13 9 namespace HeuristicLab.Problems.MetaOptimization { … … 34 30 public LookupParameter<IntValue> RepetitionsParameter { 35 31 get { return (LookupParameter<IntValue>)Parameters[MetaOptimizationProblem.RepetitionsParameterName]; } 36 }37 public LookupParameter<DoubleArray> ProblemQualityReferencesParameter {38 get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityReferences"]; }39 32 } 40 33 public LookupParameter<IntValue> GenerationsParameter { … … 70 63 Parameters.Add(new LookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "")); 71 64 Parameters.Add(new LookupParameter<IntValue>(MetaOptimizationProblem.RepetitionsParameterName, "Number of evaluations on one problem.")); 72 Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityReferences", ""));73 65 Parameters.Add(new LookupParameter<IntValue>("Generations", "")); 74 66 Parameters.Add(new ScopeParameter("CurrentScope", "The current scope which represents a population of solutions on which the genetic algorithm should be applied.")); -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationUtil.cs
r5927 r6018 34 34 } 35 35 36 public static double NormalizeQualities(ParameterConfigurationTree parameterConfigurationTree, double[] referenceQualities) { 37 double[] qualitiesNormalized = new double[referenceQualities.Length]; 38 for (int i = 0; i < referenceQualities.Length; i++) { 39 qualitiesNormalized[i] = parameterConfigurationTree.AverageQualities[i] / referenceQualities[i]; 36 public static double Normalize( 37 ParameterConfigurationTree parameterConfigurationTree, 38 double[] referenceQualityAverages, 39 double[] referenceQualityDeviations, 40 double[] referenceEvaluatedSolutionAverages, 41 double qualityAveragesWeight, 42 double qualityDeviationsWeight, 43 double evaluatedSolutionsWeight, 44 bool maximization) { 45 46 double[] qualityAveragesNormalized = new double[referenceQualityAverages.Length]; 47 double[] qualityDeviationsNormalized = new double[referenceQualityDeviations.Length]; 48 double[] evaluatedSolutionAveragesNormalized = new double[referenceEvaluatedSolutionAverages.Length]; 49 50 for (int i = 0; i < referenceQualityAverages.Length; i++) { 51 qualityAveragesNormalized[i] = parameterConfigurationTree.AverageQualities[i] / referenceQualityAverages[i]; 52 qualityDeviationsNormalized[i] = parameterConfigurationTree.QualityStandardDeviations[i] / referenceQualityDeviations[i]; 53 evaluatedSolutionAveragesNormalized[i] = parameterConfigurationTree.AverageEvaluatedSolutions[i] / referenceEvaluatedSolutionAverages[i]; 40 54 } 41 parameterConfigurationTree.QualitiesNormalized = new DoubleArray(qualitiesNormalized); 42 parameterConfigurationTree.AverageQualityNormalized = new DoubleValue(qualitiesNormalized.Average()); 43 return parameterConfigurationTree.AverageQualityNormalized.Value; 55 parameterConfigurationTree.NormalizedQualityAverages = new DoubleArray(qualityAveragesNormalized); 56 parameterConfigurationTree.NormalizedQualityDeviations = new DoubleArray(qualityDeviationsNormalized); 57 parameterConfigurationTree.NormalizedEvaluatedSolutions = new DoubleArray(evaluatedSolutionAveragesNormalized); 58 59 double qualityAveragesNormalizedValue = qualityAveragesNormalized.Average() * qualityAveragesWeight; 60 double qualityDeviationsNormalizedValue = qualityDeviationsNormalized.Average() * qualityDeviationsWeight; 61 double evaluatedSolutionAveragesNormalizedValue = evaluatedSolutionAveragesNormalized.Average() * evaluatedSolutionsWeight; 62 63 if (maximization) { 64 // deviation and evaluatedSolutions are always minimization problems. so if maximization=true, flip the values around 1.0 (e.g. 1.15 -> 0.85) 65 qualityDeviationsNormalizedValue -= (qualityDeviationsNormalizedValue - 1) * 2; 66 evaluatedSolutionAveragesNormalizedValue -= (evaluatedSolutionAveragesNormalizedValue - 1) * 2; 67 } 68 69 qualityAveragesNormalizedValue *= qualityAveragesWeight; 70 qualityDeviationsNormalizedValue *= qualityDeviationsWeight; 71 evaluatedSolutionAveragesNormalizedValue *= evaluatedSolutionsWeight; 72 73 parameterConfigurationTree.Quality = new DoubleValue(new double[] {qualityAveragesNormalizedValue, qualityDeviationsNormalizedValue, evaluatedSolutionAveragesNormalizedValue}.Average()); 74 75 return parameterConfigurationTree.Quality.Value; 44 76 } 45 77 … … 51 83 algorithm.Problem = problem; 52 84 ((EngineAlgorithm)algorithm).Engine = new SequentialEngine.SequentialEngine(); 53 if (randomize) parameterConfigurationTree.Randomize(random);85 if (randomize) parameterConfigurationTree.Randomize(random); 54 86 parameterConfigurationTree.Parameterize(algorithm); 55 87 return algorithm;
Note: See TracChangeset
for help on using the changeset viewer.