Changeset 16892 for branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs
- Timestamp:
- 05/04/19 08:22:42 (5 years ago)
- Location:
- branches/2925_AutoDiffForDynamicalModels
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2925_AutoDiffForDynamicalModels
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimization
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Optimization merged: 16782,16784,16794,16796,16860,16875
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs
r16662 r16892 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using HEAL.Attic; 25 26 using HeuristicLab.Common; 26 27 using HeuristicLab.Core; 27 28 using HeuristicLab.Operators; 28 29 using HeuristicLab.Parameters; 29 using HEAL.Attic;30 30 31 31 namespace HeuristicLab.Optimization { … … 39 39 } 40 40 41 public abstract string OperatorPrefix { get; } 42 41 43 [StorableConstructor] 42 protected MultiEncodingOperator(StorableConstructorFlag _) : base(_) { 43 } 44 44 protected MultiEncodingOperator(StorableConstructorFlag _) : base(_) { } 45 45 protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner) 46 46 : base(original, cloner) { … … 49 49 encoding.OperatorsChanged += Encoding_OperatorsChanged; 50 50 } 51 52 51 protected MultiEncodingOperator() : base() { } 53 52 54 53 [StorableHook(HookType.AfterDeserialization)] 55 54 private void AfterDeserialization() { 56 foreach (var encoding in encodings) 55 foreach (var encoding in encodings) { 56 // BackwardsCompatibility3.3 57 #region Backwards compatible code, remove with 3.4 58 if (Parameters.ContainsKey(encoding.Name) && !Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) { 59 var oldParam = (IConstrainedValueParameter<T>)Parameters[encoding.Name]; 60 var selected = oldParam.Value; 61 Parameters.Remove(oldParam); 62 var newParam = new ConstrainedValueParameter<T>(OperatorPrefix + "." + encoding.Name, new ItemSet<T>(oldParam.ValidValues)); 63 newParam.Value = selected; 64 Parameters.Add(newParam); 65 oldParam.ValidValues.Clear(); 66 } 67 #endregion 57 68 encoding.OperatorsChanged += Encoding_OperatorsChanged; 69 } 58 70 } 59 71 60 61 72 public override IOperation Apply() { 62 var operations = Parameters.Select(p => p.ActualValue).OfType<IOperator>().Select(op => ExecutionContext.Create Operation(op));73 var operations = Parameters.Select(p => p.ActualValue).OfType<IOperator>().Select(op => ExecutionContext.CreateChildOperation(op)); 63 74 return new OperationCollection(operations); 64 75 } 65 76 66 77 public virtual void AddEncoding(IEncoding encoding) { 67 if (Parameters.ContainsKey( encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name));78 if (Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name)); 68 79 69 80 encodings.Add(encoding); 70 81 encoding.OperatorsChanged += Encoding_OperatorsChanged; 71 82 72 var param = new ConstrainedValueParameter<T>( encoding.Name, new ItemSet<T>(encoding.Operators.OfType<T>()));83 var param = new ConstrainedValueParameter<T>(OperatorPrefix + "." + encoding.Name, new ItemSet<T>(encoding.Operators.OfType<T>())); 73 84 param.Value = param.ValidValues.First(); 74 85 Parameters.Add(param); … … 78 89 if (!encodings.Remove(encoding)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name)); 79 90 encoding.OperatorsChanged -= Encoding_OperatorsChanged; 80 return Parameters.Remove( encoding.Name);91 return Parameters.Remove(OperatorPrefix + "." + encoding.Name); 81 92 } 82 93 83 94 protected IConstrainedValueParameter<T> GetParameter(IEncoding encoding) { 84 if (!Parameters.ContainsKey( encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));95 if (!Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name)); 85 96 86 return (IConstrainedValueParameter<T>)Parameters[ encoding.Name];97 return (IConstrainedValueParameter<T>)Parameters[OperatorPrefix + "." + encoding.Name]; 87 98 } 88 99
Note: See TracChangeset
for help on using the changeset viewer.