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 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveTabuMaker.cs

    r3232 r3340  
    4848    }
    4949
    50     protected override IItem GetTabuAttribute() {
     50    protected override IItem GetTabuAttribute(bool maximization, double quality, double moveQuality) {
    5151      TranslocationMove move = TranslocationMoveParameter.ActualValue;
    5252      Permutation permutation = PermutationParameter.ActualValue;
    53       if (move.Index3 > move.Index1)
    54         return new TranslocationMoveAttribute(permutation.GetCircular(move.Index1 - 1),
    55         permutation[move.Index1],
    56         permutation[move.Index2],
    57         permutation.GetCircular(move.Index2 + 1),
    58         permutation.GetCircular(move.Index3 + move.Index2 - move.Index1),
    59         permutation.GetCircular(move.Index3 + move.Index2 - move.Index1 + 1));
    60       else
    61         return new TranslocationMoveAttribute(permutation.GetCircular(move.Index1 - 1),
    62         permutation[move.Index1],
    63         permutation[move.Index2],
    64         permutation.GetCircular(move.Index2 + 1),
    65         permutation.GetCircular(move.Index3 - 1),
    66         permutation.GetCircular(move.Index3));
     53      double baseQuality = moveQuality;
     54      if (maximization && quality > moveQuality || !maximization && quality < moveQuality) baseQuality = quality; // we make an uphill move, the lower bound is the solution quality
     55      if (permutation.PermutationType == PermutationTypes.Absolute) {
     56        int[] numbers = new int[move.Index2 - move.Index1 + 1];
     57        for (int i = 0; i < numbers.Length; i++) {
     58          numbers[i] = permutation[i + move.Index1];
     59        }
     60        return new TranslocationMoveAbsoluteAttribute(numbers, move.Index1, move.Index3, baseQuality); ;
     61      } else {
     62        if (move.Index3 > move.Index1)
     63          return new TranslocationMoveRelativeAttribute(permutation.GetCircular(move.Index1 - 1),
     64          permutation[move.Index1],
     65          permutation[move.Index2],
     66          permutation.GetCircular(move.Index2 + 1),
     67          permutation.GetCircular(move.Index3 + move.Index2 - move.Index1),
     68          permutation.GetCircular(move.Index3 + move.Index2 - move.Index1 + 1),
     69          baseQuality);
     70        else
     71          return new TranslocationMoveRelativeAttribute(permutation.GetCircular(move.Index1 - 1),
     72          permutation[move.Index1],
     73          permutation[move.Index2],
     74          permutation.GetCircular(move.Index2 + 1),
     75          permutation.GetCircular(move.Index3 - 1),
     76          permutation.GetCircular(move.Index3),
     77          baseQuality);
     78      }
    6779    }
    6880  }
Note: See TracChangeset for help on using the changeset viewer.