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/ChangePositionMove.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 {
     
    2930  [StorableClass]
    3031  public class ChangePositionMove : MultiComponentVectorMove {
     32    [Storable]
     33    public int AffectedGroup { get; protected set; }
    3134    [Storable]
    3235    public int Index { get; protected set; }
     
    3841    protected ChangePositionMove(ChangePositionMove original, Cloner cloner)
    3942      : base(original, cloner) {
     43      this.AffectedGroup = original.AffectedGroup;
    4044      this.Index = original.Index;
    4145      this.TargetIndex = original.TargetIndex;
    4246    }
    43     public ChangePositionMove(int index, int targetIndex, MultiComponentVectorEncoding multiComponentVector)
     47    public ChangePositionMove(int affectedBin, int index, int targetIndex, MultiComponentVectorEncoding multiComponentVector)
    4448      : base(multiComponentVector) {
     49        AffectedGroup = affectedBin;
    4550        Index = index;
    4651        TargetIndex = targetIndex;
     
    5156    }
    5257
    53     public override MultiComponentVectorEncoding GetVectorAfterMove() {
    54       return GetVectorAfterMove(MultiComponentVector, Index, TargetIndex);
     58    public override IPackingSolutionEncoding GetSolutionAfterMove() {
     59      return GetVectorAfterMove(MultiComponentVector, AffectedGroup, Index, TargetIndex);
    5560    }
    56     public static MultiComponentVectorEncoding GetVectorAfterMove(MultiComponentVectorEncoding multiComponentVector, int index, int targetIndex) {
     61    public static MultiComponentVectorEncoding GetVectorAfterMove(MultiComponentVectorEncoding multiComponentVector, int affectedBin, int index, int targetIndex) {
    5762      var result = multiComponentVector.Clone(new Cloner()) as MultiComponentVectorEncoding;
    58       var aux = result.PackingInformations[index];
    59       result.PackingInformations.RemoveAt(index);
    60       result.PackingInformations.Insert(targetIndex, aux);
     63      var aux = result.PackingInformations[affectedBin][index];
     64      result.PackingInformations[affectedBin].Remove(aux);
     65      result.PackingInformations[affectedBin].Insert(targetIndex, aux);
    6166      return result;
    6267    }
     
    6772
    6873    public override string ToString() {
    69       return "PM(i=" + Index + ",ti=" + TargetIndex + ")";
     74      return "PM(g=" + AffectedGroup  + ",i=" + Index + ",ti=" + TargetIndex + ")";
     75    }
     76
     77    public override MultiComponentVectorMoveAttribute GetAttribute(double quality) {
     78      return new ChangePositionMoveAttribute(AffectedGroup, Index,
     79        MultiComponentVector.PackingInformations[AffectedGroup][Index].ItemID,
     80        TargetIndex, quality);
     81    }
     82
     83    public override bool BelongsToAttribute(MultiComponentVectorMoveAttribute attribute, bool hardCriterion) {
     84      ChangePositionMoveAttribute actualAttribute = attribute as ChangePositionMoveAttribute;
     85      if (actualAttribute != null) {
     86        if (hardCriterion) {
     87          if (Index == actualAttribute.Index
     88          || TargetIndex == actualAttribute.TargetIndex
     89          || MultiComponentVector.PackingInformations[AffectedGroup][Index].ItemID == actualAttribute.ItemID)
     90            return true;
     91        } else {
     92          if (Index == actualAttribute.Index
     93          && TargetIndex == actualAttribute.TargetIndex
     94          && MultiComponentVector.PackingInformations[AffectedGroup][Index].ItemID == actualAttribute.ItemID)
     95            return true;
     96        }
     97      }
     98
     99      return false;
    70100    }
    71101  }
Note: See TracChangeset for help on using the changeset viewer.