Ignore:
Timestamp:
09/17/12 12:31:38 (9 years ago)
Author:
jkarder
Message:

#1853: fixed execution of crossovers and manipulators

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Manipulators/ParameterConfigurationManipulator.cs

    r8574 r8665  
    7777
    7878    public static void Mutate(IRandom random, IOptimizable configuration, IIntValueManipulator intValueManipulator, IDoubleValueManipulator doubleValueManipulator) {
    79       var vc = configuration as RangeValueConfiguration;
    80       var pc = configuration as IParameterConfiguration;
    81 
    82       if (vc != null) {
    83         var value = vc.ActualValue.Value;
    84         var range = vc.RangeConstraint;
    85         if (value is IntValue) {
     79      if (configuration is ParameterizedValueConfiguration) {
     80        var configVc = (ParameterizedValueConfiguration)configuration;
     81        for (int i = 0; i < configVc.ParameterConfigurations.Count; i++)
     82          Mutate(random, configVc.ParameterConfigurations.ElementAt(i), intValueManipulator, doubleValueManipulator);
     83      } else if (configuration is ParameterConfiguration) {
     84        var configPc = (IParameterConfiguration)configuration;
     85        if (configPc.Optimize) {
     86          foreach (var vc in configPc.ValueConfigurations)
     87            if (configPc.ValueConfigurations.ItemChecked(vc))
     88              if (vc.Optimize) Mutate(random, vc, intValueManipulator, doubleValueManipulator);
     89          do configPc.ActualValueConfigurationIndex = random.Next(configPc.ValueConfigurations.Count);
     90          while (!configPc.ValueConfigurations.ItemChecked(configPc.ValueConfigurations[configPc.ActualValueConfigurationIndex]));
     91          configPc.ActualValue = configPc.ValueConfigurations[configPc.ActualValueConfigurationIndex].ActualValue;
     92        }
     93      } else if (configuration is RangeValueConfiguration) {
     94        var configVc = (RangeValueConfiguration)configuration;
     95        var value = configVc.ActualValue.Value;
     96        var range = configVc.RangeConstraint;
     97        if (value is IntValue)
    8698          intValueManipulator.Apply(random, (IntValue)value, (IntValueRange)range);
    87         } else if (value is PercentValue) {
     99        else if (value is PercentValue)
    88100          doubleValueManipulator.Apply(random, (PercentValue)value, ((PercentValueRange)range).AsDoubleValueRange());
    89         } else if (value is DoubleValue) {
     101        else if (value is DoubleValue)
    90102          doubleValueManipulator.Apply(random, (DoubleValue)value, (DoubleValueRange)range);
    91         }
    92       } else if (pc != null) {
    93         do {
    94           pc.ActualValueConfigurationIndex = random.Next(pc.ValueConfigurations.Count());
    95         } while (!pc.ValueConfigurations.ItemChecked(pc.ValueConfigurations[pc.ActualValueConfigurationIndex]));
    96         pc.ActualValue = pc.ValueConfigurations[pc.ActualValueConfigurationIndex].ActualValue;
    97103      }
    98104    }
Note: See TracChangeset for help on using the changeset viewer.