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

Location:
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves
Files:
1 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuAttribute.cs

    r3192 r3340  
    3333    [Storable]
    3434    public double MovedPosition { get; protected set; }
     35    [Storable]
     36    public double MoveQuality { get; protected set; }
    3537
    3638    [StorableConstructor]
     
    4345      OriginalPosition = 0;
    4446      MovedPosition = 0;
     47      MoveQuality = 0;
    4548    }
    4649
    47     public AdditiveMoveTabuAttribute(int dimension, double originalPosition, double movedPosition)
     50    public AdditiveMoveTabuAttribute(int dimension, double originalPosition, double movedPosition, double moveQuality)
    4851      : base() {
    4952      Dimension = dimension;
    5053      OriginalPosition = originalPosition;
    5154      MovedPosition = movedPosition;
     55      MoveQuality = moveQuality;
    5256    }
    5357
     
    5761      clone.OriginalPosition = OriginalPosition;
    5862      clone.MovedPosition = MovedPosition;
     63      clone.MoveQuality = MoveQuality;
    5964      return clone;
    6065    }
  • 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        }
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuMaker.cs

    r3339 r3340  
    2929
    3030namespace HeuristicLab.Encodings.RealVectorEncoding {
    31   [Item("AdditiveTabuMoveMaker", "Sets the move tabu.")]
     31  [Item("AdditiveMoveTabuMaker", "Sets the move tabu.")]
    3232  [StorableClass]
    33   public class AdditiveTabuMoveMaker : TabuMaker, IAdditiveRealVectorMoveOperator {
     33  public class AdditiveMoveTabuMaker : TabuMaker, IAdditiveRealVectorMoveOperator {
    3434    public ILookupParameter<AdditiveMove> AdditiveMoveParameter {
    3535      get { return (ILookupParameter<AdditiveMove>)Parameters["AdditiveMove"]; }
     
    3939    }
    4040
    41     public AdditiveTabuMoveMaker()
     41    public AdditiveMoveTabuMaker()
    4242      : base() {
    4343      Parameters.Add(new LookupParameter<AdditiveMove>("AdditiveMove", "The move to evaluate."));
     
    4545    }
    4646
    47     protected override IItem GetTabuAttribute() {
     47    protected override IItem GetTabuAttribute(bool maximization, double quality, double moveQuality) {
    4848      AdditiveMove move = AdditiveMoveParameter.ActualValue;
    4949      RealVector vector = RealVectorParameter.ActualValue;
    50       return new AdditiveMoveTabuAttribute(move.Dimension, vector[move.Dimension], vector[move.Dimension] + move.MoveDistance);
     50      double baseQuality = moveQuality;
     51      if (maximization && quality > moveQuality || !maximization && quality < moveQuality) baseQuality = quality;
     52      return new AdditiveMoveTabuAttribute(move.Dimension, vector[move.Dimension], vector[move.Dimension] + move.MoveDistance, baseQuality);
    5153    }
    5254   
Note: See TracChangeset for help on using the changeset viewer.