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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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();
Note: See TracChangeset for help on using the changeset viewer.