Changeset 5381
- Timestamp:
- 01/26/11 18:39:49 (14 years ago)
- Location:
- trunk/sources
- Files:
-
- 1 added
- 2 deleted
- 11 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 } -
trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj
r5163 r5381 12 12 <AssemblyName>HeuristicLab.Problems.TestFunctions-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> … … 128 129 <Compile Include="Evaluators\ZakharovEvaluator.cs" /> 129 130 <Compile Include="HeuristicLabProblemsTestFunctionsPlugin.cs" /> 130 <Compile Include="Interfaces\IRealVectorPSODecoder.cs" />131 131 <Compile Include="Interfaces\IBestSingleObjectiveTestFunctionSolutionAnalyzer.cs" /> 132 132 <Compile Include="Interfaces\IRastriginMoveEvaluator.cs" /> 133 <Compile Include="Interfaces\IRealVectorPSOEncoder.cs" />134 133 <Compile Include="Interfaces\ISingleObjectiveTestFunctionAdditiveMoveEvaluator.cs" /> 135 134 <Compile Include="Interfaces\ISingleObjectiveTestFunctionMoveEvaluator.cs" /> -
trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs
r4722 r5381 20 20 #endregion 21 21 22 using System; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; 24 using HeuristicLab.Data;25 using HeuristicLab.Encodings.RealVectorEncoding;26 25 using HeuristicLab.Operators; 27 using HeuristicLab.Parameters;28 26 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 27 30 28 namespace HeuristicLab.Problems.TestFunctions { 31 public class RealVectorToRealVectorEncoder : SingleSuccessorOperator, IRealVectorPSOEncoder, IRealVectorOperator { 32 #region Parameters 33 34 public IParameter OriginalRealVectorParameter { 35 get { return (IParameter)Parameters["OriginalRealVector"]; } 36 } 37 38 public IParameter RealVectorParameter { 39 get { return (IParameter)Parameters["RealVector"]; } 40 } 41 42 public ILookupParameter<IntValue> LengthParameter { 43 get { return (ILookupParameter<IntValue>)Parameters["Length"]; } 44 } 45 46 public IValueLookupParameter<DoubleMatrix> BoundsParameter { 47 get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; } 48 } 49 50 protected ScopeParameter CurrentScopeParameter { 51 get { return (ScopeParameter)Parameters["CurrentScope"]; } 52 } 53 #endregion 54 55 public IScope CurrentScope { 56 get { return CurrentScopeParameter.ActualValue; } 57 } 29 // BackwardsCompatibility3.3 30 #region Backwards compatible code (remove with 3.4) 31 [Obsolete("This operator should not be used anymore.")] 32 internal class RealVectorToRealVectorEncoder : SingleSuccessorOperator { 58 33 59 34 [StorableConstructor] … … 62 37 public RealVectorToRealVectorEncoder() 63 38 : base() { 64 Parameters.Add(new LookupParameter<RealVector>("OriginalRealVector", "The original real vector."));65 Parameters.Add(new LookupParameter<RealVector>("RealVector", "The resulting reference to the original real vector."));66 Parameters.Add(new LookupParameter<IntValue>("Length", "Vector length."));67 Parameters.Add(new ScopeParameter("CurrentScope", "The current scope bounds matrix should be cloned."));68 Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension."));69 39 } 70 40 … … 74 44 75 45 public override IOperation Apply() { 76 RealVectorParameter.ActualValue = OriginalRealVectorParameter.ActualValue;77 IItem value = (IItem)BoundsParameter.ActualValue.Clone();78 CurrentScope.Variables.Add(new Variable("ParticleBounds", BoundsParameter.Description, value == null ? null : (IItem)value.Clone()));79 46 return base.Apply(); 80 47 } … … 84 51 } 85 52 } 53 #endregion 86 54 } -
trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
r5287 r5381 403 403 op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName; 404 404 } 405 foreach (IRealVectorPSOEncoder op in Operators.OfType<IRealVectorPSOEncoder>()) {406 ((ILookupParameter)op.OriginalRealVectorParameter).ActualName = SolutionCreator.RealVectorParameter.ActualName;407 op.BoundsParameter.Value = (DoubleMatrix)BoundsParameter.Value.Clone();408 op.BoundsParameter.ActualName = "ParticleBounds";409 }410 405 } 411 406 private void UpdateStrategyVectorBounds() { 412 407 DoubleMatrix strategyBounds = (DoubleMatrix)Bounds.Clone(); 413 for (int i = 0; i < strategyBounds.Rows; i++) 408 for (int i = 0; i < strategyBounds.Rows; i++) { 414 409 if (strategyBounds[i, 0] < 0) strategyBounds[i, 0] = 0; 410 strategyBounds[i, 1] = 0.1 * (Bounds[i, 1] - Bounds[i, 0]); 411 } 415 412 strategyVectorCreator.BoundsParameter.Value = strategyBounds; 416 413 }
Note: See TracChangeset
for help on using the changeset viewer.