Changeset 5381 for trunk/sources/HeuristicLab.Encodings.RealVectorEncoding
- Timestamp:
- 01/26/11 18:39:49 (14 years ago)
- Location:
- trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs
r4722 r5381 33 33 /// If not, the elements are corrected. 34 34 /// </summary> 35 [Item("BoundsChecker", "Checks if all elements of a real vector are inside the bounds. If not, elements are corrected.")]35 [Item("BoundsChecker", "Checks if all elements of a real vector are inside the bounds. If not, elements are set to the respective values of the bounds.")] 36 36 [StorableClass] 37 37 public class BoundsChecker : SingleSuccessorOperator, IRealVectorBoundsChecker { -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj
r5163 r5381 12 12 <AssemblyName>HeuristicLab.Encodings.RealVectorEncoding-3.3</AssemblyName> 13 13 <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 14 <TargetFrameworkProfile></TargetFrameworkProfile> 14 <TargetFrameworkProfile> 15 </TargetFrameworkProfile> 15 16 <FileAlignment>512</FileAlignment> 16 17 <SignAssembly>true</SignAssembly> … … 157 158 <Compile Include="Manipulators\PolynomialOnePositionManipulator.cs" /> 158 159 <Compile Include="Manipulators\UniformOnePositionManipulator.cs" /> 160 <Compile Include="ReflectiveBoundsChecker.cs" /> 159 161 <Compile Include="StrategyParameters\StdDevStrategyVectorCreator.cs" /> 160 162 <Compile Include="StrategyParameters\StdDevStrategyVectorCrossover.cs" /> -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs
r4722 r5381 65 65 public override IOperation Apply() { 66 66 RealVector vector = RealVectorParameter.ActualValue; 67 AdditiveMove[] moves = GenerateMoves(RandomParameter.ActualValue, vector);68 67 DoubleMatrix bounds = BoundsParameter.ActualValue; 69 if (bounds != null) { 70 for (int i = 0; i < moves.Length; i++) { 71 AdditiveMove move = moves[i]; 72 if (vector[move.Dimension] + move.MoveDistance < bounds[move.Dimension % bounds.Rows, 0]) 73 vector[move.Dimension] = bounds[move.Dimension % bounds.Rows, 0]; 74 else if (vector[move.Dimension] + move.MoveDistance > bounds[move.Dimension % bounds.Rows, 1]) 75 vector[move.Dimension] = bounds[move.Dimension % bounds.Rows, 1]; 76 } 77 } 68 AdditiveMove[] moves = GenerateMoves(RandomParameter.ActualValue, vector, bounds); 78 69 Scope[] moveScopes = new Scope[moves.Length]; 79 70 for (int i = 0; i < moveScopes.Length; i++) { … … 85 76 } 86 77 87 protected abstract AdditiveMove[] GenerateMoves(IRandom random, RealVector realVector );78 protected abstract AdditiveMove[] GenerateMoves(IRandom random, RealVector realVector, DoubleMatrix bounds); 88 79 } 89 80 } -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticNormalMultiMoveGenerator.cs
r4722 r5381 52 52 } 53 53 54 public static AdditiveMove[] Apply(IRandom random, RealVector realVector, double sigma, int sampleSize) {54 public static AdditiveMove[] Apply(IRandom random, RealVector vector, double sigma, int sampleSize, DoubleMatrix bounds) { 55 55 AdditiveMove[] moves = new AdditiveMove[sampleSize]; 56 56 NormalDistributedRandom N = new NormalDistributedRandom(random, 0, sigma); 57 57 for (int i = 0; i < sampleSize; i++) { 58 int index = random.Next(realVector.Length); 59 moves[i] = new AdditiveMove(index, N.NextDouble()); 58 int index = random.Next(vector.Length); 59 double strength = 0, min = bounds[index % bounds.Rows, 0], max = bounds[index % bounds.Rows, 1]; 60 do { 61 strength = N.NextDouble(); 62 } while (vector[index] + strength < min || vector[index] + strength > max); 63 moves[i] = new AdditiveMove(index, strength); 60 64 } 61 65 return moves; 62 66 } 63 67 64 protected override AdditiveMove[] GenerateMoves(IRandom random, RealVector realVector ) {65 return Apply(random, realVector, SigmaParameter.ActualValue.Value, SampleSizeParameter.ActualValue.Value );68 protected override AdditiveMove[] GenerateMoves(IRandom random, RealVector realVector, DoubleMatrix bounds) { 69 return Apply(random, realVector, SigmaParameter.ActualValue.Value, SampleSizeParameter.ActualValue.Value, bounds); 66 70 } 67 71 } -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticPolynomialMultiMoveGenerator.cs
r4722 r5381 62 62 } 63 63 64 public static AdditiveMove[] Apply(IRandom random, RealVector realVector, double contiguity, int sampleSize, double maxManipulation) {64 public static AdditiveMove[] Apply(IRandom random, RealVector vector, double contiguity, int sampleSize, double maxManipulation, DoubleMatrix bounds) { 65 65 AdditiveMove[] moves = new AdditiveMove[sampleSize]; 66 66 for (int i = 0; i < sampleSize; i++) { 67 int index = random.Next(realVector.Length); 68 moves[i] = new AdditiveMove(index, PolynomialOnePositionManipulator.Apply(random, contiguity) * maxManipulation); 67 int index = random.Next(vector.Length); 68 double strength = 0, min = bounds[index % bounds.Rows, 0], max = bounds[index % bounds.Rows, 1]; 69 do { 70 strength = PolynomialOnePositionManipulator.Apply(random, contiguity) * maxManipulation; 71 } while (vector[index] + strength < min || vector[index] + strength > max); 72 moves[i] = new AdditiveMove(index, strength); 69 73 } 70 74 return moves; 71 75 } 72 76 73 protected override AdditiveMove[] GenerateMoves(IRandom random, RealVector realVector ) {74 return Apply(random, realVector, ContiguityParameter.ActualValue.Value, SampleSizeParameter.ActualValue.Value, MaximumManipulationParameter.ActualValue.Value );77 protected override AdditiveMove[] GenerateMoves(IRandom random, RealVector realVector, DoubleMatrix bounds) { 78 return Apply(random, realVector, ContiguityParameter.ActualValue.Value, SampleSizeParameter.ActualValue.Value, MaximumManipulationParameter.ActualValue.Value, bounds); 75 79 } 76 80 } -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs
r4722 r5381 51 51 get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; } 52 52 } 53 public OptionalValueParameter<IRealVectorBoundsChecker> BoundsCheckerParameter { 54 get { return (OptionalValueParameter<IRealVectorBoundsChecker>)Parameters["BoundsChecker"]; } 55 } 53 56 54 57 [StorableConstructor] … … 63 66 ChildParameter.ActualName = "RealVector"; 64 67 Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector.")); 68 Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker())); 65 69 } 70 71 // BackwardsCompatibility3.3 72 #region Backwards compatible code (remove with 3.4) 73 [StorableHook(HookType.AfterDeserialization)] 74 private void AfterDeserialization() { 75 if (!Parameters.ContainsKey("BoundsChecker")) 76 Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker())); 77 } 78 #endregion 66 79 67 80 public sealed override IOperation Apply() { 68 81 RealVector result = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue); 69 DoubleMatrix bounds = BoundsParameter.ActualValue; 70 if (bounds != null) BoundsChecker.Apply(result, bounds); 71 ChildParameter.ActualValue = result; 72 return base.Apply(); 82 83 IRealVectorBoundsChecker checker = BoundsCheckerParameter.Value; 84 IOperation successor = base.Apply(); 85 if (checker != null) { 86 IOperation checkerOperation = ExecutionContext.CreateChildOperation(checker); 87 if (successor == null) return checkerOperation; 88 else return new OperationCollection(checkerOperation, successor); 89 } else return successor; 73 90 } 74 91 -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs
r4722 r5381 48 48 get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; } 49 49 } 50 public OptionalValueParameter<IRealVectorBoundsChecker> BoundsCheckerParameter { 51 get { return (OptionalValueParameter<IRealVectorBoundsChecker>)Parameters["BoundsChecker"]; } 52 } 50 53 51 54 [StorableConstructor] … … 57 60 Parameters.Add(new LookupParameter<RealVector>("RealVector", "The vector which should be manipulated.")); 58 61 Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector.")); 62 Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker())); 59 63 } 64 65 // BackwardsCompatibility3.3 66 #region Backwards compatible code (remove with 3.4) 67 [StorableHook(HookType.AfterDeserialization)] 68 private void AfterDeserialization() { 69 if (!Parameters.ContainsKey("BoundsChecker")) 70 Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker())); 71 } 72 #endregion 60 73 61 74 public sealed override IOperation Apply() { 62 75 RealVector vector = RealVectorParameter.ActualValue; 63 76 Manipulate(RandomParameter.ActualValue, vector); 64 DoubleMatrix bounds = BoundsParameter.ActualValue; 65 if (bounds != null) BoundsChecker.Apply(vector, bounds); 66 return base.Apply(); 77 78 IRealVectorBoundsChecker checker = BoundsCheckerParameter.Value; 79 IOperation successor = base.Apply(); 80 if (checker != null) { 81 IOperation checkerOperation = ExecutionContext.CreateChildOperation(checker); 82 if (successor == null) return checkerOperation; 83 else return new OperationCollection(checkerOperation, successor); 84 } else return successor; 67 85 } 68 86 -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs
r4722 r5381 89 89 double generalMultiplier = Math.Exp(generalLearningRate * N.NextDouble()); 90 90 for (int i = 0; i < vector.Length; i++) { 91 vector[i] *=generalMultiplier * Math.Exp(learningRate * N.NextDouble());91 double change = vector[i] * generalMultiplier * Math.Exp(learningRate * N.NextDouble()); 92 92 if (bounds != null) { 93 93 double min = bounds[i % bounds.Rows, 0], max = bounds[i % bounds.Rows, 1]; 94 if (vector[i] < min) vector[i] = min; 95 if (vector[i] > max) vector[i] = max; 94 if (min == max) vector[i] = min; 95 else { 96 while (change < min || change > max) 97 change = vector[i] * generalMultiplier * Math.Exp(learningRate * N.NextDouble()); 98 vector[i] = change; 99 } 96 100 } 97 101 }
Note: See TracChangeset
for help on using the changeset viewer.