Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/24/14 17:08:24 (9 years ago)
Author:
mkommend
Message:

#2174: Adapted permutation encoding.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs

    r11561 r11575  
    205205      if (intEnc != null) {
    206206        DynamicEncodingParameters.AddRange(intEnc.Parameters);
    207         return intEnc.DefaultSolutionCreator;
     207        return intEnc.SolutionCreator;
     208      }
     209      #endregion
     210      #region Configure Permutation Creator
     211      var permEnc = encoding as PermutationEncoding;
     212      if (permEnc != null) {
     213        DynamicEncodingParameters.AddRange(permEnc.Parameters);
     214        return permEnc.SolutionCreator;
    208215      }
    209216      #endregion
     
    219226      }
    220227      #endregion
    221       #region Configure Permutation Creator
    222       var permEnc = encoding as PermutationEncoding;
    223       if (permEnc != null) {
    224         var l = new ValueParameter<IntValue>(permEnc.Name + "Length", permEnc.Length);
    225         DynamicEncodingParameters.Add(l);
    226 
    227         var creator = new RandomPermutationCreator();
    228         creator.PermutationParameter.ActualName = permEnc.Name;
    229         creator.LengthParameter.ActualName = l.Name;
    230         creator.PermutationTypeParameter.Value = permEnc.Type;
    231         return creator;
    232       }
    233       #endregion
    234228      throw new ArgumentException(string.Format("Encoding {0} is unknown.", encoding != null ? encoding.GetType().FullName : "(null)"));
    235229    }
    236230
    237 
    238     private IEnumerable<IOperator> GetDiscoveredOperators<T>() where T : class,IOperator {
    239       return ApplicationManager.Manager.GetInstances<T>()
    240           .Except(Operators.OfType<T>(), new TypeEqualityComparer<T>());
    241     }
    242231    protected virtual void ConfigureSingleEncodingOperators(ISolutionCreator newCreator, IEncoding encoding) {
    243232      // remove all multiencoding operators
     
    283272      #endregion
    284273      #region Configure Operators for PermutationEncoding
    285       var permCreator = newCreator as IPermutationCreator;
    286       if (permCreator != null) {
    287         var paramName = permCreator.PermutationParameter.ActualName;
     274      var permEncoding = encoding as PermutationEncoding;
     275      if (permEncoding != null) {
    288276        // do not replace a permutation creator that was manually set
    289277        if (!(SolutionCreator is IPermutationCreator)
    290             || ((IPermutationCreator)SolutionCreator).PermutationParameter.ActualName != permCreator.PermutationParameter.ActualName) {
     278            || ((IPermutationCreator)SolutionCreator).PermutationParameter.ActualName != permEncoding.Name) {
    291279          Operators.Remove(SolutionCreator);
    292280          SolutionCreator = newCreator;
    293           Operators.Add(SolutionCreator);
    294         }
    295 
    296         #region Wire Permutation Crossovers
    297         var crossovers = Operators.OfType<IPermutationCrossover>()
    298           .Union(ApplicationManager.Manager.GetInstances<IPermutationCrossover>(), new TypeEqualityComparer<IPermutationCrossover>())
    299           .ToList();
    300         foreach (var xo in crossovers) {
    301           xo.ChildParameter.ActualName = permCreator.PermutationParameter.ActualName;
    302           xo.ChildParameter.Hidden = true;
    303           xo.ParentsParameter.ActualName = permCreator.PermutationParameter.ActualName;
    304           xo.ParentsParameter.Hidden = true;
    305         }
    306         Operators.AddRange(crossovers.Except(Operators.OfType<IPermutationCrossover>()));
    307         #endregion
    308         #region Wire Permutation Manipulators
    309         var manipulators = Operators.OfType<IPermutationManipulator>()
    310           .Union(ApplicationManager.Manager.GetInstances<IPermutationManipulator>(), new TypeEqualityComparer<IPermutationManipulator>())
    311           .ToList();
    312         foreach (var m in manipulators) {
    313           m.PermutationParameter.ActualName = permCreator.PermutationParameter.ActualName;
    314           m.PermutationParameter.Hidden = true;
    315         }
    316         Operators.AddRange(manipulators.Except(Operators.OfType<IPermutationManipulator>()));
    317         #endregion
    318         #region Wire Permutation ShakingOperators
    319         var shakingOperators = Operators.OfType<IPermutationMultiNeighborhoodShakingOperator>()
    320           .Union(ApplicationManager.Manager.GetInstances<IPermutationMultiNeighborhoodShakingOperator>(), new TypeEqualityComparer<IPermutationMultiNeighborhoodShakingOperator>())
    321           .ToList();
    322         foreach (var op in shakingOperators) {
    323           op.PermutationParameter.ActualName = paramName;
    324           op.PermutationParameter.Hidden = true;
    325         }
    326         Operators.AddRange(shakingOperators.Except(Operators.OfType<IPermutationMultiNeighborhoodShakingOperator>()));
    327         #endregion
     281        }
    328282      } else {
    329283        Operators.RemoveAll(x => x is IPermutationCrossover
Note: See TracChangeset for help on using the changeset viewer.