Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/15/13 22:23:36 (11 years ago)
Author:
jhelm
Message:

#1966: Did some major refactoring in Decoder-classes; Added MoveEvaluator classes for different encodings and dimensions; Added new crossover-class for MCV encoding;

File:
1 edited

Legend:

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

    r9473 r9495  
    3838      get { return false; }
    3939    }
    40     public ILookupParameter<MultiComponentVectorMove> MultiComponentVectorMoveParameter {
    41       get { return (ILookupParameter<MultiComponentVectorMove>)Parameters["MultiComponentVectorMove"]; }
     40    public ILookupParameter<IPackingMove> PackingMoveParameter {
     41      get { return (ILookupParameter<IPackingMove>)Parameters["PackingMove"]; }
    4242    }
    4343    public ILookupParameter<MultiComponentVectorEncoding> MultiComponentVectorParameter {
     
    6565    public MultiComponentVectorMoveSoftTabuCriterion()
    6666      : base() {
    67       Parameters.Add(new LookupParameter<MultiComponentVectorMove>("MultiComponentVectorMove", "The move to evaluate."));
     67      Parameters.Add(new LookupParameter<IPackingMove>("PackingMove", "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."));
     
    8080    public override IOperation Apply() {
    8181      ItemList<IItem> tabuList = TabuListParameter.ActualValue;
    82       MultiComponentVectorMove move = MultiComponentVectorMoveParameter.ActualValue;
     82      MultiComponentVectorMove move = PackingMoveParameter.ActualValue as MultiComponentVectorMove;
    8383      MultiComponentVectorEncoding multiComponentVector = MultiComponentVectorParameter.ActualValue;
    8484      int length = multiComponentVector.PackingInformations.Count;
     
    9494    private bool IsMoveTabu(ItemList<IItem> tabuList, MultiComponentVectorMove move, MultiComponentVectorEncoding multiComponentVector, double moveQuality, bool maximization, bool useAspiration) {
    9595      bool isTabu = false;
    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;
    10296      var attributes = tabuList.FindAll(ta => ta.GetType().Equals(move.GetMoveAttributeType()));
    10397
    104       if (sirm != null) {
    105         foreach (IItem tabuMove in attributes) {
    106           SingleItemRotationMoveAttribute sirmAttr = (tabuMove as SingleItemRotationMoveAttribute);
    107           if (sirmAttr != null
    108             && (!useAspiration
    109                 || maximization && moveQuality <= sirmAttr.MoveQuality
    110                 || !maximization && moveQuality >= sirmAttr.MoveQuality)) {
    111             if (sirm.ItemIndex == sirmAttr.ItemIndex && multiComponentVector.PackingInformations[sirm.ItemIndex].Rotated == sirmAttr.ItemRotation)
    112               isTabu = true;
    113           }
    114           if (isTabu) break;
     98      foreach (IItem attr in attributes) {
     99        MultiComponentVectorMoveAttribute mcvAttr = attr as MultiComponentVectorMoveAttribute;
     100        if (mcvAttr != null
     101          && (!useAspiration
     102              || maximization && moveQuality <= mcvAttr.MoveQuality
     103              || !maximization && moveQuality >= mcvAttr.MoveQuality)) {
     104
     105                isTabu = move.BelongsToAttribute(mcvAttr, false);
    115106        }
    116       } else if (sgm != null) {
    117         foreach (IItem tabuMove in attributes) {
    118           SingleGroupingMoveAttribute sgmAttr = (tabuMove as SingleGroupingMoveAttribute);
    119           if (sgmAttr != null
    120             && (!useAspiration
    121                 || maximization && moveQuality <= sgmAttr.MoveQuality
    122                 || !maximization && moveQuality >= sgmAttr.MoveQuality)) {
    123                   if (multiComponentVector.PackingInformations[sgm.Index].ItemIndex == multiComponentVector.PackingInformations[sgmAttr.Index].ItemIndex
    124               && multiComponentVector.PackingInformations[sgm.Index].AssignedBin == sgmAttr.AssignedBin)
    125               isTabu = true;
    126           }
    127           if (isTabu) break;
    128         }
    129       } else if (spm != null) {
    130         foreach (IItem tabuMove in attributes) {
    131           SwapPositionMoveAttribute spmAttr = (tabuMove as SwapPositionMoveAttribute);
    132           if (spmAttr != null
    133             && (!useAspiration
    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               )
    170               isTabu = true;
    171           }
    172           if (isTabu) break;
    173         }
    174       }
    175 
    176 
     107        if (isTabu) break;
     108      }
    177109
    178110      return isTabu;
Note: See TracChangeset for help on using the changeset viewer.