Changeset 11946


Ignore:
Timestamp:
02/06/15 14:15:10 (8 years ago)
Author:
mkommend
Message:

#2174: Merged trunk changes into programmable problem branch.

Location:
branches/ProgrammableProblem
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/ProgrammableProblem/HeuristicLab.Encodings.BinaryVectorEncoding

  • branches/ProgrammableProblem/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Creators/RandomBinaryVectorCreator.cs

    r11411 r11946  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    3536    private const string TrueProbabilityParameterName = "TruePropability";
    3637
    37     private IFixedValueParameter<DoubleValue> TrueProbabilityParameter {
    38       get { return (IFixedValueParameter<DoubleValue>)Parameters[TrueProbabilityParameterName]; }
     38    private IValueLookupParameter<DoubleValue> TrueProbabilityParameter {
     39      get { return (IValueLookupParameter<DoubleValue>)Parameters[TrueProbabilityParameterName]; }
    3940    }
    4041
    41     public double TrueProbability {
    42       get { return TrueProbabilityParameter.Value.Value; }
    43       set { TrueProbabilityParameter.Value.Value = value; }
     42    public DoubleValue TrueProbability {
     43      get { return TrueProbabilityParameter.Value; }
     44      set { TrueProbabilityParameter.Value = value; }
    4445    }
    4546
    4647    [StorableConstructor]
    4748    private RandomBinaryVectorCreator(bool deserializing) : base(deserializing) { }
    48 
    4949    private RandomBinaryVectorCreator(RandomBinaryVectorCreator original, Cloner cloner) : base(original, cloner) { }
    5050    public override IDeepCloneable Clone(Cloner cloner) { return new RandomBinaryVectorCreator(this, cloner); }
    51 
    5251    public RandomBinaryVectorCreator()
    5352      : base() {
    54       Parameters.Add(new FixedValueParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(0.5)));
     53      Parameters.Add(new ValueLookupParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(0.5)));
    5554    }
    5655
    5756    [StorableHook(HookType.AfterDeserialization)]
    5857    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      }
    5965      if (!Parameters.ContainsKey(TrueProbabilityParameterName))
    60         Parameters.Add(new FixedValueParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(0.5)));
     66        Parameters.Add(new ValueLookupParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(defaultValue)));
     67      #endregion
    6168    }
    6269
     
    7481      //remove with HL 3.4
    7582      if (trueProbability.IsAlmost(0.5))
    76       result = new BinaryVector(length, random);
     83        result = new BinaryVector(length, random);
    7784      else {
    7885        var values = new bool[length];
     
    8592
    8693    protected override BinaryVector Create(IRandom random, IntValue length) {
    87       return Apply(random, length.Value, TrueProbability);
     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);
    8896    }
    8997  }
  • branches/ProgrammableProblem/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs

    r11171 r11946  
    4141    /// Number of crossover points.
    4242    /// </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"]; }
    4545    }
    4646
     
    137137      if (NParameter.ActualValue == null) throw new InvalidOperationException("NPointCrossover: Parameter " + NParameter.ActualName + " could not be found.");
    138138
    139       return Apply(random, parents[0], parents[1], NParameter.Value);
     139      return Apply(random, parents[0], parents[1], NParameter.ActualValue);
    140140    }
    141141  }
  • branches/ProgrammableProblem/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SomePositionsBitflipManipulator.cs

    r11171 r11946  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    3940    /// Mmutation probability for each position.
    4041    /// </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"]; }
    4344    }
    4445
     
    7879    /// <param name="realVector">The vector of binary values to manipulate.</param>
    7980    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);
    8183    }
    8284  }
  • branches/ProgrammableProblem/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs

    r11171 r11946  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    3031  [Item("StochasticOneBitflipMultiMoveGenerator", "Randomly samples n from all possible one bitflip moves from a given BinaryVector.")]
    3132  [StorableClass]
    32   public class StochasticOneBitflipMultiMoveGenerator : OneBitflipMoveGenerator, IMultiMoveGenerator {
     33  public class StochasticOneBitflipMultiMoveGenerator : OneBitflipMoveGenerator, IStochasticOperator, IMultiMoveGenerator {
    3334    public ILookupParameter<IRandom> RandomParameter {
    3435      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
     
    6667    protected override OneBitflipMove[] GenerateMoves(BinaryVector binaryVector) {
    6768      IRandom random = RandomParameter.ActualValue;
     69      if (SampleSizeParameter.ActualValue == null) throw new InvalidOperationException("StochasticOneBitflipMultiMoveGenerator: Parameter " + SampleSizeParameter.ActualName + " could not be found.");
    6870      return Apply(binaryVector, random, SampleSizeParameter.ActualValue.Value);
    6971    }
  • branches/ProgrammableProblem/HeuristicLab.Encodings.IntegerVectorEncoding

  • branches/ProgrammableProblem/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Interfaces/IIntegerVectorStdDevStrategyParameterOperator.cs

    r11394 r11946  
    2323
    2424namespace HeuristicLab.Encodings.IntegerVectorEncoding {
    25   public interface IIntegerVectorStdDevStrategyParameterOperator : IItem {
     25  public interface IIntegerVectorStdDevStrategyParameterOperator : IOperator {
    2626  }
    2727}
  • branches/ProgrammableProblem/HeuristicLab.Encodings.PermutationEncoding

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/ProgrammableProblem/HeuristicLab.Encodings.RealVectorEncoding

  • branches/ProgrammableProblem/HeuristicLab.Encodings.RealVectorEncoding/3.3/Creators/NormalDistributedRealVectorCreator.cs

    r11171 r11946  
    8888    /// </remarks>
    8989    /// <param name="random">The random number generator.</param>
    90     /// <param name="mean">The mean vector around which the resulting vector is sampled.</param>
    91     /// <param name="sigma">The vector of standard deviations, must have at least one row.</param>
     90    /// <param name="means">The mean vector around which the resulting vector is sampled.</param>
     91    /// <param name="sigmas">The vector of standard deviations, must have at least one row.</param>
    9292    /// <param name="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.</param>
    9393    /// <param name="maximumTries">The maximum number of tries to sample a value inside the bounds for each dimension. If a valid value cannot be obtained, the mean will be used.</param>
    9494    /// <returns>The newly created real vector.</returns>
    95     public static RealVector Apply(IRandom random, RealVector mean, DoubleArray sigma, DoubleMatrix bounds, int maximumTries = 1000) {
     95    public static RealVector Apply(IntValue lengthValue, IRandom random, RealVector means, DoubleArray sigmas, DoubleMatrix bounds, int maximumTries = 1000) {
     96      if (lengthValue == null || lengthValue.Value == 0) throw new ArgumentException("Length is not defined or zero");
    9697      if (random == null) throw new ArgumentNullException("Random is not defined", "random");
    97       if (mean == null || mean.Length == 0) throw new ArgumentNullException("Mean is not defined", "mean");
    98       if (sigma == null || sigma.Length == 0) throw new ArgumentNullException("Sigma is not defined.", "sigma");
     98      if (means == null || means.Length == 0) throw new ArgumentNullException("Mean is not defined", "mean");
     99      if (sigmas == null || sigmas.Length == 0) throw new ArgumentNullException("Sigma is not defined.", "sigma");
    99100      if (bounds == null || bounds.Rows == 0) bounds = new DoubleMatrix(new[,] { { double.MinValue, double.MaxValue } });
     101      var length = lengthValue.Value;
    100102      var nd = new NormalDistributedRandom(random, 0, 1);
    101       var result = (RealVector)mean.Clone();
     103      var result = new RealVector(length);
    102104      for (int i = 0; i < result.Length; i++) {
    103105        var min = bounds[i % bounds.Rows, 0];
    104106        var max = bounds[i % bounds.Rows, 1];
    105         if (min.IsAlmost(max) || mean[i] < min) result[i] = min;
    106         else if (mean[i] > max) result[i] = max;
     107        var mean = means[i % means.Length];
     108        var sigma = sigmas[i % sigmas.Length];
     109        if (min.IsAlmost(max) || mean < min) result[i] = min;
     110        else if (mean > max) result[i] = max;
    107111        else {
    108112          int count = 0;
    109113          bool inRange;
    110114          do {
    111             result[i] = mean[i] + sigma[i % sigma.Length] * nd.NextDouble();
    112             inRange = result[i] >= bounds[i % bounds.Rows, 0] && result[i] < bounds[i % bounds.Rows, 1];
     115            result[i] = mean + sigma * nd.NextDouble();
     116            inRange = result[i] >= min && result[i] < max;
    113117            count++;
    114118          } while (count < maximumTries && !inRange);
    115119          if (count == maximumTries && !inRange)
    116             result[i] = mean[i];
     120            result[i] = mean;
    117121        }
    118122      }
     
    128132    /// <returns>The newly created real vector.</returns>
    129133    protected override RealVector Create(IRandom random, IntValue length, DoubleMatrix bounds) {
    130       return Apply(random, MeanParameter.ActualValue, SigmaParameter.ActualValue, bounds, MaximumTriesParameter.Value.Value);
     134      return Apply(length, random, MeanParameter.ActualValue, SigmaParameter.ActualValue, bounds, MaximumTriesParameter.Value.Value);
    131135    }
    132136  }
  • branches/ProgrammableProblem/HeuristicLab.Optimization

    • Property svn:mergeinfo changed (with no actual effect on merging)
Note: See TracChangeset for help on using the changeset viewer.