Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/14/10 03:52:07 (15 years ago)
Author:
abeham
Message:

Updated Tabu search, permutation move operators, real vector move operators, binary vector move operators #840
Added a Tabu Search TSP workbench

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs

    r3339 r3340  
    2929
    3030namespace HeuristicLab.Encodings.BinaryVectorEncoding {
    31   [Item("PreventOneBitflipTabuMoveEvaluator", "Prevents peforming a one bitflip move again.")]
     31  [Item("OneBitflipMoveTabuChecker", "Prevents peforming a one bitflip move again.")]
    3232  [StorableClass]
    33   public class PreventOneBitflipTabuMoveEvaluator : SingleSuccessorOperator, IOneBitflipMoveOperator, ITabuChecker {
     33  public class OneBitflipMoveTabuChecker : SingleSuccessorOperator, IOneBitflipMoveOperator, ITabuChecker {
    3434    public ILookupParameter<OneBitflipMove> OneBitflipMoveParameter {
    3535      get { return (LookupParameter<OneBitflipMove>)Parameters["OneBitflipMove"]; }
     
    4444      get { return (ILookupParameter<BoolValue>)Parameters["MoveTabu"]; }
    4545    }
    46     private ScopeParameter CurrentScopeParameter {
    47       get { return (ScopeParameter)Parameters["CurrentScope"]; }
     46    public IValueLookupParameter<BoolValue> MaximizationParameter {
     47      get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     48    }
     49    public ILookupParameter<DoubleValue> MoveQualityParameter {
     50      get { return (ILookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
     51    }
     52    public ValueParameter<BoolValue> UseAspirationCriterionParameter {
     53      get { return (ValueParameter<BoolValue>)Parameters["UseAspirationCriterion"]; }
    4854    }
    4955
    50     public PreventOneBitflipTabuMoveEvaluator()
     56    public BoolValue UseAspirationCriterion {
     57      get { return UseAspirationCriterionParameter.Value; }
     58      set { UseAspirationCriterionParameter.Value = value; }
     59    }
     60
     61    public OneBitflipMoveTabuChecker()
    5162      : base() {
    5263      Parameters.Add(new LookupParameter<OneBitflipMove>("OneBitflipMove", "The move to evaluate."));
     
    5465      Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The solution as permutation."));
    5566      Parameters.Add(new LookupParameter<ItemList<IItem>>("TabuList", "The tabu list."));
    56       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope."));
     67      Parameters.Add(new ValueParameter<BoolValue>("UseAspirationCriterion", "Whether to use the aspiration criterion or not.", new BoolValue(true)));
     68      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, else if it is a minimization problem."));
     69      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The quality of the current move."));
    5770    }
    5871
     
    6073      ItemList<IItem> tabuList = TabuListParameter.ActualValue;
    6174      OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
     75      double moveQuality = MoveQualityParameter.ActualValue.Value;
     76      bool maximization = MaximizationParameter.ActualValue.Value;
     77      bool useAspiration = UseAspirationCriterion.Value;
    6278      bool isTabu = false;
    6379      foreach (IItem tabuMove in tabuList) {
    64         OneBitflipMove attribute = (tabuMove as OneBitflipMove);
     80        OneBitflipMoveAttribute attribute = (tabuMove as OneBitflipMoveAttribute);
    6581        if (attribute != null) {
    66           if (attribute.Index == move.Index) {
    67             isTabu = true;
    68             break;
     82          if (!useAspiration
     83            || maximization && moveQuality <= attribute.MoveQuality
     84            || !maximization && moveQuality >= attribute.MoveQuality) {
     85            if (attribute.Index == move.Index) {
     86              isTabu = true;
     87              break;
     88            }
    6989          }
    7090        }
Note: See TracChangeset for help on using the changeset viewer.