- Timestamp:
- 11/26/14 13:24:20 (10 years ago)
- Location:
- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/BinaryEncoding.cs
r11582 r11587 48 48 } 49 49 public override IEnumerable<IValueParameter> Parameters { 50 get { return base.Parameters.Concat(new IValueParameter[] { LengthParameter }); }50 get { return new IValueParameter[] { LengthParameter }; } 51 51 } 52 52 #endregion … … 73 73 : base(name) { 74 74 lengthParameter = new FixedValueParameter<IntValue>(Name + "Length", new IntValue(length)); 75 SolutionCreator = new RandomBinaryVectorCreator(); 75 76 RegisterParameterEvents(); 76 77 DiscoverOperators(); 77 SolutionCreator = Operators.OfType<RandomBinaryVectorCreator>().Single();78 78 } 79 79 … … 106 106 var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, pluginDescription, true, false, false); 107 107 var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t)); 108 var newOperators = operators.Except( encodingOperators, new TypeEqualityComparer<IOperator>()).ToList();108 var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList(); 109 109 110 110 ConfigureOperators(newOperators); 111 encodingOperators.AddRange(newOperators); 111 foreach (var @operator in newOperators) 112 encodingOperators.Add(@operator); 112 113 } 113 114 #endregion -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/Encoding.cs
r11582 r11587 37 37 } 38 38 39 public virtual IEnumerable<IValueParameter> Parameters { 40 get { return Enumerable.Empty<IValueParameter>(); } 41 } 39 public abstract IEnumerable<IValueParameter> Parameters { get; } 42 40 43 protected List<IOperator> encodingOperators = new List<IOperator>();41 protected HashSet<IOperator> encodingOperators = new HashSet<IOperator>(new TypeEqualityComparer<IOperator>()); 44 42 [Storable] 45 43 public IEnumerable<IOperator> Operators { 46 44 get { return encodingOperators; } 47 pr otected set { encodingOperators = new List<IOperator>(value); }45 private set { encodingOperators = new HashSet<IOperator>(value, new TypeEqualityComparer<IOperator>()); } 48 46 } 49 50 47 51 48 ISolutionCreator IEncoding.SolutionCreator { 52 49 get { return SolutionCreator; } 53 50 set { 54 if (!(value is T)) throw new ArgumentException( "???");51 if (!(value is T)) throw new ArgumentException(string.Format("Cannot assign the solution creator {0} to the encoding {1}.", value.GetType().GetPrettyName(), GetType().GetPrettyName())); 55 52 SolutionCreator = (T)value; 56 53 } … … 64 61 if (value == null) throw new ArgumentNullException("SolutionCreator must not be null."); 65 62 if (solutionCreator == value) return; 63 encodingOperators.Remove(solutionCreator); 64 encodingOperators.Add(value); 66 65 solutionCreator = value; 67 66 OnSolutionCreatorChanged(); … … 74 73 protected Encoding(Encoding<T> original, Cloner cloner) 75 74 : base(original, cloner) { 76 encodingOperators = original.Operators.Select(cloner.Clone).ToList();75 encodingOperators = new HashSet<IOperator>(original.Operators.Select(cloner.Clone)); 77 76 solutionCreator = cloner.Clone(original.solutionCreator); 78 77 } … … 80 79 81 80 81 public abstract void ConfigureOperators(IEnumerable<IOperator> operators); 82 public void ConfigureOperator(IOperator @operator) { ConfigureOperators(new[] { @operator }); } 82 83 83 public void ConfigureOperator(IOperator @operator) { 84 ConfigureOperators(new[] { @operator }); 85 } 86 public virtual void ConfigureOperators(IEnumerable<IOperator> operators) { 87 88 } 89 84 public event EventHandler SolutionCreatorChanged; 90 85 protected virtual void OnSolutionCreatorChanged() { 91 86 ConfigureOperator(SolutionCreator); 87 var handler = SolutionCreatorChanged; 88 if (handler != null) handler(this, EventArgs.Empty); 92 89 } 93 90 -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/IntegerEncoding.cs
r11582 r11587 61 61 62 62 public override IEnumerable<IValueParameter> Parameters { 63 get { return base.Parameters.Concat(new IValueParameter[] { LengthParameter, BoundsParameter }); }63 get { return new IValueParameter[] { LengthParameter, BoundsParameter }; } 64 64 } 65 65 #endregion … … 94 94 if (min >= max) throw new ArgumentException("min must be less than max", "min"); 95 95 if (step.HasValue && step.Value <= 0) throw new ArgumentException("step must be greater than zero or null", "step"); 96 96 97 Length = length; 97 98 Bounds = new IntMatrix(1, step.HasValue ? 3 : 2); … … 99 100 Bounds[0, 1] = max; 100 101 if (step.HasValue) Bounds[0, 2] = step.Value; 102 103 SolutionCreator = new UniformRandomIntegerVectorCreator(); 101 104 RegisterParameterEvents(); 102 105 DiscoverOperators(); 103 SolutionCreator = Operators.OfType<UniformRandomIntegerVectorCreator>().Single();104 106 } 105 107 public IntegerEncoding(string name, int length, IList<int> min, IList<int> max, IList<int> step = null) … … 109 111 if (step != null && min.Count != step.Count) throw new ArgumentException("step must be of the same length as min or null", "step"); 110 112 if (min.Zip(max, (mi, ma) => mi >= ma).Any(x => x)) throw new ArgumentException("min must be less than max in each dimension", "min"); 113 111 114 Length = length; 112 115 Bounds = new IntMatrix(min.Count, step != null ? 3 : 2); … … 116 119 if (step != null) Bounds[i, 2] = step[i]; 117 120 } 121 122 SolutionCreator = new UniformRandomIntegerVectorCreator(); 118 123 RegisterParameterEvents(); 119 124 DiscoverOperators(); 120 SolutionCreator = Operators.OfType<UniformRandomIntegerVectorCreator>().Single();121 125 } 122 126 … … 159 163 var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, true, false, false); 160 164 var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t)); 161 var newOperators = operators.Except( encodingOperators, new TypeEqualityComparer<IOperator>()).ToList();165 var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList(); 162 166 163 167 ConfigureOperators(newOperators); 164 encodingOperators.AddRange(newOperators); 168 foreach (var @operator in newOperators) 169 encodingOperators.Add(@operator); 165 170 } 166 171 #endregion -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/MultiEncoding.cs
r11559 r11587 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Core; 26 using HeuristicLab.Encodings.PermutationEncoding;27 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 using HeuristicLab.PluginInfrastructure; 29 using HeuristicLab.Problems.Programmable.Interfaces; 28 30 29 31 namespace HeuristicLab.Problems.Programmable { … … 31 33 [StorableClass] 32 34 public class MultiEncoding : Encoding<MultiEncodingCreator> { 35 36 private readonly List<IEncoding> encodings; 37 33 38 [Storable] 34 public KeyedItemCollection<string, IEncoding> Encodings { get; protected set; } 39 public IEnumerable<IEncoding> Encodings { 40 get { return encodings; } 41 private set { encodings.AddRange(value); } 42 } 43 44 public override IEnumerable<IValueParameter> Parameters { 45 get { return Encodings.SelectMany(e => e.Parameters); } 46 } 35 47 36 48 [StorableConstructor] 37 protected MultiEncoding(bool deserializing) : base(deserializing) { } 49 protected MultiEncoding(bool deserializing) 50 : base(deserializing) { 51 encodings = new List<IEncoding>(); 52 } 53 54 public override IDeepCloneable Clone(Cloner cloner) { return new MultiEncoding(this, cloner); } 38 55 protected MultiEncoding(MultiEncoding original, Cloner cloner) 39 56 : base(original, cloner) { 40 Encodings = cloner.Clone(original.Encodings);57 encodings = new List<IEncoding>(original.Encodings.Select(cloner.Clone)); 41 58 } 42 59 public MultiEncoding() 43 60 : base("MultiEncoding") { 44 Encodings = new NamedItemCollection<IEncoding>(); 61 encodings = new List<IEncoding>(); 62 SolutionCreator = new MultiEncodingCreator(); 63 64 foreach (var @operator in ApplicationManager.Manager.GetInstances<IMultiEncodingOperator>()) 65 encodingOperators.Add(@operator); 45 66 } 46 67 47 public override IDeepCloneable Clone(Cloner cloner) { 48 return new MultiEncoding(this, cloner); 49 } 68 public MultiEncoding Add(IEncoding encoding) { 69 if (encoding is MultiEncoding) throw new InvalidOperationException("Nesting of MultiEncodings is not supported."); 70 if (Encodings.Any(e => e.Name == encoding.Name)) throw new ArgumentException("Encoding name must be unique", "encoding.Name"); 71 encodings.Add(encoding); 50 72 51 public MultiEncoding AddBinaryVector(string variableName, int length) {52 if (Encodings.ContainsKey(variableName)) throw new ArgumentException("variableName must be unique", "variableName");53 Encodings.Add(new BinaryEncoding(variableName, length));73 foreach (var @operator in Operators.OfType<IMultiEncodingOperator>()) { 74 @operator.AddEncoding(encoding); 75 } 54 76 return this; 55 77 } 56 78 57 public MultiEncoding AddIntegerVector(string variableName, int length, int min, int max, int? step = null) { 58 if (Encodings.ContainsKey(variableName)) throw new ArgumentException("variableName must be unique", "variableName"); 59 Encodings.Add(new IntegerEncoding(variableName, length, min, max, step)); 60 return this; 79 public bool Remove(IEncoding encoding) { 80 var success = encodings.Remove(encoding); 81 foreach (var @operator in Operators.OfType<IMultiEncodingOperator>()) { 82 @operator.RemoveEncoding(encoding); 83 } 84 return success; 61 85 } 62 86 63 public MultiEncoding AddIntegerVector(string variableName, int length, IList<int> min, IList<int> max, IList<int> step = null) { 64 if (Encodings.ContainsKey(variableName)) throw new ArgumentException("variableName must be unique", "variableName"); 65 Encodings.Add(new IntegerEncoding(variableName, length, min, max, step)); 66 return this; 67 } 87 public override void ConfigureOperators(IEnumerable<IOperator> operators) { 68 88 69 public MultiEncoding AddRealVector(string variableName, int length, double min, double max) {70 if (Encodings.ContainsKey(variableName)) throw new ArgumentException("variableName must be unique", "variableName");71 Encodings.Add(new RealEncoding(variableName, length, min, max));72 return this;73 }74 75 public MultiEncoding AddRealVector(string variableName, int length, IList<double> min, IList<double> max) {76 if (Encodings.ContainsKey(variableName)) throw new ArgumentException("variableName must be unique", "variableName");77 Encodings.Add(new RealEncoding(variableName, length, min, max));78 return this;79 }80 81 public MultiEncoding AddPermutation(string variableName, int length, PermutationTypes type) {82 if (Encodings.ContainsKey(variableName)) throw new ArgumentException("variableName must be unique", "variableName");83 Encodings.Add(new PermutationEncoding(variableName, length, type));84 return this;85 89 } 86 90 } -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/PermutationEncoding.cs
r11582 r11587 60 60 61 61 public override IEnumerable<IValueParameter> Parameters { 62 get { return base.Parameters.Concat(new IValueParameter[] { LengthParameter, PermutationTypeParameter }); }62 get { return new IValueParameter[] { LengthParameter, PermutationTypeParameter }; } 63 63 } 64 64 #endregion … … 89 89 RegisterParameterEvents(); 90 90 } 91 91 92 public PermutationEncoding(string name, int length, PermutationTypes type) 92 93 : base(name) { 93 94 Length = length; 94 95 Type = type; 96 97 SolutionCreator = new RandomPermutationCreator(); 95 98 RegisterParameterEvents(); 96 99 DiscoverOperators(); 97 SolutionCreator = Operators.OfType<RandomPermutationCreator>().Single();98 100 } 99 101 … … 138 140 var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, true, false, false); 139 141 var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t)); 140 var newOperators = operators.Except( encodingOperators, new TypeEqualityComparer<IOperator>()).ToList();142 var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList(); 141 143 142 144 ConfigureOperators(newOperators); 143 encodingOperators.AddRange(newOperators); 145 foreach (var @operator in newOperators) 146 encodingOperators.Add(@operator); 144 147 } 145 148 #endregion 146 149 147 150 public override void ConfigureOperators(IEnumerable<IOperator> operators) { 148 base.ConfigureOperators(operators);149 151 ConfigureCreators(Operators.OfType<IPermutationCreator>()); 150 152 ConfigureCrossovers(Operators.OfType<IPermutationCrossover>()); -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/RealEncoding.cs
r11582 r11587 62 62 63 63 public override IEnumerable<IValueParameter> Parameters { 64 get { return base.Parameters.Concat(new IValueParameter[] { LengthParameter, BoundsParameter }); }64 get { return new IValueParameter[] { LengthParameter, BoundsParameter }; } 65 65 } 66 66 #endregion … … 101 101 lengthParameter = new FixedValueParameter<IntValue>(Name + "Length", new IntValue(length)); 102 102 boundsParameter = new ValueParameter<DoubleMatrix>(Name + "Bounds", bounds); 103 104 SolutionCreator = new UniformRandomRealVectorCreator(); 103 105 RegisterParameterEvents(); 104 106 DiscoverOperators(); 105 SolutionCreator = Operators.OfType<UniformRandomRealVectorCreator>().Single();106 107 } 107 108 … … 119 120 lengthParameter = new FixedValueParameter<IntValue>(Name + "Length", new IntValue(length)); 120 121 boundsParameter = new ValueParameter<DoubleMatrix>(Name + "Bounds", bounds); 122 123 SolutionCreator = new UniformRandomRealVectorCreator(); 121 124 RegisterParameterEvents(); 122 125 DiscoverOperators(); 123 SolutionCreator = Operators.OfType<UniformRandomRealVectorCreator>().Single();124 126 } 125 127 … … 167 169 var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, true, false, false); 168 170 var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t)); 169 var newOperators = operators.Except( encodingOperators, new TypeEqualityComparer<IOperator>()).ToList();171 var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList(); 170 172 171 173 ConfigureOperators(newOperators); 172 encodingOperators.AddRange(newOperators); 174 foreach (var @operator in newOperators) 175 encodingOperators.Add(@operator); 173 176 174 177 foreach (var strategyVectorCreator in Operators.OfType<IRealVectorStdDevStrategyParameterCreator>())
Note: See TracChangeset
for help on using the changeset viewer.