Changeset 3182


Ignore:
Timestamp:
03/22/10 17:03:29 (12 years ago)
Author:
abeham
Message:

Updated real vector to check bounds after each crossover and manipulation #890

Location:
trunk/sources
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs

    r3123 r3182  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Core;
    2324using HeuristicLab.Data;
    2425using HeuristicLab.Operators;
     26using HeuristicLab.Parameters;
    2527using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    26 using HeuristicLab.Parameters;
    27 using System;
    2828
    2929namespace HeuristicLab.Encodings.RealVectorEncoding {
     
    3434  [Item("BoundsChecker", "Checks if all elements of a real vector are inside the bounds. If not, elements are corrected.")]
    3535  [StorableClass]
    36   public class BoundsChecker : SingleSuccessorOperator {
     36  public class BoundsChecker : SingleSuccessorOperator, IRealVectorBoundsChecker {
    3737    public LookupParameter<RealVector> RealVectorParameter {
    3838      get { return (LookupParameter<RealVector>)Parameters["RealVector"]; }
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj

    r3054 r3182  
    103103    <Compile Include="Crossovers\UniformSomePositionsArithmeticCrossover.cs" />
    104104    <Compile Include="HeuristicLabEncodingsRealVectorEncodingPlugin.cs" />
     105    <Compile Include="Interfaces\IRealVectorBoundsChecker.cs" />
    105106    <Compile Include="RealVector.cs" />
    106107    <Compile Include="Manipulators\BreederGeneticAlgorithmManipulator.cs" />
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorCrossover.cs

    r3060 r3182  
    3131    ILookupParameter<ItemArray<RealVector>> ParentsParameter { get; }
    3232    ILookupParameter<RealVector> ChildParameter { get; }
     33    IValueLookupParameter<DoubleMatrix> BoundsParameter { get; }
    3334  }
    3435}
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorManipulator.cs

    r3060 r3182  
    3030  public interface IRealVectorManipulator : IRealVectorOperator, IManipulator {
    3131    ILookupParameter<RealVector> RealVectorParameter { get; }
     32    IValueLookupParameter<DoubleMatrix> BoundsParameter { get; }
    3233  }
    3334}
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs

    r3123 r3182  
    3838  public class BreederGeneticAlgorithmManipulator : RealVectorManipulator {
    3939    private static readonly double[] powerOfTwo = new double[] { 1, 0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125, 0.00390625, 0.001953125, 0.0009765625, 0.00048828125, 0.000244140625, 0.0001220703125, 0.00006103515625, 0.000030517578125 };
    40     public ValueLookupParameter<DoubleMatrix> BoundsParameter {
    41       get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
    42     }
    4340    public ValueLookupParameter<DoubleValue> SearchIntervalFactorParameter {
    4441      get { return (ValueLookupParameter<DoubleValue>)Parameters["SearchIntervalFactor"]; }
     
    5047    public BreederGeneticAlgorithmManipulator()
    5148      : base() {
    52       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds for each element in the vector."));
    53       Parameters.Add(new ValueLookupParameter<DoubleValue>("SearchIntervalFactor", "The factor determining the size of the search interval, that will be added/removed to/from the allele selected for manipulation.", new DoubleValue(0.1)));
     49      Parameters.Add(new ValueLookupParameter<DoubleValue>("SearchIntervalFactor", "The factor determining the size of the search interval, that will be added/removed to/from the allele selected for manipulation. E.g. a value of 0.1 means 10% of the range will be maximally added/removed.", new DoubleValue(0.1)));
    5450    }
    5551
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs

    r3172 r3182  
    3838  public class MichalewiczNonUniformAllPositionsManipulator : RealVectorManipulator {
    3939    /// <summary>
    40     /// The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled.
    41     /// </summary>
    42     public ValueLookupParameter<DoubleMatrix> BoundsParameter {
    43       get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
    44     }
    45     /// <summary>
    4640    /// The current generation.
    4741    /// </summary>
     
    6963    public MichalewiczNonUniformAllPositionsManipulator()
    7064      : base() {
    71       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled."));
    7265      Parameters.Add(new LookupParameter<IntValue>("Generation", "Current generation of the algorithm"));
    7366      Parameters.Add(new LookupParameter<IntValue>("MaximumGenerations", "Maximum number of generations"));
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs

    r3123 r3182  
    3838  public class MichalewiczNonUniformOnePositionManipulator : RealVectorManipulator {
    3939    /// <summary>
    40     /// The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled.
    41     /// </summary>
    42     public ValueLookupParameter<DoubleMatrix> BoundsParameter {
    43       get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
    44     }
    45     /// <summary>
    4640    /// The current generation.
    4741    /// </summary>
     
    6963    public MichalewiczNonUniformOnePositionManipulator()
    7064      : base() {
    71       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled."));
    7265      Parameters.Add(new LookupParameter<IntValue>("Generation", "Current generation of the algorithm"));
    7366      Parameters.Add(new LookupParameter<IntValue>("MaximumGenerations", "Maximum number of generations"));
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs

    r3123 r3182  
    3737  public class UniformOnePositionManipulator : RealVectorManipulator {
    3838    /// <summary>
    39     /// The bounds of the values in the real vector.
    40     /// </summary>
    41     public ValueLookupParameter<DoubleMatrix> BoundsParameter {
    42       get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
    43     }
    44 
    45     /// <summary>
    46     /// Initializes a new instance of <see cref="UniformOnePositionManipulator"/> with one parameter
    47     /// (<c>Bounds</c>).
    48     /// </summary>
    49     public UniformOnePositionManipulator() {
    50       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "Lower and upper bound of the positions in the vector."));
    51     }
    52 
    53     /// <summary>
    5439    /// Changes randomly a single position in the given real <paramref name="vector"/>.
    5540    /// </summary>
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs

    r3060 r3182  
    4747      get { return (ILookupParameter<RealVector>)Parameters["Child"]; }
    4848    }
     49    public IValueLookupParameter<DoubleMatrix> BoundsParameter {
     50      get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
     51    }
    4952
    5053    protected RealVectorCrossover()
     
    5356      Parameters.Add(new SubScopesLookupParameter<RealVector>("Parents", "The parent vectors which should be crossed."));
    5457      Parameters.Add(new LookupParameter<RealVector>("Child", "The child vector resulting from the crossover."));
     58      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
    5559    }
    5660
    5761    public sealed override IOperation Apply() {
    58       ChildParameter.ActualValue = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
     62      RealVector result = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
     63      DoubleMatrix bounds = BoundsParameter.ActualValue;
     64      if (bounds != null) BoundsChecker.Apply(result, bounds);
     65      ChildParameter.ActualValue = result;
    5966      return base.Apply();
    6067    }
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs

    r3060 r3182  
    4444      get { return (ILookupParameter<RealVector>)Parameters["RealVector"]; }
    4545    }
     46    public IValueLookupParameter<DoubleMatrix> BoundsParameter {
     47      get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
     48    }
    4649
    4750    protected RealVectorManipulator()
     
    4952      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
    5053      Parameters.Add(new LookupParameter<RealVector>("RealVector", "The vector which should be manipulated."));
     54      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
    5155    }
    5256
    5357    public sealed override IOperation Apply() {
    54       Manipulate(RandomParameter.ActualValue, RealVectorParameter.ActualValue);
     58      RealVector vector = RealVectorParameter.ActualValue;
     59      Manipulate(RandomParameter.ActualValue, vector);
     60      DoubleMatrix bounds = BoundsParameter.ActualValue;
     61      if (bounds != null) BoundsChecker.Apply(vector, bounds);
    5562      return base.Apply();
    5663    }
  • trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs

    r3170 r3182  
    226226        Bounds[e.Value, 0] = Bounds[e.Value, 1] - 0.1;
    227227    }
     228    private void BoundsParameter_NameChanged(object sender, EventArgs e) {
     229      ParameterizeOperators();
     230    }
    228231    #endregion
    229232
     
    234237      ProblemSizeParameter.ValueChanged += new EventHandler(ProblemSizeParameter_ValueChanged);
    235238      ProblemSize.ValueChanged += new EventHandler(ProblemSize_ValueChanged);
     239      BoundsParameter.NameChanged += new EventHandler(BoundsParameter_NameChanged);
    236240      BoundsParameter.ValueChanged += new EventHandler(BoundsParameter_ValueChanged);
    237241      Bounds.ToStringChanged += new EventHandler(Bounds_ToStringChanged);
     
    243247      VisualizerParameter.ValueChanged += new EventHandler(VisualizerParameter_ValueChanged);
    244248    }
    245 
    246249    private void InitializeOperators() {
    247250      operators = new List<IRealVectorOperator>();
     
    280283        op.ParentsParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
    281284        op.ChildParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
     285        op.BoundsParameter.ActualName = BoundsParameter.Name;
    282286      }
    283287      foreach (IRealVectorManipulator op in Operators.OfType<IRealVectorManipulator>()) {
    284288        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
     289        op.BoundsParameter.ActualName = BoundsParameter.Name;
    285290      }
    286291      /*foreach (IPermutationMoveOperator op in Operators.OfType<IPermutationMoveOperator>()) {
Note: See TracChangeset for help on using the changeset viewer.