Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/09/17 00:36:20 (7 years ago)
Author:
abeham
Message:

#2701:

  • Added alternating bits binary test Problem
  • Refactored MemPR to work with programmable problem in current trunk
  • fixed a bug in permutation MemPR when crossover doesn't assign an offspring
File:
1 copied

Legend:

Unmodified
Added
Removed
  • branches/MemPRAlgorithm/HeuristicLab.Problems.Binary/3.3/AlternatingBitsProblem.cs

    r14543 r14552  
    2020#endregion
    2121
    22 using System;
    23 using System.Linq;
    2422using HeuristicLab.Common;
    2523using HeuristicLab.Core;
     
    2826
    2927namespace HeuristicLab.Problems.Binary {
    30   [Item("One Max Problem", "Represents a problem whose objective is to maximize the number of true values.")]
    31   [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 210)]
     28  [Item("Alternating Bits Problem", "Represents a problem whose objective is to achieve an alternating sequence of bits, long sequences of consecutive bits receive a penalty.")]
     29  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 220)]
    3230  [StorableClass]
    33   public class OneMaxProblem : BinaryProblem {
     31  public class AlternatingBitsProblem : BinaryProblem {
    3432    public override bool Maximization {
    35       get { return true; }
     33      get { return false; }
    3634    }
    3735
    38     public OneMaxProblem()
     36    public AlternatingBitsProblem()
    3937      : base() {
    40       Encoding.Length = 10;
    41       BestKnownQuality = Encoding.Length;
     38      Encoding.Length = 256;
     39      BestKnownQuality = 0;
    4240    }
    4341
    4442    [StorableConstructor]
    45     protected OneMaxProblem(bool deserializing) : base(deserializing) { }
    46 
    47     protected OneMaxProblem(OneMaxProblem original, Cloner cloner) : base(original, cloner) { }
     43    protected AlternatingBitsProblem(bool deserializing) : base(deserializing) { }
     44    protected AlternatingBitsProblem(AlternatingBitsProblem original, Cloner cloner) : base(original, cloner) { }
    4845    public override IDeepCloneable Clone(Cloner cloner) {
    49       return new OneMaxProblem(this, cloner);
     46      return new AlternatingBitsProblem(this, cloner);
    5047    }
    5148
    5249    public override double Evaluate(BinaryVector vector, IRandom random) {
    53       return vector.Count(b => b);
    54     }
    55 
    56     protected override void LengthParameter_ValueChanged(object sender, EventArgs e) {
    57       base.LengthParameter_ValueChanged(sender, e);
    58       BestKnownQuality = Length;
     50      var quality = 0.0;
     51      var curr = vector[0];
     52      var lastOk = 0;
     53      for (var i = 1; i < vector.Length; i++) {
     54        if (curr && !vector[i] || !curr && vector[i]) {
     55          lastOk = i;
     56        } else quality += (i - lastOk);
     57        curr = vector[i];
     58      }
     59      return quality;
    5960    }
    6061  }
Note: See TracChangeset for help on using the changeset viewer.