Changeset 5023 for branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
- Timestamp:
- 12/04/10 18:08:43 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
r5009 r5023 12 12 using HeuristicLab.Random; 13 13 using HeuristicLab.Optimization; 14 using HeuristicLab.Common; 15 using System.IO; 16 using HeuristicLab.Problems.TestFunctions; 17 using System.Text; 18 using HeuristicLab.Selection; 14 19 15 20 namespace HeuristicLab.MetaOptimization.Test { 16 21 class Program { 17 private static int metaAlgorithmPopulationSize = 20; 18 private static int metaAlgorithmMaxGenerations = 100; 19 20 private static int baseAlgorithmPopulationSize = 20; 21 private static int baseAlgorithmMaxGenerations = 30; 22 private static int metaAlgorithmPopulationSize = 40; 23 private static int metaAlgorithmMaxGenerations = 30; 24 25 private static int baseAlgorithmMaxGenerations = 100; 22 26 23 27 static void Main(string[] args) { … … 31 35 IValueConfiguration algorithmVc = SetupAlgorithm(baseLevelAlgorithm, metaOptimizationProblem); 32 36 33 Console.WriteLine("Press enter to start");34 Console.ReadLine();35 TestConfiguration(algorithmVc, baseLevelAlgorithm);36 37 Console.WriteLine("Press enter to start");38 Console.ReadLine();37 //Console.WriteLine("Press enter to start"); 38 //Console.ReadLine(); 39 //TestConfiguration(algorithmVc, baseLevelAlgorithm); 40 41 //Console.WriteLine("Press enter to start"); 42 //Console.ReadLine(); 39 43 TestOptimization(metaLevelAlgorithm); 40 44 … … 50 54 Console.ReadLine(); 51 55 56 var clones = new List<object>(); 52 57 for (int i = 0; i < 1000; i++) { 53 58 var clone = algorithmVc.Clone(); 59 clones.Add(clone); 54 60 } 55 61 … … 70 76 metaLevelAlgorithm.Problem = metaOptimizationProblem; 71 77 metaLevelAlgorithm.Engine = new SequentialEngine.SequentialEngine(); 78 79 metaLevelAlgorithm.Mutator = new ParameterConfigurationManipulator(); 80 metaLevelAlgorithm.MutationProbability.Value = 0.15; 81 72 82 return metaLevelAlgorithm; 73 83 } 74 84 75 85 private static IValueConfiguration SetupAlgorithm(GeneticAlgorithm baseLevelAlgorithm, MetaOptimizationProblem metaOptimizationProblem) { 76 baseLevelAlgorithm.Problem = new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() { ProblemSize = new IntValue(2000) }; 77 baseLevelAlgorithm.PopulationSize.Value = baseAlgorithmPopulationSize; 86 baseLevelAlgorithm.Problem = new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() { 87 Evaluator = new GriewankEvaluator(), 88 ProblemSize = new IntValue(1000) 89 }; 78 90 baseLevelAlgorithm.MaximumGenerations.Value = baseAlgorithmMaxGenerations; 79 91 … … 85 97 ConfigureMutationRate(algorithmVc); 86 98 ConfigureMutationOperator(algorithmVc); 99 ConfigureElites(algorithmVc); 100 ConfigureSelectionOperator(algorithmVc); 87 101 return algorithmVc; 88 102 } 89 103 90 104 private static void TestConfiguration(IValueConfiguration algorithmVc, GeneticAlgorithm baseLevelAlgorithm) { 91 IRandom rand = new MersenneTwister();105 IRandom rand = new FastRandom(0); 92 106 // set random values 93 107 for (int i = 0; i < 10; i++) { … … 99 113 Console.WriteLine(string.Format("MutRate: original: {0}, randomized: {1}", baseLevelAlgorithm.MutationProbability, newAlg.MutationProbability)); 100 114 Console.WriteLine(string.Format("MutOp: original: {0}, randomized: {1}", baseLevelAlgorithm.Mutator, newAlg.Mutator)); 101 } 102 115 Console.WriteLine(string.Format("SelOp: original: {0}, randomized: {1}", baseLevelAlgorithm.Selector, newAlg.Selector)); 116 Console.WriteLine(string.Format("GrSi: original: {0}, randomized: {1}", "?", ((TournamentSelector)newAlg.Selector).GroupSizeParameter.Value)); 117 Console.WriteLine("---"); 118 } 119 120 Console.WriteLine("======================="); 121 algorithmVc.Randomize(rand); 122 algorithmVc.Parameterize(baseLevelAlgorithm); 103 123 // mutate 104 124 for (int i = 0; i < 10; i++) { … … 110 130 Console.WriteLine(string.Format("MutRate: original: {0}, mutated: {1}", baseLevelAlgorithm.MutationProbability, newAlg.MutationProbability)); 111 131 Console.WriteLine(string.Format("MutOp: original: {0}, mutated: {1}", baseLevelAlgorithm.Mutator, newAlg.Mutator)); 112 } 113 132 Console.WriteLine(string.Format("SelOp: original: {0}, mutated: {1}", baseLevelAlgorithm.Selector, newAlg.Selector)); 133 Console.WriteLine(string.Format("GrSi: original: {0}, mutated: {1}", ((TournamentSelector)baseLevelAlgorithm.Selector).GroupSizeParameter.Value, ((TournamentSelector)newAlg.Selector).GroupSizeParameter.Value)); 134 Console.WriteLine("---"); 135 } 136 137 Console.WriteLine("======================="); 114 138 // cross 115 139 for (int i = 0; i < 10; i++) { 116 140 IValueConfiguration clonedVc1 = (IValueConfiguration)algorithmVc.Clone(); 141 IValueConfiguration clonedVc2 = (IValueConfiguration)algorithmVc.Clone(); 142 143 GeneticAlgorithm first = (GeneticAlgorithm)clonedVc1.ActualValue.Value.Clone(); 144 GeneticAlgorithm second = (GeneticAlgorithm)clonedVc2.ActualValue.Value.Clone(); 145 117 146 clonedVc1.Randomize(rand); 118 clonedVc1.Parameterize(baseLevelAlgorithm); 119 120 IValueConfiguration clonedVc2 = (IValueConfiguration)algorithmVc.Clone(); 121 GeneticAlgorithm first = (GeneticAlgorithm)clonedVc1.ActualValue.Value; 122 GeneticAlgorithm second = (GeneticAlgorithm)clonedVc2.ActualValue.Value; 147 clonedVc1.Parameterize(first); 148 149 clonedVc2.Randomize(rand); 150 clonedVc2.Parameterize(second); 123 151 124 152 var popSizeBefore = first.PopulationSize.Value; 125 153 var mutRateBefore = first.MutationProbability.Value; 126 154 var mutOpBefore = first.Mutator; 155 var selOpBefore = first.Selector; 156 var groupSizeBefore = ((TournamentSelector)first.Selector).GroupSizeParameter.Value.Value; 127 157 128 158 clonedVc1.Cross(clonedVc2, rand); 129 clonedVc1.Parameterize( (GeneticAlgorithm)clonedVc2.ActualValue.Value);159 clonedVc1.Parameterize(first); 130 160 131 161 Console.WriteLine(string.Format("PopSize: first: {0}, second: {1}, crossed: {2}", popSizeBefore, second.PopulationSize, first.PopulationSize)); 132 162 Console.WriteLine(string.Format("MutRate: first: {0}, second: {1}, crossed: {2}", mutRateBefore, second.MutationProbability, first.MutationProbability)); 133 Console.WriteLine(string.Format("MutRate: first: {0}, second: {1}, crossed: {2}", mutOpBefore, second.Mutator, first.Mutator)); 134 } 163 Console.WriteLine(string.Format("MutOp: first: {0}, second: {1}, crossed: {2}", mutOpBefore, second.Mutator, first.Mutator)); 164 Console.WriteLine(string.Format("SelOp: first: {0}, second: {1}, crossed: {2}", selOpBefore, second.Selector, first.Selector)); 165 Console.WriteLine(string.Format("GrSi: first: {0}, second: {1}, crossed: {2}", groupSizeBefore, ((TournamentSelector)second.Selector).GroupSizeParameter.Value, ((TournamentSelector)first.Selector).GroupSizeParameter.Value)); 166 Console.WriteLine("---"); 167 } 168 Console.WriteLine("======================="); 135 169 } 136 170 … … 144 178 mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false); 145 179 } 180 } 181 182 private static void ConfigureSelectionOperator(IValueConfiguration algorithmVc) { 183 var selectionOperatorPc = algorithmVc.ParameterConfigurations.Where(x => x.Name == "Selector").SingleOrDefault(); 184 selectionOperatorPc.Optimize = true; 185 186 foreach (var vc in selectionOperatorPc.ValueConfigurations) { 187 if (vc.ActualValue.ValueDataType == typeof(TournamentSelector)) { 188 selectionOperatorPc.ValueConfigurations.SetItemCheckedState(vc, true); 189 vc.Optimize = true; 190 ConfigureTournamentGroupSize(vc); 191 } else { 192 selectionOperatorPc.ValueConfigurations.SetItemCheckedState(vc, false); 193 } 194 } 195 } 196 197 private static void ConfigureTournamentGroupSize(IValueConfiguration tournamentVc) { 198 var groupSizePc = tournamentVc.ParameterConfigurations.Where(x => x.ParameterName == "GroupSize").SingleOrDefault(); 199 groupSizePc.Optimize = true; 200 201 groupSizePc.ValueConfigurations.First().Optimize = true; 202 groupSizePc.ValueConfigurations.First().RangeConstraint.LowerBound = new IntValue(0); 203 groupSizePc.ValueConfigurations.First().RangeConstraint.UpperBound = new IntValue(100); 204 groupSizePc.ValueConfigurations.First().RangeConstraint.StepSize = new IntValue(1); 146 205 } 147 206 … … 151 210 var populationSizeVc = populationSizePc.ValueConfigurations.First(); 152 211 populationSizeVc.Optimize = true; 153 populationSizeVc.RangeConstraint.LowerBound = new IntValue( 0);212 populationSizeVc.RangeConstraint.LowerBound = new IntValue(20); 154 213 populationSizeVc.RangeConstraint.UpperBound = new IntValue(100); 155 214 populationSizeVc.RangeConstraint.StepSize = new IntValue(1); … … 166 225 } 167 226 227 private static void ConfigureElites(IValueConfiguration algorithmVc) { 228 var elitesPc = algorithmVc.ParameterConfigurations.Where(x => x.Name == "Elites").SingleOrDefault(); 229 elitesPc.Optimize = true; 230 var elitesVc = elitesPc.ValueConfigurations.First(); 231 elitesVc.Optimize = true; 232 elitesVc.RangeConstraint.LowerBound = new IntValue(0); 233 elitesVc.RangeConstraint.UpperBound = new IntValue(20); 234 elitesVc.RangeConstraint.StepSize = new IntValue(1); 235 } 236 168 237 private static void TestOptimization(GeneticAlgorithm metaLevelAlgorithm) { 169 metaLevelAlgorithm.Start(); 170 do { 171 Thread.Sleep(1000); 172 Console.Clear(); 173 try { 174 foreach (var result in metaLevelAlgorithm.Results) { 175 Console.WriteLine(result.ToString()); 176 if (result.Name == "Population") { 177 RunCollection rc = (RunCollection)result.Value; 178 var orderedRuns = rc.OrderBy(x => x.Results["BestQuality"]); 179 foreach (IRun run in orderedRuns) { 180 Console.WriteLine("Q: {0} PoSi: {1} MuRa: {2} MuOp: {3}", 181 ((DoubleValue)run.Results["BestQuality"]).Value.ToString("0.00").PadLeft(4, ' '), 182 ((IntValue)run.Parameters["PopulationSize"]).Value.ToString().PadLeft(3, ' '), 183 ((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.00").PadRight(3, ' '), 184 run.Parameters["Mutator"]); 185 } 186 } 238 ContentManager.Initialize(new PersistenceContentManager()); 239 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Results"); 240 if(!Directory.Exists(path)) 241 Directory.CreateDirectory(path); 242 string id = DateTime.Now.ToString("MM.dd.yy - HH;mm;ss,ffff"); 243 string resultPath = Path.Combine(path, string.Format("Test - {0} - Result.hl", id)); 244 string outputPath = Path.Combine(path, string.Format("Test - {0} - Console.txt", id)); 245 246 using (var sw = new StreamWriter(outputPath)) { 247 metaLevelAlgorithm.Start(); 248 int i = 0; 249 int currentGeneration = -1; 250 do { 251 Thread.Sleep(500); 252 try { 253 if (metaLevelAlgorithm.Results.ContainsKey("Generations") && ((IntValue)metaLevelAlgorithm.Results["Generations"].Value).Value != currentGeneration) { 254 StringBuilder sb = new StringBuilder(); 255 sb.AppendLine(DateTime.Now.ToLongTimeString()); 256 sb.AppendLine("================================="); 257 258 foreach (var result in metaLevelAlgorithm.Results) { 259 sb.AppendLine(result.ToString()); 260 if (result.Name == "Population") { 261 RunCollection rc = (RunCollection)result.Value; 262 var orderedRuns = rc.OrderBy(x => x.Results["BestQuality"]); 263 264 sb.AppendLine("Qality PoSi MutRa Eli GrSi MutOp"); 265 foreach (IRun run in orderedRuns) { 266 sb.AppendLine(string.Format("{0} {1} {2} {3} {4} {5}", 267 ((DoubleValue)run.Results["BestQuality"]).Value.ToString("#0.00").PadLeft(7, ' '), 268 ((IntValue)run.Parameters["PopulationSize"]).Value.ToString().PadLeft(3, ' ').PadRight(3, ' '), 269 ((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.00").PadLeft(5, ' '), 270 ((IntValue)run.Parameters["Elites"]).Value.ToString().PadLeft(3, ' '), 271 ((TournamentSelector)run.Parameters["Selector"]).GroupSizeParameter.Value.ToString().PadLeft(4, ' '), 272 run.Parameters["Mutator"])); 273 } 274 } 275 } // foreach 276 Console.Clear(); 277 Console.WriteLine(sb.ToString()); 278 sw.WriteLine(sb.ToString()); 279 sw.Flush(); 280 currentGeneration = ((IntValue)metaLevelAlgorithm.Results["Generations"].Value).Value; 281 } // if 282 if (i % 30 == 0) GC.Collect(); 283 i++; 187 284 } 188 } 189 catch { } 190 } while (metaLevelAlgorithm.ExecutionState != ExecutionState.Stopped); 191 285 catch { } 286 } while (metaLevelAlgorithm.ExecutionState != ExecutionState.Stopped); 287 } 288 289 Console.WriteLine(); 290 Console.WriteLine("Storing..."); 291 292 ContentManager.Save(metaLevelAlgorithm, resultPath, true); 192 293 Console.WriteLine("Finished"); 193 294 }
Note: See TracChangeset
for help on using the changeset viewer.