Changeset 11575 for branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
- Timestamp:
- 11/24/14 17:08:24 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
r11561 r11575 205 205 if (intEnc != null) { 206 206 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; 208 215 } 209 216 #endregion … … 219 226 } 220 227 #endregion 221 #region Configure Permutation Creator222 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 #endregion234 228 throw new ArgumentException(string.Format("Encoding {0} is unknown.", encoding != null ? encoding.GetType().FullName : "(null)")); 235 229 } 236 230 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 }242 231 protected virtual void ConfigureSingleEncodingOperators(ISolutionCreator newCreator, IEncoding encoding) { 243 232 // remove all multiencoding operators … … 283 272 #endregion 284 273 #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) { 288 276 // do not replace a permutation creator that was manually set 289 277 if (!(SolutionCreator is IPermutationCreator) 290 || ((IPermutationCreator)SolutionCreator).PermutationParameter.ActualName != perm Creator.PermutationParameter.ActualName) {278 || ((IPermutationCreator)SolutionCreator).PermutationParameter.ActualName != permEncoding.Name) { 291 279 Operators.Remove(SolutionCreator); 292 280 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 } 328 282 } else { 329 283 Operators.RemoveAll(x => x is IPermutationCrossover
Note: See TracChangeset
for help on using the changeset viewer.