Changeset 11929 for stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Creators/RandomBinaryVectorCreator.cs
- Timestamp:
- 02/06/15 08:30:19 (9 years ago)
- Location:
- stable
- Files:
-
- 2 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 }
Note: See TracChangeset
for help on using the changeset viewer.