Changeset 11929 for stable/HeuristicLab.Encodings.BinaryVectorEncoding
- Timestamp:
- 02/06/15 08:30:19 (10 years ago)
- Location:
- stable
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 11410-11411,11909
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Creators/RandomBinaryVectorCreator.cs
r11170 r11929 20 20 #endregion 21 21 22 using System; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; 24 25 using HeuristicLab.Data; 26 using HeuristicLab.Parameters; 25 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 26 28 … … 32 34 [StorableClass] 33 35 public sealed class RandomBinaryVectorCreator : BinaryVectorCreator { 36 private const string TrueProbabilityParameterName = "TruePropability"; 37 38 private IValueLookupParameter<DoubleValue> TrueProbabilityParameter { 39 get { return (IValueLookupParameter<DoubleValue>)Parameters[TrueProbabilityParameterName]; } 40 } 41 42 public DoubleValue TrueProbability { 43 get { return TrueProbabilityParameter.Value; } 44 set { TrueProbabilityParameter.Value = value; } 45 } 46 34 47 [StorableConstructor] 35 48 private RandomBinaryVectorCreator(bool deserializing) : base(deserializing) { } 36 49 private RandomBinaryVectorCreator(RandomBinaryVectorCreator original, Cloner cloner) : base(original, cloner) { } 37 public RandomBinaryVectorCreator() : base() { } 50 public override IDeepCloneable Clone(Cloner cloner) { return new RandomBinaryVectorCreator(this, cloner); } 51 public RandomBinaryVectorCreator() 52 : base() { 53 Parameters.Add(new ValueLookupParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(0.5))); 54 } 38 55 39 public override IDeepCloneable Clone(Cloner cloner) { 40 return new RandomBinaryVectorCreator(this, cloner); 56 [StorableHook(HookType.AfterDeserialization)] 57 private void AfterDeserialization() { 58 // BackwardsCompatibility3.3 59 #region Backwards compatible code, remove with 3.4 60 var defaultValue = 0.5; 61 if (Parameters.ContainsKey(TrueProbabilityParameterName) && Parameters[TrueProbabilityParameterName] is IFixedValueParameter<DoubleValue>) { 62 defaultValue = ((IFixedValueParameter<DoubleValue>)Parameters[TrueProbabilityParameterName]).Value.Value; 63 Parameters.Remove(TrueProbabilityParameterName); 64 } 65 if (!Parameters.ContainsKey(TrueProbabilityParameterName)) 66 Parameters.Add(new ValueLookupParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(defaultValue))); 67 #endregion 41 68 } 42 69 … … 46 73 /// <param name="random">The random number generator.</param> 47 74 /// <param name="length">The length of the binary vector.</param> 75 /// <param name="trueProbability">The propability for true to occur at a certain position in the binary vector</param> 48 76 /// <returns>The newly created binary vector.</returns> 49 public static BinaryVector Apply(IRandom random, int length) { 50 BinaryVector result = new BinaryVector(length, random); 77 public static BinaryVector Apply(IRandom random, int length, double trueProbability = 0.5) { 78 BinaryVector result; 79 80 //Backwards compatiblity code to ensure the same behavior for existing algorithm runs 81 //remove with HL 3.4 82 if (trueProbability.IsAlmost(0.5)) 83 result = new BinaryVector(length, random); 84 else { 85 var values = new bool[length]; 86 for (int i = 0; i < length; i++) 87 values[i] = random.NextDouble() < trueProbability; 88 result = new BinaryVector(values); 89 } 51 90 return result; 52 91 } 53 92 54 93 protected override BinaryVector Create(IRandom random, IntValue length) { 55 return Apply(random, length.Value); 94 if (TrueProbabilityParameter.ActualValue == null) throw new InvalidOperationException("RandomBinaryVectorCreator: Parameter " + TrueProbabilityParameter.ActualName + " could not be found."); 95 return Apply(random, length.Value, TrueProbabilityParameter.ActualValue.Value); 56 96 } 57 97 } -
stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs
r11170 r11929 41 41 /// Number of crossover points. 42 42 /// </summary> 43 public ValueLookupParameter<IntValue> NParameter {44 get { return ( ValueLookupParameter<IntValue>)Parameters["N"]; }43 public IValueLookupParameter<IntValue> NParameter { 44 get { return (IValueLookupParameter<IntValue>)Parameters["N"]; } 45 45 } 46 46 … … 137 137 if (NParameter.ActualValue == null) throw new InvalidOperationException("NPointCrossover: Parameter " + NParameter.ActualName + " could not be found."); 138 138 139 return Apply(random, parents[0], parents[1], NParameter. Value);139 return Apply(random, parents[0], parents[1], NParameter.ActualValue); 140 140 } 141 141 } -
stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SomePositionsBitflipManipulator.cs
r11170 r11929 20 20 #endregion 21 21 22 using System; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 39 40 /// Mmutation probability for each position. 40 41 /// </summary> 41 public ValueLookupParameter<DoubleValue> MutationProbabilityParameter {42 get { return ( ValueLookupParameter<DoubleValue>)Parameters["MutationProbability"]; }42 public IValueLookupParameter<DoubleValue> MutationProbabilityParameter { 43 get { return (IValueLookupParameter<DoubleValue>)Parameters["MutationProbability"]; } 43 44 } 44 45 … … 78 79 /// <param name="realVector">The vector of binary values to manipulate.</param> 79 80 protected override void Manipulate(IRandom random, BinaryVector binaryVector) { 80 Apply(random, binaryVector, MutationProbabilityParameter.Value); 81 if (MutationProbabilityParameter.ActualValue == null) throw new InvalidOperationException("SomePositionsBitflipManipulator: Parameter " + MutationProbabilityParameter.ActualName + " could not be found."); 82 Apply(random, binaryVector, MutationProbabilityParameter.ActualValue); 81 83 } 82 84 } -
stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs
r11170 r11929 20 20 #endregion 21 21 22 using System; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 30 31 [Item("StochasticOneBitflipMultiMoveGenerator", "Randomly samples n from all possible one bitflip moves from a given BinaryVector.")] 31 32 [StorableClass] 32 public class StochasticOneBitflipMultiMoveGenerator : OneBitflipMoveGenerator, I MultiMoveGenerator {33 public class StochasticOneBitflipMultiMoveGenerator : OneBitflipMoveGenerator, IStochasticOperator, IMultiMoveGenerator { 33 34 public ILookupParameter<IRandom> RandomParameter { 34 35 get { return (ILookupParameter<IRandom>)Parameters["Random"]; } … … 66 67 protected override OneBitflipMove[] GenerateMoves(BinaryVector binaryVector) { 67 68 IRandom random = RandomParameter.ActualValue; 69 if (SampleSizeParameter.ActualValue == null) throw new InvalidOperationException("StochasticOneBitflipMultiMoveGenerator: Parameter " + SampleSizeParameter.ActualName + " could not be found."); 68 70 return Apply(binaryVector, random, SampleSizeParameter.ActualValue.Value); 69 71 }
Note: See TracChangeset
for help on using the changeset viewer.