Changeset 5087 for branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3
- Timestamp:
- 12/12/10 11:34:13 (14 years ago)
- Location:
- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestParameterConfigurationAnalyzer.cs
r5023 r5087 40 40 } 41 41 42 public BestParameterConfigurationAnalyzer() : base() { 42 public BestParameterConfigurationAnalyzer() 43 : base() { 43 44 Parameters.Add(new ScopeTreeLookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "TODO The TSP solutions given in path representation from which the best solution should be analyzed.")); 44 45 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "TODO The qualities of the TSP solutions which should be analyzed.")); … … 63 64 ItemArray<ParameterConfigurationTree> parameterTrees = ParameterConfigurationParameter.ActualValue; 64 65 65 int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;66 int idxBest = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index; 66 67 67 EngineAlgorithm bestAlg = ((EngineAlgorithm)((ParameterConfigurationTree)parameterTrees[i]).ActualValue.Value);68 Run bestRun = new Run(bestAlg);69 ((ParameterConfigurationTree)parameterTrees[i]).CollectResultValues(bestRun.Results);70 68 71 if (bestKnownQuality == null || qualities[i].Value < bestKnownQuality.Value) { // todo: respect Maximization:true/false 72 BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value); 69 ParameterConfigurationTree best = (ParameterConfigurationTree)parameterTrees[idxBest]; 70 IRun bestRun = new Run(); 71 best.CollectResultValues(bestRun.Results); 72 best.CollectParameterValues(bestRun.Parameters); 73 74 if (bestKnownQuality == null || qualities[idxBest].Value < bestKnownQuality.Value) { // todo: respect Maximization:true/false 75 BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[idxBest].Value); 76 73 77 BestKnownSolutionParameter.ActualValue = bestRun; 74 78 } 75 79 76 IRun best = BestSolutionParameter.ActualValue; 77 if (best == null) { 80 if (BestSolutionParameter.ActualValue == null) { 78 81 BestSolutionParameter.ActualValue = bestRun; 79 82 results.Add(new Result("Best Parameter Settings", bestRun)); … … 84 87 85 88 // population 89 90 int i = 0; 86 91 RunCollection rc = new RunCollection(); 87 92 foreach (ParameterConfigurationTree pt in parameterTrees.OrderByDescending(x => x.BestQuality.Value)) { // todo: respect Maximization:true/false 88 IAlgorithm alg = (IAlgorithm)pt.ActualValue.Value; 89 alg.StoreAlgorithmInEachRun = false; 90 IRun run = new Run(alg); 93 IRun run = new Run(); 94 run.Name = string.Format("Individuum ({0})", i); 91 95 pt.CollectResultValues(run.Results); 96 pt.CollectParameterValues(run.Parameters); 92 97 rc.Add(run); 98 i++; 93 99 } 94 100 if (PopulationParameter.ActualValue == null) { -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurationTree.cs
r5023 r5087 13 13 [StorableClass] 14 14 public class ParameterConfigurationTree : ValueConfiguration { 15 [Storable]16 public EngineAlgorithm Algorithm {17 get { return (EngineAlgorithm)base.ActualValue.Value; }18 set {19 base.ActualValue.Value = value;20 }21 }15 //[Storable] 16 //public EngineAlgorithm Algorithm { 17 // get { return (EngineAlgorithm)base.ActualValue.Value; } 18 // set { 19 // base.ActualValue.Value = value; 20 // } 21 //} 22 22 23 23 [Storable] … … 48 48 set { worstQuality = value; } 49 49 } 50 50 51 51 [Storable] 52 52 private DoubleValue qualityVariance; … … 55 55 set { qualityVariance = value; } 56 56 } 57 57 58 58 [Storable] 59 59 private DoubleValue qualityStandardDeviation; … … 62 62 set { qualityStandardDeviation = value; } 63 63 } 64 64 65 65 [Storable] 66 66 private TimeSpanValue averageExecutionTime; … … 78 78 79 79 [Storable] 80 public RunCollection Runs { get; set; } 81 80 protected RunCollection runs; 81 public RunCollection Runs { 82 get { return runs; } 83 set { runs = value; } 84 } 85 86 protected IDictionary<string, IItem> parameters; 87 public IDictionary<string, IItem> Parameters { 88 get { return parameters; } 89 set { parameters = value; } 90 } 91 82 92 #region constructors and cloning 83 public ParameterConfigurationTree(EngineAlgorithm algorithm) : base(algorithm, algorithm.GetType()) { 93 public ParameterConfigurationTree(EngineAlgorithm algorithm) 94 : base(null, algorithm.GetType()) { 84 95 this.Optimize = true; // root must always be optimized 85 96 this.BestQuality = new DoubleValue(); 97 this.parameters = new Dictionary<string, IItem>(); 98 99 PopulateParameterConfigurations(algorithm); 100 Initialize(); 86 101 } 87 102 public ParameterConfigurationTree() { … … 90 105 [StorableConstructor] 91 106 protected ParameterConfigurationTree(bool deserializing) : base(deserializing) { } 92 protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner) : base(original, cloner) { 107 protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner) 108 : base(original, cloner) { 93 109 this.bestQuality = cloner.Clone(original.BestQuality); 94 this.Algorithm.Prepare(); 95 this.Algorithm.Runs.Clear(); 110 this.parameters = new Dictionary<string, IItem>(); 111 foreach (var p in original.parameters) { 112 this.parameters.Add(p.Key, cloner.Clone(p.Value)); 113 } 96 114 Initialize(); 97 115 } … … 121 139 } 122 140 141 public virtual void CollectParameterValues(IDictionary<string, IItem> values) { 142 foreach (var p in parameters) { 143 values.Add(p); 144 } 145 } 146 123 147 #region Events 124 148 //public event EventHandler AlgorithmChanged; … … 134 158 135 159 //private void RegisterAlgorithmEvents() { 136 160 137 161 //} 138 162 //private void DeregisterAlgorithmEvents() { … … 151 175 #endregion 152 176 177 public override void Parameterize(IParameterizedItem item) { 178 base.Parameterize(item); 179 this.parameters.Clear(); 180 ((IAlgorithm)item).CollectParameterValues(this.Parameters); 181 } 153 182 } 154 183 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs
r5023 r5087 281 281 public void Randomize(IRandom random) { 282 282 if (Optimize) { 283 foreach (var vc in this.ValueConfigurations.CheckedItems) { 284 vc.Randomize(random); 285 } 283 286 actualValueConfigurationIndex = random.Next(ValueConfigurations.CheckedItems.Count()); 284 this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).Randomize(random);285 287 this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue; 286 288 } … … 294 296 actualValueConfigurationIndex = random.Next(ValueConfigurations.CheckedItems.Count()); 295 297 this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue; 296 this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).Mutate(random);297 298 } 298 299 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs
r5023 r5087 34 34 if (optimize) { 35 35 ClearParameterConfigurations(); 36 PopulateParameterConfigurations();36 if (this.actualValue.Value is IParameterizedNamedItem) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem); 37 37 } else { 38 38 ClearParameterConfigurations(); … … 53 53 [Storable] 54 54 protected ConstrainedValue actualValue; 55 public ConstrainedValue ActualValue {55 public virtual ConstrainedValue ActualValue { 56 56 get { return actualValue; } 57 57 set { … … 59 59 ClearParameterConfigurations(); 60 60 this.actualValue = value; 61 PopulateParameterConfigurations();61 if (this.actualValue.Value is IParameterizedNamedItem) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem); 62 62 OnValueChanged(); 63 63 OnToStringChanged(); … … 112 112 #endregion 113 113 114 protected virtual void PopulateParameterConfigurations() { 115 if (this.actualValue.Value is IParameterizedNamedItem) { 116 var parameterizedItem = this.actualValue.Value as IParameterizedNamedItem; 117 foreach (var childParameter in parameterizedItem.Parameters) { 118 var pc = ParameterConfiguration.Create(parameterizedItem, childParameter); 119 if (pc != null) this.parameterConfigurations.Add(pc); 120 } 114 protected virtual void PopulateParameterConfigurations(IParameterizedNamedItem parameterizedItem) { 115 foreach (var childParameter in parameterizedItem.Parameters) { 116 var pc = ParameterConfiguration.Create(parameterizedItem, childParameter); 117 if (pc != null) this.parameterConfigurations.Add(pc); 121 118 } 122 119 } … … 195 192 } 196 193 197 public v oid Parameterize(IParameterizedItem item) {194 public virtual void Parameterize(IParameterizedItem item) { 198 195 foreach (IParameterConfiguration pc in this.ParameterConfigurations) { 199 196 pc.Parameterize((IValueParameter)item.Parameters[pc.ParameterName]); -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/MetaOptimizationEvaluator.cs
r5023 r5087 63 63 64 64 public override IOperation Apply() { 65 EngineAlgorithm algorithm = (EngineAlgorithm)ParameterConfigurationParameter.ActualValue.ActualValue.Value; 65 EngineAlgorithm algorithm = AlgorithmParameter.ActualValue; 66 IItemList<ISingleObjectiveProblem> problems = ProblemsParameter.ActualValue; 66 67 67 68 // set parameters 68 69 ParameterConfigurationParameter.ActualValue.Parameterize(algorithm); 70 algorithm.Problem = problems.First(); 71 algorithm.StoreAlgorithmInEachRun = false; 69 72 70 73 algorithmStopped = false; … … 73 76 List<double> qualities = new List<double>(); 74 77 List<TimeSpan> executionTimes = new List<TimeSpan>(); 78 algorithm.Engine = new SequentialEngine.SequentialEngine(); 75 79 algorithm.Prepare(true); 76 80 77 for (int i = 0; i < Repetitions.Value; i++) { 78 algorithm.Engine = new SequentialEngine.SequentialEngine(); 79 algorithm.Prepare(); 80 algorithm.Start(); 81 while (!algorithmStopped) { 82 Thread.Sleep(200); // wait for algorithm to complete; do not rely on Algorithm.ExecutionState here, because change of ExecutionState happens before Run is added (which causes problems because Algorithm might get cloned when its started already) 81 foreach (ISingleObjectiveProblem problem in problems) { 82 algorithm.Problem = problem; 83 84 for (int i = 0; i < Repetitions.Value; i++) { 85 algorithm.Prepare(); 86 algorithm.Start(); 87 while (!algorithmStopped) { 88 Thread.Sleep(200); // wait for algorithm to complete; do not rely on Algorithm.ExecutionState here, because change of ExecutionState happens before Run is added (which causes problems because Algorithm might get cloned when its started already) 89 } 90 qualities.Add(((DoubleValue)algorithm.Results["BestQuality"].Value).Value); 91 executionTimes.Add(algorithm.ExecutionTime); 92 93 // parameters will be stored in ParameterConfigurationTree anyway. they would be redundant in runs 94 algorithm.Runs.Last().Parameters.Clear(); 95 // but keep the problem, since this differs in runs 96 algorithm.Runs.Last().Parameters.Add("Problem", problem); 97 algorithmStopped = false; 83 98 } 84 qualities.Add(((DoubleValue)algorithm.Results["BestQuality"].Value).Value);85 executionTimes.Add(algorithm.ExecutionTime);86 99 87 algorithmStopped = false;88 100 } 101 102 89 103 algorithm.Stopped -= new EventHandler(ActualValue_Stopped); 104 algorithm.Prepare(); 90 105 91 106 qualities = qualities.OrderBy(x => x).ToList(); // todo: respect Maximization:true/false 92 107 93 108 ParameterConfigurationParameter.ActualValue.AverageExecutionTime = new TimeSpanValue(TimeSpan.FromMilliseconds(executionTimes.Average(t => t.TotalMilliseconds))); 94 109 ParameterConfigurationParameter.ActualValue.Repetitions = Repetitions; … … 102 117 double quality = ParameterConfigurationParameter.ActualValue.AverageQuality.Value; // todo: also include other measures (executiontime, variance) 103 118 this.QualityParameter.ActualValue = new DoubleValue(quality); 104 119 105 120 return base.Apply(); 106 121 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj
r5023 r5087 79 79 </Reference> 80 80 <Reference Include="HeuristicLab.SequentialEngine-3.3"> 81 <HintPath>..\..\ HeuristicLab.MetaOptimization.Test\bin\Debug\HeuristicLab.SequentialEngine-3.3.dll</HintPath>81 <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.SequentialEngine-3.3.dll</HintPath> 82 82 </Reference> 83 83 <Reference Include="System" /> -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs
r5009 r5087 151 151 } 152 152 void BaseLevelAlgorithmParameter_ValueChanged(object sender, EventArgs e) { 153 Algorithm.ProblemChanged += new EventHandler(BaseLevelAlgorithm_ProblemChanged); // when to deregister? 154 BaseLevelAlgorithm_ProblemChanged(sender, e); 153 AlgorithmParameterConfiguration = new ParameterConfigurationTree(Algorithm); 154 155 //Algorithm.ProblemChanged += new EventHandler(BaseLevelAlgorithm_ProblemChanged); // when to deregister? 156 //BaseLevelAlgorithm_ProblemChanged(sender, e); 155 157 } 156 158 157 159 void BaseLevelAlgorithm_ProblemChanged(object sender, EventArgs e) { 158 if (Algorithm != null && Algorithm.Problem != null) {159 AlgorithmParameterConfiguration = new ParameterConfigurationTree(Algorithm);160 }160 //if (Algorithm != null && Algorithm.Problem != null) { 161 // AlgorithmParameterConfiguration = new ParameterConfigurationTree(Algorithm); 162 //} 161 163 } 162 164 #endregion
Note: See TracChangeset
for help on using the changeset viewer.