Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/04/10 18:08:43 (13 years ago)
Author:
cneumuel
Message:

#1215 worked on metaoptimization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs

    r5009 r5023  
    1212using HeuristicLab.Random;
    1313using HeuristicLab.Optimization;
     14using HeuristicLab.Common;
     15using System.IO;
     16using HeuristicLab.Problems.TestFunctions;
     17using System.Text;
     18using HeuristicLab.Selection;
    1419
    1520namespace HeuristicLab.MetaOptimization.Test {
    1621  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;
    2226
    2327    static void Main(string[] args) {
     
    3135      IValueConfiguration algorithmVc = SetupAlgorithm(baseLevelAlgorithm, metaOptimizationProblem);
    3236
    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();
    3943      TestOptimization(metaLevelAlgorithm);
    4044
     
    5054      Console.ReadLine();
    5155
     56      var clones = new List<object>();
    5257      for (int i = 0; i < 1000; i++) {
    5358        var clone = algorithmVc.Clone();
     59        clones.Add(clone);
    5460      }
    5561
     
    7076      metaLevelAlgorithm.Problem = metaOptimizationProblem;
    7177      metaLevelAlgorithm.Engine = new SequentialEngine.SequentialEngine();
     78
     79      metaLevelAlgorithm.Mutator = new ParameterConfigurationManipulator();
     80      metaLevelAlgorithm.MutationProbability.Value = 0.15;
     81
    7282      return metaLevelAlgorithm;
    7383    }
    7484
    7585    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      };
    7890      baseLevelAlgorithm.MaximumGenerations.Value = baseAlgorithmMaxGenerations;
    7991
     
    8597      ConfigureMutationRate(algorithmVc);
    8698      ConfigureMutationOperator(algorithmVc);
     99      ConfigureElites(algorithmVc);
     100      ConfigureSelectionOperator(algorithmVc);
    87101      return algorithmVc;
    88102    }
    89103
    90104    private static void TestConfiguration(IValueConfiguration algorithmVc, GeneticAlgorithm baseLevelAlgorithm) {
    91       IRandom rand = new MersenneTwister();
     105      IRandom rand = new FastRandom(0);
    92106      // set random values
    93107      for (int i = 0; i < 10; i++) {
     
    99113        Console.WriteLine(string.Format("MutRate: original: {0}, randomized: {1}", baseLevelAlgorithm.MutationProbability, newAlg.MutationProbability));
    100114        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);
    103123      // mutate
    104124      for (int i = 0; i < 10; i++) {
     
    110130        Console.WriteLine(string.Format("MutRate: original: {0}, mutated: {1}", baseLevelAlgorithm.MutationProbability, newAlg.MutationProbability));
    111131        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("=======================");
    114138      // cross
    115139      for (int i = 0; i < 10; i++) {
    116140        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
    117146        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);
    123151
    124152        var popSizeBefore = first.PopulationSize.Value;
    125153        var mutRateBefore = first.MutationProbability.Value;
    126154        var mutOpBefore = first.Mutator;
     155        var selOpBefore = first.Selector;
     156        var groupSizeBefore = ((TournamentSelector)first.Selector).GroupSizeParameter.Value.Value;
    127157
    128158        clonedVc1.Cross(clonedVc2, rand);
    129         clonedVc1.Parameterize((GeneticAlgorithm)clonedVc2.ActualValue.Value);
     159        clonedVc1.Parameterize(first);
    130160
    131161        Console.WriteLine(string.Format("PopSize: first: {0}, second: {1}, crossed: {2}", popSizeBefore, second.PopulationSize, first.PopulationSize));
    132162        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("=======================");
    135169    }
    136170
     
    144178        mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false);
    145179      }
     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);
    146205    }
    147206
     
    151210      var populationSizeVc = populationSizePc.ValueConfigurations.First();
    152211      populationSizeVc.Optimize = true;
    153       populationSizeVc.RangeConstraint.LowerBound = new IntValue(0);
     212      populationSizeVc.RangeConstraint.LowerBound = new IntValue(20);
    154213      populationSizeVc.RangeConstraint.UpperBound = new IntValue(100);
    155214      populationSizeVc.RangeConstraint.StepSize = new IntValue(1);
     
    166225    }
    167226
     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
    168237    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++;
    187284          }
    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);
    192293      Console.WriteLine("Finished");
    193294    }
Note: See TracChangeset for help on using the changeset viewer.