Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/09/13 15:03:41 (11 years ago)
Author:
jhelm
Message:

#1966: Fixed some problems in MCV-move operators; Added parts of potvin-encoding implementation;

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/ThreeWay/MultiComponentVectorMoveSoftTabuCriterion.cs

    r9440 r9473  
    6565    public MultiComponentVectorMoveSoftTabuCriterion()
    6666      : base() {
    67         Parameters.Add(new LookupParameter<MultiComponentVectorMove>("MultiComponentVectorMove", "The move to evaluate."));
     67      Parameters.Add(new LookupParameter<MultiComponentVectorMove>("MultiComponentVectorMove", "The move to evaluate."));
    6868      Parameters.Add(new LookupParameter<MultiComponentVectorEncoding>("MultiComponentVector", "The solution to evaluate."));
    6969      Parameters.Add(new LookupParameter<BoolValue>("MoveTabu", "The variable to store if a move was tabu."));
     
    9494    private bool IsMoveTabu(ItemList<IItem> tabuList, MultiComponentVectorMove move, MultiComponentVectorEncoding multiComponentVector, double moveQuality, bool maximization, bool useAspiration) {
    9595      bool isTabu = false;
    96       SingleItemRotationMove sirm = move as SingleItemRotationMove; 
    97       SingleGroupingMove sgm = move as SingleGroupingMove;   
    98       SwapSequenceMove ssm = move as SwapSequenceMove;
     96
     97      SingleItemRotationMove sirm = move as SingleItemRotationMove;
     98      SingleGroupingMove sgm = move as SingleGroupingMove;
     99      SwapPositionMove spm = move as SwapPositionMove;
     100      ChangePositionMove cpm = move as ChangePositionMove;
     101      MCVTripleMove tm = move as MCVTripleMove;
    99102      var attributes = tabuList.FindAll(ta => ta.GetType().Equals(move.GetMoveAttributeType()));
    100103
     
    106109                || maximization && moveQuality <= sirmAttr.MoveQuality
    107110                || !maximization && moveQuality >= sirmAttr.MoveQuality)) {
    108                   if (sirm.ItemIndex == sirmAttr.ItemIndex && multiComponentVector.PackingInformations[sirm.ItemIndex].Rotated == sirmAttr.ItemRotation)
    109                     isTabu = true;
     111            if (sirm.ItemIndex == sirmAttr.ItemIndex && multiComponentVector.PackingInformations[sirm.ItemIndex].Rotated == sirmAttr.ItemRotation)
     112              isTabu = true;
    110113          }
    111114          if (isTabu) break;
     
    118121                || maximization && moveQuality <= sgmAttr.MoveQuality
    119122                || !maximization && moveQuality >= sgmAttr.MoveQuality)) {
    120                   if (sgm.ItemIndex == sgmAttr.ItemIndex && multiComponentVector.PackingInformations[sgm.ItemIndex].AssignedBin == sgmAttr.AssignedBin)
    121                     isTabu = true;
     123                  if (multiComponentVector.PackingInformations[sgm.Index].ItemIndex == multiComponentVector.PackingInformations[sgmAttr.Index].ItemIndex
     124              && multiComponentVector.PackingInformations[sgm.Index].AssignedBin == sgmAttr.AssignedBin)
     125              isTabu = true;
    122126          }
    123127          if (isTabu) break;
    124128        }
    125       } else if (ssm != null) {
     129      } else if (spm != null) {
    126130        foreach (IItem tabuMove in attributes) {
    127           SwapSequenceMoveAttribute ssmAttr = (tabuMove as SwapSequenceMoveAttribute);
    128           if (ssmAttr != null
     131          SwapPositionMoveAttribute spmAttr = (tabuMove as SwapPositionMoveAttribute);
     132          if (spmAttr != null
    129133            && (!useAspiration
    130                 || maximization && moveQuality <= ssmAttr.MoveQuality
    131                 || !maximization && moveQuality >= ssmAttr.MoveQuality)) {
    132                   if (ssm.Index1 == ssmAttr.Index1
    133                     && ssm.Index2 == ssmAttr.Index2
    134                     && multiComponentVector.PackingInformations[ssm.Index1].ItemIndex == ssmAttr.ItemIndex1
    135                     && multiComponentVector.PackingInformations[ssm.Index2].ItemIndex == ssmAttr.ItemIndex2)
     134                || maximization && moveQuality <= spmAttr.MoveQuality
     135                || !maximization && moveQuality >= spmAttr.MoveQuality)) {
     136            if (spm.Index1 == spmAttr.Index1
     137              && spm.Index2 == spmAttr.Index2
     138              && multiComponentVector.PackingInformations[spm.Index1].ItemIndex == spmAttr.ItemIndex1
     139              && multiComponentVector.PackingInformations[spm.Index2].ItemIndex == spmAttr.ItemIndex2)
     140              isTabu = true;
     141          }
     142          if (isTabu) break;
     143        }
     144      } else if (cpm != null) {
     145        foreach (IItem tabuMove in attributes) {
     146          ChangePositionMoveAttribute cpmAttr = (tabuMove as ChangePositionMoveAttribute);
     147          if (cpmAttr != null
     148            && (!useAspiration
     149                || maximization && moveQuality <= cpmAttr.MoveQuality
     150                || !maximization && moveQuality >= cpmAttr.MoveQuality)) {
     151            if (cpm.Index == cpmAttr.Index
     152        && cpm.TargetIndex == cpmAttr.TargetIndex
     153        && multiComponentVector.PackingInformations[cpm.Index].ItemIndex == cpmAttr.ItemIndex)
     154              isTabu = true;
     155          }
     156          if (isTabu) break;
     157        }
     158      } else if (tm != null) {
     159        foreach (IItem tabuMove in attributes) {
     160          MCVTripleMoveAttribute tmAttr = (tabuMove as MCVTripleMoveAttribute);
     161          if (tmAttr != null
     162            && (!useAspiration
     163                || maximization && moveQuality <= tmAttr.MoveQuality
     164                || !maximization && moveQuality >= tmAttr.MoveQuality)) {
     165            if ((tm.Index == tmAttr.Index && tm.TargetIndex == tmAttr.TargetIndex)
     166                && multiComponentVector.PackingInformations[tm.Index].ItemIndex == tmAttr.ItemIndex
     167                && tm.Rotation == !(tmAttr.RotationAfter.Equals(tmAttr.RotationBefore))
     168                && (tm.Group == tmAttr.GroupAfter && multiComponentVector.PackingInformations[tm.Index].AssignedBin == tmAttr.GroupBefore)
     169              )
    136170              isTabu = true;
    137171          }
     
    140174      }
    141175
    142      
     176
    143177
    144178      return isTabu;
Note: See TracChangeset for help on using the changeset viewer.