Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/03/14 17:14:56 (9 years ago)
Author:
bgoldman
Message:

#2282 Implemented DeceptiveTrapProblem and IsBetter

Location:
branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj

    r11636 r11640  
    100100  <ItemGroup>
    101101    <Compile Include="AlgorithmBase.cs" />
     102    <Compile Include="DeceptiveTrapProblem.cs" />
    102103    <Compile Include="HillClimber.cs" />
    103104    <Compile Include="Problems\BinaryVectorProblem.cs" />
  • branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HillClimber.cs

    r11637 r11640  
    2727using HeuristicLab.Encodings.BinaryVectorEncoding;
    2828using HeuristicLab.Optimization;
     29using HeuristicLab.Parameters;
    2930using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3031using HeuristicLab.Random;
     
    3839    [Storable]
    3940    private IRandom random;
     41   
     42    private const string IterationsParameterName = "Iterations";
     43
     44    public IFixedValueParameter<IntValue> IterationsParameter {
     45      get { return (IFixedValueParameter<IntValue>)Parameters[IterationsParameterName]; }
     46    }
     47
     48    public int Iterations {
     49      get { return IterationsParameter.Value.Value; }
     50      set { IterationsParameter.Value.Value = value; }
     51    }
    4052
    4153    [StorableConstructor]
     
    5163      : base() {
    5264      random = new MersenneTwister();
     65      Parameters.Add(new FixedValueParameter<IntValue>(IterationsParameterName, "", new IntValue(100)));
    5366    }
    5467    protected override void Run() {
    55       bool[] solution = new bool[Problem.Length];
    56       for (int i = 0; i < solution.Length; i++) {
    57         solution[i] = random.Next(2) == 1;
     68      var BestQuality = new DoubleValue(double.NaN);
     69      Results.Add(new Result("Best quality", BestQuality));
     70      for (int iteration = 0; iteration < Iterations; iteration++) {
     71        bool[] solution = new bool[Problem.Length];
     72        for (int i = 0; i < solution.Length; i++) {
     73          solution[i] = random.Next(2) == 1;
     74        }
     75
     76        var fitness = Problem.Evaluate(solution);
     77
     78        fitness = ImproveToLocalOptimum(Problem, solution, fitness, random);
     79        if (double.IsNaN(BestQuality.Value) || Problem.IsBetter(fitness, BestQuality.Value)) {
     80          BestQuality.Value = fitness;
     81        }
    5882      }
    59       var fitness = Problem.Evaluate(solution);
    60       fitness = ImproveToLocalOptimum(Problem, solution, fitness, random);
    61 
    62       Results.Add(new Result("Best quality", new DoubleValue(fitness)));
    63       Results.Add(new Result("Best solution", new BinaryVector(solution)));
    6483    }
    6584    public static double ImproveToLocalOptimum(BinaryVectorProblem problem, bool[] solution, double fitness, IRandom rand) {
     
    7089          solution[option] = !solution[option];
    7190          double newFitness = problem.Evaluate(solution);
    72           if ((problem.Maximization && fitness < newFitness) || (!problem.Maximization && fitness > newFitness)) {
     91          if (problem.IsBetter(newFitness, fitness)) {
    7392            fitness = newFitness;
    7493            tried.Clear();
  • branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/BinaryVectorProblem.cs

    r11636 r11640  
    4848    protected BinaryVectorProblem(bool deserializing) : base(deserializing) { }
    4949    protected BinaryVectorProblem(BinaryVectorProblem original, Cloner cloner) : base(original, cloner) { }
     50    public bool IsBetter(double quality, double bestQuality) {
     51      return (Maximization && quality > bestQuality || !Maximization && quality < bestQuality);
     52    }
    5053
    5154    public BinaryVectorProblem()
    5255      : base() {
    53       Parameters.Add(new FixedValueParameter<IntValue>(LengthParameterName, "", new IntValue(5)));
     56      Parameters.Add(new FixedValueParameter<IntValue>(LengthParameterName, "", new IntValue(20)));
    5457    }
    5558
  • branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/OneMaxProblem.cs

    r11637 r11640  
    4242    public override double Evaluate(bool[] individual) {
    4343      if (individual.Length != Length) throw new ArgumentException("The individual has not the correct length.");
    44       //return individual.Count(x => x);
    4544      double quality = 0;
    4645      for (int i = 0; i < individual.Length; i++)
Note: See TracChangeset for help on using the changeset viewer.