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/Moves/MCVTripleMove.cs

    r9473 r9495  
    2424using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector;
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     26using HeuristicLab.Problems.BinPacking.Interfaces;
    2627
    2728namespace HeuristicLab.Encodings.PackingEncoding.MultiComponentVector {
    2829  [Item("MCVTripleMove", "A move on a multi component vector that is specified by a rotation-value, two indexes and a groupNr.")]
    2930  [StorableClass]
    30   public class MCVTripleMove : MultiComponentVectorMove {
     31  public class MCVTripleMove : MultiComponentVectorMove {   
    3132    [Storable]
    32     public int Index { get; protected set; }
     33    public int OldGroup { get; protected set; }
     34    [Storable]
     35    public int NewGroup { get; protected set; }
     36    [Storable]
     37    public int Index { get; protected set; }   
     38    [Storable]
     39    public int TargetIndex { get; protected set; }
    3340    [Storable]
    3441    public bool Rotation { get; protected set; }
    35     [Storable]
    36     public int Group { get; protected set; }
    37     [Storable]
    38     public int TargetIndex { get; protected set; }
    3942
    4043    [StorableConstructor]
    4144    protected MCVTripleMove(bool deserializing) : base(deserializing) { }
    4245    protected MCVTripleMove(MCVTripleMove original, Cloner cloner)
    43       : base(original, cloner) {
    44       this.Index = original.Index;
     46      : base(original, cloner) {     
     47      this.OldGroup = original.OldGroup;
     48      this.NewGroup = original.NewGroup;
     49      this.Index = original.Index;       
     50      this.TargetIndex = original.TargetIndex;
    4551      this.Rotation = original.Rotation;
    46       this.Group = original.Group;
    47       this.TargetIndex = original.TargetIndex;
    4852    }
    49     public MCVTripleMove(int index, bool rotation, int group, int targetIndex, MultiComponentVectorEncoding multiComponentVector)
    50       : base(multiComponentVector) {
    51         Index = index;
     53    public MCVTripleMove(int oldGroup, int newGroup, int index, int targetIndex, bool rotation, MultiComponentVectorEncoding multiComponentVector)
     54      : base(multiComponentVector) {
     55        OldGroup = oldGroup;
     56        NewGroup = newGroup;
     57        Index = index;       
     58        TargetIndex = targetIndex;
    5259        Rotation = rotation;
    53         Group = group;
    54         TargetIndex = targetIndex;
    5560    }
    5661
     
    5964    }
    6065
    61     public override MultiComponentVectorEncoding GetVectorAfterMove() {
    62       var result = MultiComponentVector;
     66    public override IPackingSolutionEncoding GetSolutionAfterMove() {
     67      var result = MultiComponentVector.Clone(new Cloner()) as MultiComponentVectorEncoding;
    6368      if (Rotation)
    64         result = SingleItemRotationMove.GetVectorAfterMove(MultiComponentVector, Index);
    65       if (!MultiComponentVector.PackingInformations[Index].AssignedBin.Equals(Group))
    66         result = SingleGroupingMove.GetVectorAfterMove(result, Index, Group);
    67       if (!Index.Equals(TargetIndex))
    68         result = ChangePositionMove.GetVectorAfterMove(result, Index, TargetIndex);
     69        result = SingleItemRotationMove.GetVectorAfterMove(result, OldGroup, Index);
     70      if (!OldGroup.Equals(NewGroup)) {
     71        result = SingleGroupingMove.GetVectorAfterMove(result, OldGroup, Index, NewGroup);
     72        int newIndex = result.PackingInformations[NewGroup].Count - 1;
     73        if (!newIndex.Equals(TargetIndex))
     74          result = ChangePositionMove.GetVectorAfterMove(result, NewGroup, newIndex, TargetIndex);
     75      } else if (!Index.Equals(TargetIndex))
     76          result = ChangePositionMove.GetVectorAfterMove(result, NewGroup, Index, TargetIndex);
    6977      return result;
    7078    }
     
    7583
    7684    public override string ToString() {
    77       return "TM(i=" + Index + ",r=" + Rotation + ",g=" + Group + ",ti=" + TargetIndex + ")";
     85      return "TM(og=" + OldGroup + ",ng=" + NewGroup + ",i=" + Index + ",ti=" + TargetIndex + ",r=" + Rotation + ")";
     86    }
     87
     88
     89    public override MultiComponentVectorMoveAttribute GetAttribute(double quality) {
     90      return new MCVTripleMoveAttribute(Index, TargetIndex, MultiComponentVector.PackingInformations[OldGroup][Index].ItemID,
     91        Rotation, OldGroup, NewGroup, quality);
     92    }
     93
     94    public override bool BelongsToAttribute(MultiComponentVectorMoveAttribute attribute, bool hardCriterion) {
     95      MCVTripleMoveAttribute actualAttribute = attribute as MCVTripleMoveAttribute;
     96      if (actualAttribute != null) {
     97        if (hardCriterion) {
     98          if ((Index == actualAttribute.Index && TargetIndex == actualAttribute.TargetIndex)
     99                  || MultiComponentVector.PackingInformations[OldGroup][Index].ItemID == actualAttribute.ItemID
     100                  || (OldGroup == actualAttribute.GroupBefore && NewGroup == actualAttribute.GroupAfter))
     101            return true;
     102        } else {
     103          if ((Index == actualAttribute.Index && TargetIndex == actualAttribute.TargetIndex)
     104                  && MultiComponentVector.PackingInformations[OldGroup][Index].ItemID == actualAttribute.ItemID
     105                  && Rotation == actualAttribute.Rotation
     106                  && (OldGroup == actualAttribute.GroupBefore && NewGroup == actualAttribute.GroupAfter))
     107            return true;
     108        }
     109      }
     110      return false;
    78111    }
    79112  }
Note: See TracChangeset for help on using the changeset viewer.