Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/26/10 00:04:24 (14 years ago)
Author:
abeham
Message:

updated permutation moves, fixed 3-opt #889

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/PreventReaddTwoOptTabuMoveEvaluator.cs

    r3104 r3221  
    2929
    3030namespace HeuristicLab.Encodings.PermutationEncoding {
    31   [Item("PreventReaddTwoOptTabuMoveEvaluator", "Prevents readding of previously deleted edges, but allows deleting previously added edges.")]
     31  [Item("TwoOptPreventEdgeReadding", "Prevents readding of previously deleted edges, but allows deleting previously added edges.")]
    3232  [StorableClass]
    3333  public class PreventReaddTwoOptTabuMoveEvaluator : SingleSuccessorOperator, ITwoOptPermutationMoveOperator, ITabuMoveEvaluator {
     34    public override bool CanChangeName {
     35      get { return false; }
     36    }
    3437    public ILookupParameter<TwoOptMove> TwoOptMoveParameter {
    3538      get { return (LookupParameter<TwoOptMove>)Parameters["TwoOptMove"]; }
     
    6669      int E2S = permutation[move.Index2];
    6770      int E2T = permutation.GetCircular(move.Index2 + 1);
    68       bool isTabu = false;
    69       foreach (IItem tabuMove in tabuList) {
    70         TwoOptTabuMoveAttribute attribute = (tabuMove as TwoOptTabuMoveAttribute);
    71         if (attribute != null) {
    72           // if previously deleted Edge1Source-Target is readded
    73           if (attribute.Edge1Source == E1S && attribute.Edge1Target == E2S || attribute.Edge1Source == E2S && attribute.Edge1Target == E1S
    74             || attribute.Edge1Source == E1T && attribute.Edge1Target == E2T || attribute.Edge1Source == E2T && attribute.Edge1Target == E1T
    75             // if previously deleted Edge2Source-Target is readded
    76             || attribute.Edge2Source == E1T && attribute.Edge2Target == E2T || attribute.Edge2Source == E2T && attribute.Edge2Target == E1T
    77             || attribute.Edge2Source == E1S && attribute.Edge2Target == E2S || attribute.Edge2Source == E2S && attribute.Edge2Target == E1S) {
    78             isTabu = true;
    79             break;
     71      bool isTabu = (move.Index2 - move.Index1 >= length - 2); // doesn't change the solution;
     72      if (!isTabu) {
     73        foreach (IItem tabuMove in tabuList) {
     74          TwoOptTabuMoveAttribute attribute = (tabuMove as TwoOptTabuMoveAttribute);
     75          if (attribute != null) {
     76            // if previously deleted Edge1Source-Target is readded
     77            if (attribute.Edge1Source == E1S && attribute.Edge1Target == E2S || attribute.Edge1Source == E2S && attribute.Edge1Target == E1S
     78              || attribute.Edge1Source == E1T && attribute.Edge1Target == E2T || attribute.Edge1Source == E2T && attribute.Edge1Target == E1T
     79              // if previously deleted Edge2Source-Target is readded
     80              || attribute.Edge2Source == E1T && attribute.Edge2Target == E2T || attribute.Edge2Source == E2T && attribute.Edge2Target == E1T
     81              || attribute.Edge2Source == E1S && attribute.Edge2Target == E2S || attribute.Edge2Source == E2S && attribute.Edge2Target == E1S) {
     82              isTabu = true;
     83              break;
     84            }
    8085          }
    8186        }
     
    8489      return base.Apply();
    8590    }
    86 
    87     public override bool CanChangeName {
    88       get { return false; }
    89     }
    9091  }
    9192}
Note: See TracChangeset for help on using the changeset viewer.