Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/14/10 03:52:07 (14 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.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs

    r3339 r3340  
    2929
    3030namespace HeuristicLab.Encodings.RealVectorEncoding {
    31   [Item("PreventFallBackToSkippedPositions", "Prevents falling back into ranges that have been moved over before.")]
     31  [Item("AdditiveMoveTabuChecker", "Prevents falling back into ranges that have been moved over before.")]
    3232  [StorableClass]
    33   public class PreventFallBackToSkippedPositions : SingleSuccessorOperator, IAdditiveRealVectorMoveOperator, ITabuChecker {
     33  public class AdditiveMoveTabuChecker : SingleSuccessorOperator, IAdditiveRealVectorMoveOperator, ITabuChecker {
    3434    public ILookupParameter<AdditiveMove> AdditiveMoveParameter {
    3535      get { return (LookupParameter<AdditiveMove>)Parameters["AdditiveMove"]; }
     
    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 PreventFallBackToSkippedPositions()
     56    public BoolValue UseAspirationCriterion {
     57      get { return UseAspirationCriterionParameter.Value; }
     58      set { UseAspirationCriterionParameter.Value = value; }
     59    }
     60
     61
     62    public AdditiveMoveTabuChecker()
    5163      : base() {
    5264      Parameters.Add(new LookupParameter<AdditiveMove>("AdditiveMove", "The move to evaluate."));
     
    5466      Parameters.Add(new LookupParameter<RealVector>("RealVector", "The solution as real vector."));
    5567      Parameters.Add(new LookupParameter<ItemList<IItem>>("TabuList", "The tabu list."));
    56       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope."));
     68      Parameters.Add(new ValueParameter<BoolValue>("UseAspirationCriterion", "Whether to use the aspiration criterion or not.", new BoolValue(true)));
     69      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, else if it is a minimization problem."));
     70      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The quality of the current move."));
    5771    }
    5872
     
    6175      AdditiveMove move = AdditiveMoveParameter.ActualValue;
    6276      RealVector vector = RealVectorParameter.ActualValue;
     77      double moveQuality = MoveQualityParameter.ActualValue.Value;
     78      bool maximization = MaximizationParameter.ActualValue.Value;
     79      bool useAspiration = UseAspirationCriterion.Value;
    6380      bool isTabu = false;
    6481      foreach (IItem tabuMove in tabuList) {
    6582        AdditiveMoveTabuAttribute attribute = (tabuMove as AdditiveMoveTabuAttribute);
    6683        if (attribute != null && attribute.Dimension == move.Dimension) {
    67           double newPos = vector[move.Dimension] + move.MoveDistance;
    68           if (Math.Min(attribute.MovedPosition, attribute.OriginalPosition) < newPos
    69             && newPos < Math.Max(attribute.MovedPosition, attribute.OriginalPosition)) {
    70             isTabu = true;
    71             break;
     84          if (!useAspiration
     85            || maximization && moveQuality <= attribute.MoveQuality
     86            || !maximization && moveQuality >= attribute.MoveQuality) {
     87
     88            double newPos = vector[move.Dimension] + move.MoveDistance;
     89            if (Math.Min(attribute.MovedPosition, attribute.OriginalPosition) < newPos
     90              && newPos < Math.Max(attribute.MovedPosition, attribute.OriginalPosition)) {
     91              isTabu = true;
     92              break;
     93            }
    7294          }
    7395        }
Note: See TracChangeset for help on using the changeset viewer.