Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/09/10 09:55:31 (14 years ago)
Author:
svonolfe
Message:

Merged relevant changes from the trunk into the branch (cloning,...) (#1177)

Location:
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4
Files:
106 edited

Legend:

Unmodified
Added
Removed
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursAnalyzer.cs

    r4374 r4752  
    178178    private BestAverageWorstVRPToursAnalyzer(bool deserializing) : base() { }
    179179
     180    public override IDeepCloneable Clone(Cloner cloner) {
     181      return new BestAverageWorstVRPToursAnalyzer(this, cloner);
     182    }
     183
     184    private BestAverageWorstVRPToursAnalyzer(BestAverageWorstVRPToursAnalyzer original, Cloner cloner)
     185      : base(original, cloner) {
     186        this.Initialize();
     187    }
     188
    180189    [StorableHook(HookType.AfterDeserialization)]
    181190    private void Initialize() {
     
    184193    }
    185194
    186     public override IDeepCloneable Clone(Cloner cloner) {
    187       BestAverageWorstVRPToursAnalyzer clone = (BestAverageWorstVRPToursAnalyzer)base.Clone(cloner);
    188       clone.Initialize();
    189       return clone;
    190     }
    191 
    192195    void DistanceParameter_DepthChanged(object sender, EventArgs e) {
    193196      BestAverageWorstCalculator.DistanceParameter.Depth = DistanceParameter.Depth;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursCalculator.cs

    r4374 r4752  
    2525using HeuristicLab.Parameters;
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting {
     
    6768      Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageVehiclesUtilized", "The average utilized vehicles value of all solutions."));
    6869      Parameters.Add(new ValueLookupParameter<DoubleValue>("WorstVehiclesUtilized", "The worst utilized vehicles value of all solutions."));
     70    }
     71
     72    [StorableConstructor]
     73    private BestAverageWorstVRPToursCalculator(bool deserializing) : base(deserializing) { }
     74
     75    public override IDeepCloneable Clone(Cloner cloner) {
     76      return new BestAverageWorstVRPToursCalculator(this, cloner);
     77    }
     78
     79    private BestAverageWorstVRPToursCalculator(BestAverageWorstVRPToursCalculator original, Cloner cloner)
     80      : base(original, cloner) {
    6981    }
    7082
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestVRPToursMemorizer.cs

    r4374 r4752  
    2626using HeuristicLab.Parameters;
    2727using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting {
     
    5556    }
    5657
     58    [StorableConstructor]
     59    protected BestVRPToursMemorizer(bool deserializing) : base(deserializing) { }
     60
     61    public override IDeepCloneable Clone(Cloner cloner) {
     62      return new BestVRPToursMemorizer(this, cloner);
     63    }
     64
     65    protected BestVRPToursMemorizer(BestVRPToursMemorizer original, Cloner cloner)
     66      : base(original, cloner) {
     67    }
     68
    5769    public override IOperation Apply() {
    5870      int i = DistanceParameter.ActualValue.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursAnalyzer.cs

    r4376 r4752  
    137137
    138138    public override IDeepCloneable Clone(Cloner cloner) {
    139       BestAverageWorstCapaciatatedVRPToursAnalyzer clone = (BestAverageWorstCapaciatatedVRPToursAnalyzer)base.Clone(cloner);
    140       clone.Initialize();
    141       return clone;
     139      return new BestAverageWorstCapaciatatedVRPToursAnalyzer(this, cloner);
     140    }
     141
     142    private BestAverageWorstCapaciatatedVRPToursAnalyzer(BestAverageWorstCapaciatatedVRPToursAnalyzer original, Cloner cloner)
     143      : base(original, cloner) {
     144        this.Initialize();
    142145    }
    143146
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursCalculator.cs

    r4374 r4752  
    2525using HeuristicLab.Parameters;
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting {
     
    5051      Parameters.Add(new ValueLookupParameter<DoubleValue>("WorstOverload", "The worst overload value of all solutions."));
    5152    }
     53
     54    public override IDeepCloneable Clone(Cloner cloner) {
     55      return new BestAverageWorstCapacitatedVRPToursCalculator(this, cloner);
     56    }
     57
     58    private BestAverageWorstCapacitatedVRPToursCalculator(BestAverageWorstCapacitatedVRPToursCalculator original, Cloner cloner)
     59      : base(original, cloner) {
     60    }
     61
     62    [StorableConstructor]
     63    private BestAverageWorstCapacitatedVRPToursCalculator(bool deserializing) : base(deserializing) { }
    5264
    5365    private void UpdateOverloads() {
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestCapacitatedVRPToursMemorizer.cs

    r4374 r4752  
    2626using HeuristicLab.Parameters;
    2727using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting {
     
    4647    }
    4748
     49    public override IDeepCloneable Clone(Cloner cloner) {
     50      return new BestCapacitatedVRPToursMemorizer(this, cloner);
     51    }
     52
     53    protected BestCapacitatedVRPToursMemorizer(BestCapacitatedVRPToursMemorizer original, Cloner cloner)
     54      : base(original, cloner) {
     55    }
     56
     57    [StorableConstructor]
     58    protected BestCapacitatedVRPToursMemorizer(bool deserializing) : base(deserializing) { }
     59
    4860    public override IOperation Apply() {
    4961      int i = OverloadParameter.ActualValue.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursAnalyzer.cs

    r4374 r4752  
    185185
    186186    public override IDeepCloneable Clone(Cloner cloner) {
    187       BestAverageWorstTimeWindowedVRPToursAnalyzer clone = (BestAverageWorstTimeWindowedVRPToursAnalyzer)base.Clone(cloner);
    188       clone.Initialize();
    189       return clone;
     187      return new BestAverageWorstTimeWindowedVRPToursAnalyzer(this, cloner);
     188    }
     189
     190    private BestAverageWorstTimeWindowedVRPToursAnalyzer(BestAverageWorstTimeWindowedVRPToursAnalyzer original, Cloner cloner)
     191      : base(original, cloner) {
     192       this.Initialize();
    190193    }
    191194
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursCalculator.cs

    r4374 r4752  
    2525using HeuristicLab.Parameters;
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting {
     
    6768      Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageTravelTime", "The average travel time value of all solutions."));
    6869      Parameters.Add(new ValueLookupParameter<DoubleValue>("WorstTravelTime", "The worst travel time value of all solutions."));
     70    }
     71
     72    [StorableConstructor]
     73    private BestAverageWorstTimeWindowedVRPToursCalculator(bool deserializing) : base(deserializing) { }
     74
     75    public override IDeepCloneable Clone(Cloner cloner) {
     76      return new BestAverageWorstTimeWindowedVRPToursCalculator(this, cloner);
     77    }
     78
     79    private BestAverageWorstTimeWindowedVRPToursCalculator(BestAverageWorstTimeWindowedVRPToursCalculator original, Cloner cloner)
     80      : base(original, cloner) {
    6981    }
    7082
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestTimeWindowedVRPToursMemorizer.cs

    r4374 r4752  
    2626using HeuristicLab.Parameters;
    2727using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting {
     
    6970      return base.Apply();
    7071    }
     72
     73    [StorableConstructor]
     74    protected BestTimeWindowedVRPToursMemorizer(bool deserializing) : base(deserializing) { }
     75
     76    public override IDeepCloneable Clone(Cloner cloner) {
     77      return new BestTimeWindowedVRPToursMemorizer(this, cloner);
     78    }
     79
     80    protected BestTimeWindowedVRPToursMemorizer(BestTimeWindowedVRPToursMemorizer original, Cloner cloner)
     81      : base(original, cloner) {
     82    }
    7183  }
    7284}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs

    r4374 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
    3030using HeuristicLab.Problems.VehicleRouting.Variants;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting {
     
    7778    }
    7879
     80    public override IDeepCloneable Clone(Cloner cloner) {
     81      return new BestVRPSolutionAnalyzer(this, cloner);
     82    }
     83
     84    private BestVRPSolutionAnalyzer(BestVRPSolutionAnalyzer original, Cloner cloner)
     85      : base(original, cloner) {
     86    }
     87
    7988    public override IOperation Apply() {
    8089      IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs

    r4454 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
    3030using HeuristicLab.Problems.VehicleRouting.Variants;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting {
     
    7374    }
    7475
     76    public override IDeepCloneable Clone(Cloner cloner) {
     77      return new BestCapacitatedVRPSolutionAnalyzer(this, cloner);
     78    }
     79
     80    private BestCapacitatedVRPSolutionAnalyzer(BestCapacitatedVRPSolutionAnalyzer original, Cloner cloner)
     81      : base(original, cloner) {
     82    }
     83
    7584    public override IOperation Apply() {
    7685      ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs

    r4454 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
    3030using HeuristicLab.Problems.VehicleRouting.Variants;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting {
     
    7778    }
    7879
     80    public override IDeepCloneable Clone(Cloner cloner) {
     81      return new BestTimeWindowedVRPSolutionAnalyzer(this, cloner);
     82    }
     83
     84    private BestTimeWindowedVRPSolutionAnalyzer(BestTimeWindowedVRPSolutionAnalyzer original, Cloner cloner)
     85      : base(original, cloner) {
     86    }
     87
    7988    public override IOperation Apply() {
    8089      ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs

    r4374 r4752  
    9999    }
    100100
     101
    101102    public override IDeepCloneable Clone(Cloner cloner) {
    102       VRPSolution clone = new VRPSolution();
    103       cloner.RegisterClonedObject(this, clone);
    104       clone.problemInstance = (IVRPProblemInstance)cloner.Clone(problemInstance);
    105       clone.solution = (IVRPEncoding)cloner.Clone(solution);
    106       clone.quality = (DoubleValue)cloner.Clone(quality);
    107      
    108       clone.Initialize();
    109       return clone;
     103      return new VRPSolution(this, cloner);
     104    }
     105
     106    private VRPSolution(VRPSolution original, Cloner cloner)
     107      : base(original, cloner) {
     108      this.problemInstance = (IVRPProblemInstance)cloner.Clone(original.problemInstance);
     109      this.solution = (IVRPEncoding)cloner.Clone(original.solution);
     110      this.quality = (DoubleValue)cloner.Clone(original.quality);
     111
     112      this.Initialize();
    110113    }
    111114
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs

    r4383 r4752  
    8181    #endregion
    8282
    83     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    84       AlbaEncoding clone = new AlbaEncoding(
    85         new Permutation(this.PermutationType, new IntArray(this.array)), ProblemInstance);
    86       cloner.RegisterClonedObject(this, clone);
    87       clone.readOnly = readOnly;
    88       return clone;
    89     }
    90 
    9183    public AlbaEncoding(Permutation permutation, IVRPProblemInstance instance)
    9284      : base(permutation, instance) {
     
    9688    private AlbaEncoding(bool serializing)
    9789      : base(serializing) {
     90    }
     91
     92    public override IDeepCloneable Clone(Cloner cloner) {
     93      return new AlbaEncoding(this, cloner);
     94    }
     95
     96    protected AlbaEncoding(AlbaEncoding original, Cloner cloner)
     97      : base(original, cloner) {
    9898    }
    9999
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs

    r4369 r4752  
    2727using HeuristicLab.Problems.VehicleRouting.Interfaces;
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4243      : base() {
    4344    }
     45
     46    protected AlbaCreator(AlbaCreator original, Cloner cloner)
     47      : base(original, cloner) {
     48    }
    4449  }
    4550}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/DefaultRepresentationCreator.cs

    r4365 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings;
    2929using HeuristicLab.Problems.VehicleRouting.Variants;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4041    public DefaultRepresentationCreator() : base() { }
    4142
     43    protected DefaultRepresentationCreator(DefaultRepresentationCreator original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
     46
    4247    public override IOperation Apply() {
    4348      //choose default encoding here
     
    4550
    4651      return base.Apply();
    47     }   
     52    }
    4853  }
    4954}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/PushForwardInsertionCreator.cs

    r4365 r4752  
    2929using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3030using HeuristicLab.Problems.VehicleRouting.Variants;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    7172      Parameters.Add(new ValueParameter<DoubleValue>("Gamma", "The gamma value.", new DoubleValue(0.2)));
    7273      Parameters.Add(new ValueParameter<DoubleValue>("GammaVariance", "The gamma variance.", new DoubleValue(0.14)));
     74    }
     75
     76    public override IDeepCloneable Clone(Cloner cloner) {
     77      return new PushForwardCreator(this, cloner);
     78    }
     79
     80    private PushForwardCreator(PushForwardCreator original, Cloner cloner)
     81      : base(original, cloner) {
    7382    }
    7483
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs

    r4362 r4752  
    2828using HeuristicLab.Parameters;
    2929using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4546      : base() {
    4647      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
     48    }
     49
     50    public override IDeepCloneable Clone(Cloner cloner) {
     51      return new RandomCreator(this, cloner);
     52    }
     53
     54    private RandomCreator(RandomCreator original, Cloner cloner)
     55      : base(original, cloner) {
    4756    }
    4857
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs

    r4376 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Interfaces;
    2929using HeuristicLab.Problems.VehicleRouting.Encodings.General;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4445      : base() {
    4546      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     47    }
     48
     49    protected AlbaCrossover(AlbaCrossover original, Cloner cloner)
     50      : base(original, cloner) {
    4651    }
    4752
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs

    r4365 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4041      : base() {
    4142      Parameters.Add(new ValueLookupParameter<IPermutationCrossover>("InnerCrossover", "The permutation crossover.", new EdgeRecombinationCrossover()));
     43    }
     44
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new AlbaPermutationCrossover(this, cloner);
     47    }
     48
     49    private AlbaPermutationCrossover(AlbaPermutationCrossover original, Cloner cloner)
     50      : base(original, cloner) {
    4251    }
    4352
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs

    r4365 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3536    public AlbaCustomerInsertionManipulator()
    3637      : base() {
     38    }
     39
     40    public override IDeepCloneable Clone(Cloner cloner) {
     41      return new AlbaCustomerInsertionManipulator(this, cloner);
     42    }
     43
     44    private AlbaCustomerInsertionManipulator(AlbaCustomerInsertionManipulator original, Cloner cloner)
     45      : base(original, cloner) {
    3746    }
    3847
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs

    r4365 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3637    public AlbaCustomerInversionManipulator()
    3738      : base() {
     39    }
     40
     41    public override IDeepCloneable Clone(Cloner cloner) {
     42      return new AlbaCustomerInversionManipulator(this, cloner);
     43    }
     44
     45    private AlbaCustomerInversionManipulator(AlbaCustomerInversionManipulator original, Cloner cloner)
     46      : base(original, cloner) {
    3847    }
    3948
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs

    r4365 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3536    public AlbaCustomerSwapManipulator()
    3637      : base() {
     38    }
     39
     40    public override IDeepCloneable Clone(Cloner cloner) {
     41      return new AlbaCustomerSwapManipulator(this, cloner);
     42    }
     43
     44    private AlbaCustomerSwapManipulator(AlbaCustomerSwapManipulator original, Cloner cloner)
     45      : base(original, cloner) {
    3746    }
    3847
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs

    r4365 r4752  
    2727using System;
    2828using System.Collections.Generic;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3839      : base() {
    3940     }
     41
     42    public override IDeepCloneable Clone(Cloner cloner) {
     43      return new AlbaIntraRouteInversionManipulator(this, cloner);
     44    }
     45
     46    private AlbaIntraRouteInversionManipulator(AlbaIntraRouteInversionManipulator original, Cloner cloner)
     47      : base(original, cloner) {
     48    }
    4049
    4150    public static void Apply(AlbaEncoding individual, int index1, int index2) {
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs

    r4365 r4752  
    2727using System;
    2828using System.Collections.Generic;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4344        Parameters.Add(new ValueParameter<IntValue>("Lambda", "The lambda value.", new IntValue(1)));
    4445     }
     46
     47    public override IDeepCloneable Clone(Cloner cloner) {
     48      return new AlbaLambdaInterchangeManipulator(this, cloner);
     49    }
     50
     51    private AlbaLambdaInterchangeManipulator(AlbaLambdaInterchangeManipulator original, Cloner cloner)
     52      : base(original, cloner) {
     53    }
    4554
    4655    public static void Apply(AlbaEncoding individual, int tour1Index, int position1, int length1,
     
    100109    protected override void Manipulate(IRandom rand, AlbaEncoding individual) {
    101110      List<Tour> tours = individual.GetTours();
    102       int lambda = LambdaParameter.Value.Value;
     111      if (tours.Count > 1) {
     112        int lambda = LambdaParameter.Value.Value;
    103113
    104       int route1Index = rand.Next(tours.Count);
    105       Tour route1 = tours[route1Index];
     114        int route1Index = rand.Next(tours.Count);
     115        Tour route1 = tours[route1Index];
    106116
    107       int route2Index = rand.Next(tours.Count - 1);
    108       if (route2Index >= route1Index)
    109         route2Index += 1;
    110       Tour route2 = tours[route2Index];
    111117
    112       int length1 = rand.Next(Math.Min(lambda + 1, route1.Stops.Count + 1));
    113       int index1 = rand.Next(route1.Stops.Count - length1 + 1);
     118        int route2Index = rand.Next(tours.Count - 1);
     119        if (route2Index >= route1Index)
     120          route2Index += 1;
     121        Tour route2 = tours[route2Index];
    114122
    115       int l2Min = 0;
    116       if (length1 == 0)
    117         l2Min = 1;
    118       int length2 = rand.Next(l2Min, Math.Min(lambda + 1, route2.Stops.Count + 1));
    119       int index2 = rand.Next(route2.Stops.Count - length2 + 1);
     123        int length1 = rand.Next(Math.Min(lambda + 1, route1.Stops.Count + 1));
     124        int index1 = rand.Next(route1.Stops.Count - length1 + 1);
    120125
    121       Apply(individual, route1Index, index1, length1,
    122         route2Index, index2, length2);
     126        int l2Min = 0;
     127        if (length1 == 0)
     128          l2Min = 1;
     129        int length2 = rand.Next(l2Min, Math.Min(lambda + 1, route2.Stops.Count + 1));
     130        int index2 = rand.Next(route2.Stops.Count - length2 + 1);
     131
     132        Apply(individual, route1Index, index1, length1,
     133          route2Index, index2, length2);
     134      }
    123135    }
    124136  }
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs

    r4376 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Interfaces;
    2929using HeuristicLab.Problems.VehicleRouting.Encodings.General;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4344      : base() {
    4445        Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     46    }
     47
     48    protected AlbaManipulator(AlbaManipulator original, Cloner cloner)
     49      : base(original, cloner) {
    4550    }
    4651
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs

    r4365 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4243    }
    4344
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new AlbaPermutationManipualtor(this, cloner);
     47    }
     48
     49    private AlbaPermutationManipualtor(AlbaPermutationManipualtor original, Cloner cloner)
     50      : base(original, cloner) {
     51    }
     52
    4453    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
    4554      InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveEvaluator.cs

    r4369 r4752  
    2727using HeuristicLab.Core;
    2828using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3839      : base() {
    3940    }
     41
     42       protected AlbaMoveEvaluator(AlbaMoveEvaluator original, Cloner cloner)
     43         : base(original, cloner) {
     44       }
    4045  }
    4146}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs

    r4376 r4752  
    2828using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4041    }
    4142
     43    protected AlbaMoveGenerator(AlbaMoveGenerator original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
     46
    4247    public override IOperation Apply() {
    4348      IVRPEncoding solution = VRPToursParameter.ActualValue;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs

    r4378 r4752  
    2828using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3940      : base() {
    4041    }
     42
     43    protected AlbaMoveMaker(AlbaMoveMaker original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
    4146  }
    4247}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs

    r4370 r4752  
    2828using System.Collections.Generic;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3839    public AlbaExhaustiveIntraRouteInversionGenerator()
    3940      : base() {
     41    }
     42
     43    public override IDeepCloneable Clone(Cloner cloner) {
     44      return new AlbaExhaustiveIntraRouteInversionGenerator(this, cloner);
     45    }
     46
     47    private AlbaExhaustiveIntraRouteInversionGenerator(AlbaExhaustiveIntraRouteInversionGenerator original, Cloner cloner)
     48      : base(original, cloner) {
    4049    }
    4150
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs

    r4383 r4752  
    2626using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
    2727using HeuristicLab.Data;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting {
     
    4748    }
    4849
     50    public override IDeepCloneable Clone(Cloner cloner) {
     51      return new AlbaIntraRouteInversionMoveEvaluator(this, cloner);
     52    }
     53
     54    private AlbaIntraRouteInversionMoveEvaluator(AlbaIntraRouteInversionMoveEvaluator original, Cloner cloner)
     55      : base(original, cloner) {
     56    }
     57
    4958    protected override void EvaluateMove() {
    5059      AlbaEncoding newSolution = IntraRouteInversionMoveParameter.ActualValue.Permutation.Clone() as AlbaEncoding;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs

    r4383 r4752  
    4646     }
    4747
    48     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    49       AlbaIntraRouteInversionMove clone = new AlbaIntraRouteInversionMove(
    50         Index1, Index2);
     48    public override IDeepCloneable Clone(Cloner cloner) {
     49      return new AlbaIntraRouteInversionMove(this, cloner);
     50    }
    5151
    52       if (Permutation != null)
    53         clone.Permutation = Permutation.Clone() as AlbaEncoding;
    54 
    55       cloner.RegisterClonedObject(this, clone);
    56       return clone;
     52    protected AlbaIntraRouteInversionMove(AlbaIntraRouteInversionMove original, Cloner cloner)
     53      : base(original, cloner) {
     54        if (Permutation != null)
     55          this.Permutation = cloner.Clone(original.Permutation);
    5756    }
    5857
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs

    r4370 r4752  
    2828using System.Collections.Generic;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5455    }
    5556
     57    protected AlbaIntraRouteInversionMoveGenerator(AlbaIntraRouteInversionMoveGenerator original, Cloner cloner)
     58      : base(original, cloner) {
     59    }
     60
    5661    protected abstract AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance);
    5762
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs

    r4383 r4752  
    2626using HeuristicLab.Parameters;
    2727using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    4748    }
    4849
     50    public override IDeepCloneable Clone(Cloner cloner) {
     51      return new AlbaIntraRouteInversionMoveMaker(this, cloner);
     52    }
     53
     54    protected AlbaIntraRouteInversionMoveMaker(AlbaIntraRouteInversionMoveMaker original, Cloner cloner)
     55      : base(original, cloner) {
     56    }
     57
    4958    public static void Apply(AlbaEncoding solution, AlbaIntraRouteInversionMove move) {
    5059      AlbaIntraRouteInversionManipulator.Apply(solution, move.Index1, move.Index2);
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs

    r4370 r4752  
    2929using HeuristicLab.Data;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5152    }
    5253
     54    public override IDeepCloneable Clone(Cloner cloner) {
     55      return new AlbaStochasticIntraRouteInversionMultiMoveGenerator(this, cloner);
     56    }
     57
     58    private AlbaStochasticIntraRouteInversionMultiMoveGenerator(AlbaStochasticIntraRouteInversionMultiMoveGenerator original, Cloner cloner)
     59      : base(original, cloner) {
     60    }
     61
    5362    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance) {
    5463      int sampleSize = SampleSizeParameter.ActualValue.Value;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs

    r4370 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5354      : base() {
    5455        Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
     56    }
     57
     58    public override IDeepCloneable Clone(Cloner cloner) {
     59      return new AlbaStochasticIntraRouteInversionSingleMoveGenerator(this, cloner);
     60    }
     61
     62    private AlbaStochasticIntraRouteInversionSingleMoveGenerator(AlbaStochasticIntraRouteInversionSingleMoveGenerator original, Cloner cloner)
     63      : base(original, cloner) {
    5564    }
    5665
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs

    r4370 r4752  
    2828using System.Collections.Generic;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    3839    public AlbaExhaustiveLambdaInterchangeMoveGenerator()
    3940      : base() {
     41    }
     42
     43    public override IDeepCloneable Clone(Cloner cloner) {
     44      return new AlbaExhaustiveLambdaInterchangeMoveGenerator(this, cloner);
     45    }
     46
     47    private AlbaExhaustiveLambdaInterchangeMoveGenerator(AlbaExhaustiveLambdaInterchangeMoveGenerator original, Cloner cloner)
     48      : base(original, cloner) {
    4049    }
    4150
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs

    r4383 r4752  
    7979    }
    8080
    81     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    82       AlbaLambdaInterchangeMove clone = new AlbaLambdaInterchangeMove();
    83 
    84       clone.Tour1 = Tour1;
    85       clone.Position1 = Position1;
    86       clone.Length1 = Length1;
    87 
    88       clone.Tour2 = Tour2;
    89       clone.Position2 = Position2;
    90       clone.Length2 = Length2;
    91 
    92       if (Individual != null)
    93         clone.Individual = Individual.Clone() as AlbaEncoding;
    94 
    95       cloner.RegisterClonedObject(this, clone);
    96       return clone;
     81    public override IDeepCloneable Clone(Cloner cloner) {
     82      return new AlbaLambdaInterchangeMove(this, cloner);
    9783    }
    9884
     85    protected AlbaLambdaInterchangeMove(AlbaLambdaInterchangeMove original, Cloner cloner)
     86      : base(original, cloner) {
     87      this.Tour1 = original.Tour1;
     88      this.Position1 = original.Position1;
     89      this.Length1 = original.Length1;
    9990
     91      this.Tour2 = original.Tour2;
     92      this.Position2 = original.Position2;
     93      this.Length2 = original.Length2;
     94
     95      this.Individual = cloner.Clone(Individual) as AlbaEncoding;
     96    }
    10097
    10198    #region IVRPMove Members
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs

    r4383 r4752  
    2626using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
    2727using HeuristicLab.Data;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting {
     
    4748    }
    4849
     50    public override IDeepCloneable Clone(Cloner cloner) {
     51      return new AlbaLambdaInterchangeMoveEvaluator(this, cloner);
     52    }
     53
     54    private AlbaLambdaInterchangeMoveEvaluator(AlbaLambdaInterchangeMoveEvaluator original, Cloner cloner)
     55      : base(original, cloner) {
     56    }
     57
    4958    protected override void EvaluateMove() {
    5059      AlbaEncoding newSolution = LambdaInterchangeMoveParameter.ActualValue.Individual.Clone() as AlbaEncoding;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs

    r4370 r4752  
    2929using HeuristicLab.Data;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    6465    }
    6566
     67    protected AlbaLambdaInterchangeMoveGenerator(AlbaLambdaInterchangeMoveGenerator original, Cloner cloner)
     68      : base(original, cloner) {
     69    }
     70
    6671    protected abstract AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda);
    6772
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs

    r4383 r4752  
    2727using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2828using System.Collections.Generic;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5152    }
    5253
     54    public override IDeepCloneable Clone(Cloner cloner) {
     55      return new AlbaLambdaInterchangeMoveMaker(this, cloner);
     56    }
     57
     58    protected AlbaLambdaInterchangeMoveMaker(AlbaLambdaInterchangeMoveMaker original, Cloner cloner)
     59      : base(original, cloner) {
     60    }
     61
    5362    public static void Apply(AlbaEncoding solution, AlbaLambdaInterchangeMove move) {
    5463      AlbaLambdaInterchangeManipulator.Apply(
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs

    r4370 r4752  
    2929using HeuristicLab.Data;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5152    }
    5253
     54    public override IDeepCloneable Clone(Cloner cloner) {
     55      return new AlbaStochasticLambdaInterchangeMultiMoveGenerator(this, cloner);
     56    }
     57
     58    private AlbaStochasticLambdaInterchangeMultiMoveGenerator(AlbaStochasticLambdaInterchangeMultiMoveGenerator original, Cloner cloner)
     59      : base(original, cloner) {
     60    }
     61
    5362    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda) {
    5463      int sampleSize = SampleSizeParameter.ActualValue.Value;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs

    r4370 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5354      : base() {
    5455        Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
     56    }
     57
     58    public override IDeepCloneable Clone(Cloner cloner) {
     59      return new AlbaStochasticLambdaInterchangeSingleMoveGenerator(this, cloner);
     60    }
     61
     62    private AlbaStochasticLambdaInterchangeSingleMoveGenerator(AlbaStochasticLambdaInterchangeSingleMoveGenerator original, Cloner cloner)
     63      : base(original, cloner) {
    5564    }
    5665
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs

    r4383 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
    3030using HeuristicLab.Problems.VehicleRouting.Encodings.General;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    6364    }
    6465
     66    public override IDeepCloneable Clone(Cloner cloner) {
     67      return new AlbaStochasticTranslocationSingleMoveGenerator(this, cloner);
     68    }
     69
     70    private AlbaStochasticTranslocationSingleMoveGenerator(AlbaStochasticTranslocationSingleMoveGenerator original, Cloner cloner)
     71      : base(original, cloner) {
     72    }
     73
    6574    public override IOperation Apply() {
    6675      IOperation next = base.Apply();
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs

    r4383 r4752  
    4343    }
    4444
    45     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    46       AlbaTranslocationMove clone = new AlbaTranslocationMove(
    47         Index1, Index2, Index3);
    48       if (Permutation != null)
    49         clone.Permutation = Permutation.Clone() as AlbaEncoding;
     45    [StorableConstructor]
     46    protected AlbaTranslocationMove(bool deserializing) : base(deserializing) { }
    5047
    51       cloner.RegisterClonedObject(this, clone);
    52       return clone;
     48    public override IDeepCloneable Clone(Cloner cloner) {
     49      return new AlbaTranslocationMove(this, cloner);
     50    }
     51
     52    protected AlbaTranslocationMove(AlbaTranslocationMove original, Cloner cloner)
     53      : base(original, cloner) {
     54        this.Index1 = original.Index1;
     55        this.Index2 = original.Index2;
     56        this.Index3 = original.Index3;
     57
     58        this.Permutation = cloner.Clone(Permutation) as AlbaEncoding;
    5359    }
    5460
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs

    r4383 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting {
     
    4748    }
    4849
     50    public override IDeepCloneable Clone(Cloner cloner) {
     51      return new AlbaTranslocationMoveEvaluator(this, cloner);
     52    }
     53
     54    private AlbaTranslocationMoveEvaluator(AlbaTranslocationMoveEvaluator original, Cloner cloner)
     55      : base(original, cloner) {
     56    }
     57
    4958    protected override void EvaluateMove() {
    5059      TranslocationMove move = TranslocationMoveParameter.ActualValue;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs

    r4370 r4752  
    2828using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    8586    }
    8687
     88    public override IDeepCloneable Clone(Cloner cloner) {
     89      return new AlbaTranslocationMoveGenerator(this, cloner);
     90    }
     91
     92    private AlbaTranslocationMoveGenerator(AlbaTranslocationMoveGenerator original, Cloner cloner)
     93      : base(original, cloner) {
     94    }
     95
    8796    public override IOperation Apply() {
    8897      IOperation next = base.Apply();
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs

    r4370 r4752  
    2727using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2828using HeuristicLab.Problems.VehicleRouting.Interfaces;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    7071    }
    7172
     73    public override IDeepCloneable Clone(Cloner cloner) {
     74      return new AlbaTranslocationMoveHardTabuCriterion(this, cloner);
     75    }
     76
     77    private AlbaTranslocationMoveHardTabuCriterion(AlbaTranslocationMoveHardTabuCriterion original, Cloner cloner)
     78      : base(original, cloner) {
     79    }
     80
    7281    public override IOperation Apply() {
    7382      IOperation next = base.Apply();
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs

    r4383 r4752  
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2727using HeuristicLab.Problems.VehicleRouting.Interfaces;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    5354    }
    5455
     56    public override IDeepCloneable Clone(Cloner cloner) {
     57      return new AlbaTranslocationMoveMaker(this, cloner);
     58    }
     59
     60    private AlbaTranslocationMoveMaker(AlbaTranslocationMoveMaker original, Cloner cloner)
     61      : base(original, cloner) {
     62    }
     63
    5564    protected override void PerformMove() {
    5665      IVariable moveVariable = this.ExecutionContext.Scope.Variables[
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs

    r4370 r4752  
    2727using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2828using HeuristicLab.Problems.VehicleRouting.Interfaces;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    7071    }
    7172
     73    public override IDeepCloneable Clone(Cloner cloner) {
     74      return new AlbaTranslocationMoveSoftTabuCriterion(this, cloner);
     75    }
     76
     77    private AlbaTranslocationMoveSoftTabuCriterion(AlbaTranslocationMoveSoftTabuCriterion original, Cloner cloner)
     78      : base(original, cloner) {
     79    }
     80
    7281    public override IOperation Apply() {
    7382      IOperation next = base.Apply();
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs

    r4370 r4752  
    2727using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2828using HeuristicLab.Problems.VehicleRouting.Interfaces;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
     
    7071    }
    7172
     73    public override IDeepCloneable Clone(Cloner cloner) {
     74      return new AlbaTranslocationMoveTabuMaker(this, cloner);
     75    }
     76
     77    private AlbaTranslocationMoveTabuMaker(AlbaTranslocationMoveTabuMaker original, Cloner cloner)
     78      : base(original, cloner) {
     79    }
     80
    7281    public override IOperation Apply() {
    7382      IOperation next = base.Apply();
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs

    r4379 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
     
    4344    public GVRCrossover() {
    4445      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     46    }
     47
     48    public override IDeepCloneable Clone(Cloner cloner) {
     49      return new GVRCrossover(this, cloner);
     50    }
     51
     52    private GVRCrossover(GVRCrossover original, Cloner cloner)
     53      : base(original, cloner) {
    4554    }
    4655
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs

    r4379 r4752  
    7979    }
    8080   
    81     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    82       GVREncoding clone = new GVREncoding(ProblemInstance);
    83       cloner.RegisterClonedObject(this, clone);
    84       clone.Tours = (ItemList<Tour>)cloner.Clone(this.Tours);
    85      
    86       return clone;
    87     }
    88 
    8981    public GVREncoding(IVRPProblemInstance problemInstance)
    9082      : base(problemInstance) {
     
    9486    private GVREncoding(bool serializing)
    9587      : base(serializing) {
     88    }
     89
     90    public override IDeepCloneable Clone(Cloner cloner) {
     91      return new GVREncoding(this, cloner);
     92    }
     93
     94    protected GVREncoding(GVREncoding original, Cloner cloner)
     95      : base(original, cloner) {
    9696    }
    9797
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs

    r4379 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
     
    3637    public GVRDisplacementManipulator()
    3738      : base() {
     39    }
     40
     41    public override IDeepCloneable Clone(Cloner cloner) {
     42      return new GVRDisplacementManipulator(this, cloner);
     43    }
     44
     45    private GVRDisplacementManipulator(GVRDisplacementManipulator original, Cloner cloner)
     46      : base(original, cloner) {
    3847    }
    3948
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
     
    3536    public GVRInsertionManipulator()
    3637      : base() {
     38    }
     39
     40    public override IDeepCloneable Clone(Cloner cloner) {
     41      return new GVRInsertionManipulator(this, cloner);
     42    }
     43
     44    private GVRInsertionManipulator(GVRInsertionManipulator original, Cloner cloner)
     45      : base(original, cloner) {
    3746    }
    3847
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
     
    3738    }
    3839
     40    public override IDeepCloneable Clone(Cloner cloner) {
     41      return new GVRInversionManipulator(this, cloner);
     42    }
     43
     44    private GVRInversionManipulator(GVRInversionManipulator original, Cloner cloner)
     45      : base(original, cloner) {
     46    }
     47
    3948    protected override void Manipulate(IRandom random, GVREncoding individual) {
    4049      Tour tour = individual.Tours[random.Next(individual.Tours.Count)];
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs

    r4379 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
     
    4445    }
    4546
     47    protected GVRManipulator(GVRManipulator original, Cloner cloner)
     48      : base(original, cloner) {
     49    }
     50
    4651    protected abstract void Manipulate(IRandom random, GVREncoding individual);
    4752   
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
     
    3536    public GVRSwapManipulator()
    3637      : base() {
     38    }
     39
     40    public override IDeepCloneable Clone(Cloner cloner) {
     41      return new GVRSwapManipulator(this, cloner);
     42    }
     43
     44    private GVRSwapManipulator(GVRSwapManipulator original, Cloner cloner)
     45      : base(original, cloner) {
    3746    }
    3847
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs

    r4365 r4752  
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
    3434using System.Collections.Generic;
     35using HeuristicLab.Common;
    3536
    3637namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    6061
    6162      Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
     63    }
     64
     65    public override IDeepCloneable Clone(Cloner cloner) {
     66      return new MultiVRPSolutionCreator(this, cloner);
     67    }
     68
     69    protected MultiVRPSolutionCreator(MultiVRPSolutionCreator original, Cloner cloner)
     70      : base(original, cloner) {
    6271    }
    6372
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs

    r4369 r4752  
    3030using HeuristicLab.Parameters;
    3131using HeuristicLab.Problems.VehicleRouting.Interfaces;
     32using HeuristicLab.Common;
    3233
    3334namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    4647        Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours to be created."));
    4748    }
     49
     50    protected VRPCreator(VRPCreator original, Cloner cloner)
     51      : base(original, cloner) {
     52    }
    4853  }
    4954}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveEvaluator.cs

    r4370 r4752  
    2626using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2727using HeuristicLab.Problems.VehicleRouting.Variants;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting {
     
    4344    }
    4445
     46    public override IDeepCloneable Clone(Cloner cloner) {
     47      return new MultiVRPMoveEvaluator(this, cloner);
     48    }
     49
     50    private MultiVRPMoveEvaluator(MultiVRPMoveEvaluator original, Cloner cloner)
     51      : base(original, cloner) {
     52    }
     53
    4554    protected override void EvaluateMove() {
    4655      IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs

    r4370 r4752  
    3333using HeuristicLab.Problems.VehicleRouting.Interfaces;
    3434using HeuristicLab.Problems.VehicleRouting.Variants;
     35using HeuristicLab.Common;
    3536
    3637namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    8687      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours."));
    8788      Parameters.Add(new LookupParameter<IVRPMove>("VRPMove", "The generated moves."));
     89    }
     90
     91    public override IDeepCloneable Clone(Cloner cloner) {
     92      return new MultiVRPMoveGenerator(this, cloner);
     93    }
     94
     95    protected MultiVRPMoveGenerator(MultiVRPMoveGenerator original, Cloner cloner)
     96      : base(original, cloner) {
    8897    }
    8998
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs

    r4370 r4752  
    2828using System.Collections.Generic;
    2929using HeuristicLab.Problems.VehicleRouting.Variants;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.General{
     
    4546    }
    4647
     48    public override IDeepCloneable Clone(Cloner cloner) {
     49      return new MultiVRPMoveMaker(this, cloner);
     50    }
     51
     52    protected MultiVRPMoveMaker(MultiVRPMoveMaker original, Cloner cloner)
     53      : base(original, cloner) {
     54    }
     55
    4756    protected override void PerformMove() {
    4857      IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs

    r4369 r4752  
    3030using HeuristicLab.Parameters;
    3131using HeuristicLab.Problems.VehicleRouting.Interfaces;
     32using HeuristicLab.Common;
    3233
    3334namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    5152      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the solution."));
    5253      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
     54    }
     55
     56    protected VRPMoveEvaluator(VRPMoveEvaluator original, Cloner cloner)
     57      : base(original, cloner) {
    5358    }
    5459
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveGenerator.cs

    r4369 r4752  
    3030using HeuristicLab.Parameters;
    3131using HeuristicLab.Problems.VehicleRouting.Interfaces;
     32using HeuristicLab.Common;
    3233
    3334namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    4243      : base() {
    4344    }
     45
     46    protected VRPMoveGenerator(VRPMoveGenerator original, Cloner cloner)
     47      : base(original, cloner) {
     48    }
    4449  }
    4550}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs

    r4370 r4752  
    3030using HeuristicLab.Parameters;
    3131using HeuristicLab.Problems.VehicleRouting.Interfaces;
     32using HeuristicLab.Common;
    3233
    3334namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    4950      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the solution."));
    5051      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
     52    }
     53
     54    protected VRPMoveMaker(VRPMoveMaker original, Cloner cloner)
     55      : base(original, cloner) {
    5156    }
    5257
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs

    r4370 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Interfaces;
    2929using HeuristicLab.Parameters;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
     
    4546      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
    4647    }
     48
     49    protected VRPMoveOperator(VRPMoveOperator original, Cloner cloner)
     50      : base(original, cloner) {
     51    }
    4752  }
    4853}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs

    r4365 r4752  
    4040    protected IVRPProblemInstance ProblemInstance { get; set; }
    4141
    42     public override IDeepCloneable Clone(Cloner cloner) {
    43       PermutationEncoding clone = (PermutationEncoding)base.Clone(cloner);
    44 
    45       clone.ProblemInstance = (IVRPProblemInstance)cloner.Clone(ProblemInstance);
    46 
    47       return clone;
     42    protected PermutationEncoding(PermutationEncoding original, Cloner cloner)
     43      : base(original, cloner) {
     44        this.ProblemInstance = (IVRPProblemInstance)cloner.Clone(original.ProblemInstance);
     45        this.readOnly = original.readOnly;
    4846    }
    4947
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs

    r4376 r4752  
    8282    }
    8383
     84    protected TourEncoding(TourEncoding original, Cloner cloner)
     85      : base(original, cloner) {
     86       this.Tours = (ItemList<Tour>)cloner.Clone(original.Tours);
     87       this.ProblemInstance = (IVRPProblemInstance)cloner.Clone(original.ProblemInstance);
     88    }
     89
    8490    public static void ConvertFrom(IVRPEncoding encoding, TourEncoding solution, IVRPProblemInstance problemInstance) {
    8591      solution.Tours = new ItemList<Tour>(encoding.GetTours());
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs

    r4376 r4752  
    2929using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    3030using HeuristicLab.Problems.VehicleRouting.Interfaces;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    4344    public PotvinCrossover() {
    4445      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     46    }
     47
     48    protected PotvinCrossover(PotvinCrossover original, Cloner cloner)
     49      : base(original, cloner) {
    4550    }
    4651
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs

    r4376 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    3536    public PotvinRouteBasedCrossover()
    3637      : base() { }
     38
     39    public override IDeepCloneable Clone(Cloner cloner) {
     40      return new PotvinRouteBasedCrossover(this, cloner);
     41    }
     42
     43    private PotvinRouteBasedCrossover(PotvinRouteBasedCrossover original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
    3746     
    3847    protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs

    r4376 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    3536    public PotvinSequenceBasedCrossover()
    3637      : base() { }
     38
     39    public override IDeepCloneable Clone(Cloner cloner) {
     40      return new PotvinSequenceBasedCrossover(this, cloner);
     41    }
     42
     43    private PotvinSequenceBasedCrossover(PotvinSequenceBasedCrossover original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
    3746       
    3847    protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs

    r4376 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    4041    public PotvinLocalSearchManipulator() : base() {
    4142      Parameters.Add(new ValueParameter<IntValue>("Iterations", "The number of max iterations.", new IntValue(100)));
     43    }
     44
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new PotvinLocalSearchManipulator(this, cloner);
     47    }
     48
     49    private PotvinLocalSearchManipulator(PotvinLocalSearchManipulator original, Cloner cloner)
     50      : base(original, cloner) {
    4251    }
    4352
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs

    r4376 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    4243    public PotvinManipulator() {
    4344      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     45    }
     46
     47    protected PotvinManipulator(PotvinManipulator original, Cloner cloner)
     48      : base(original, cloner) {
    4449    }
    4550
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs

    r4376 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    3536
    3637    public PotvinOneLevelExchangeMainpulator() : base() { }
     38
     39    public override IDeepCloneable Clone(Cloner cloner) {
     40      return new PotvinOneLevelExchangeMainpulator(this, cloner);
     41    }
     42
     43    private PotvinOneLevelExchangeMainpulator(PotvinOneLevelExchangeMainpulator original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
    3746   
    3847    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs

    r4376 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
     
    3536
    3637    public PotvinTwoLevelExchangeManipulator() : base() { }
     38
     39    public override IDeepCloneable Clone(Cloner cloner) {
     40      return new PotvinTwoLevelExchangeManipulator(this, cloner);
     41    }
     42
     43    private PotvinTwoLevelExchangeManipulator(PotvinTwoLevelExchangeManipulator original, Cloner cloner)
     44      : base(original, cloner) {
     45    }
    3746   
    3847    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs

    r4378 r4752  
    3939    public List<int> Unrouted { get; set; }
    4040
    41     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    42       PotvinEncoding clone = new PotvinEncoding(ProblemInstance);
    43       cloner.RegisterClonedObject(this, clone);
    44       clone.Tours = (ItemList<Tour>)cloner.Clone(this.Tours);
    45       clone.Unrouted = new List<int>(Unrouted);
    46       return clone;
    47     }
    48 
    4941    public PotvinEncoding(IVRPProblemInstance instance)
    5042      : base(instance) {
     
    5547    private PotvinEncoding(bool serializing)
    5648      : base(serializing) {
     49    }
     50
     51    public override IDeepCloneable Clone(Cloner cloner) {
     52      return new PotvinEncoding(this, cloner);
     53    }
     54
     55    protected PotvinEncoding(PotvinEncoding original, Cloner cloner)
     56      : base(original, cloner) {
     57        this.Unrouted = new List<int>(original.Unrouted);
    5758    }
    5859
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs

    r4379 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    4445      : base() {
    4546      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     47    }
     48
     49    protected PrinsCrossover(PrinsCrossover original, Cloner cloner)
     50      : base(original, cloner) {
    4651    }
    4752
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    4041      : base() {
    4142      Parameters.Add(new ValueLookupParameter<IPermutationCrossover>("InnerCrossover", "The permutation crossover.", new OrderCrossover()));
     43    }
     44
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new PrinsPermutationCrossover(this, cloner);
     47    }
     48
     49    private PrinsPermutationCrossover(PrinsPermutationCrossover original, Cloner cloner)
     50      : base(original, cloner) {
    4251    }
    4352
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs

    r4379 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    3637    public PrinsExhaustiveLSManipulator()
    3738      : base() {
     39    }
     40
     41    public override IDeepCloneable Clone(Cloner cloner) {
     42      return new PrinsExhaustiveLSManipulator(this, cloner);
     43    }
     44
     45    private PrinsExhaustiveLSManipulator(PrinsExhaustiveLSManipulator original, Cloner cloner)
     46      : base(original, cloner) {
    3847    }
    3948
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs

    r4379 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    4142      : base() {
    4243      Parameters.Add(new ValueParameter<IntValue>("Iterations", "The number of max iterations.", new IntValue(5)));
     44    }
     45
     46    protected PrinsLSManipulator(PrinsLSManipulator original, Cloner cloner)
     47      : base(original, cloner) {
    4348    }
    4449
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs

    r4379 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    4546    }
    4647
     48    protected PrinsManipulator(PrinsManipulator original, Cloner cloner)
     49      : base(original, cloner) {
     50    }
     51
    4752    protected abstract void Manipulate(IRandom random, PrinsEncoding individual);
    4853
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    4243    }
    4344
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new PrinsPermutationManipulator(this, cloner);
     47    }
     48
     49    private PrinsPermutationManipulator(PrinsPermutationManipulator original, Cloner cloner)
     50      : base(original, cloner) {
     51    }
     52
    4453    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
    4554      InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs

    r4379 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
     
    4142      : base() {
    4243        Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The sample size.", new IntValue(200)));
     44    }
     45
     46    public override IDeepCloneable Clone(Cloner cloner) {
     47      return new PrinsStochasticLSManipulator(this, cloner);
     48    }
     49
     50    private PrinsStochasticLSManipulator(PrinsStochasticLSManipulator original, Cloner cloner)
     51      : base(original, cloner) {
    4352    }
    4453
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs

    r4379 r4752  
    132132    }
    133133    #endregion
    134 
    135     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    136       PrinsEncoding clone = new PrinsEncoding(
    137         new Permutation(this.PermutationType, this.array), ProblemInstance);
    138 
    139       cloner.RegisterClonedObject(this, clone);
    140       clone.readOnly = readOnly;
    141       return clone;
    142     }
    143 
    144134    public PrinsEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
    145135      : base(permutation, problemInstance) {
     
    149139    private PrinsEncoding(bool serializing)
    150140      : base(serializing) {
     141    }
     142
     143    public override IDeepCloneable Clone(Cloner cloner) {
     144      return new PrinsEncoding(this, cloner);
     145    }
     146
     147    protected PrinsEncoding(PrinsEncoding original, Cloner cloner)
     148      : base(original, cloner) {
    151149    }
    152150
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs

    r4363 r4752  
    3939
    4040    public override IDeepCloneable Clone(Cloner cloner) {
    41       Tour clone = base.Clone(cloner) as Tour;
    42       clone.Stops = new List<int>(Stops);
     41      return new Tour(this, cloner);
     42    }
    4343
    44       return clone;
     44    protected Tour(Tour original, Cloner cloner)
     45      : base(original, cloner) {
     46        this.Stops = new List<int>(original.Stops);
    4547    }
    4648  }
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPOperator.cs

    r4365 r4752  
    2929using HeuristicLab.Parameters;
    3030using HeuristicLab.Operators;
     31using HeuristicLab.Common;
    3132
    3233namespace HeuristicLab.Problems.VehicleRouting.Encodings {
     
    4950        Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
    5051    }
     52
     53    protected VRPOperator(VRPOperator original, Cloner cloner)
     54      : base(original, cloner) {
     55    }
    5156  }
    5257}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs

    r4379 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    4344      : base() {
    4445      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     46    }
     47
     48    protected ZhuCrossover(ZhuCrossover original, Cloner cloner)
     49      : base(original, cloner) {
    4550    }
    4651
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    3536    public ZhuHeuristicCrossover1()
    3637      : base() {
     38    }
     39
     40    public override IDeepCloneable Clone(Cloner cloner) {
     41      return new ZhuHeuristicCrossover1(this, cloner);
     42    }
     43
     44    private ZhuHeuristicCrossover1(ZhuHeuristicCrossover1 original, Cloner cloner)
     45      : base(original, cloner) {
    3746    }
    3847
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs

    r4379 r4752  
    2626using HeuristicLab.Data;
    2727using System.Collections.Generic;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    3637    public ZhuHeuristicCrossover2()
    3738      : base() {
     39    }
     40
     41    public override IDeepCloneable Clone(Cloner cloner) {
     42      return new ZhuHeuristicCrossover2(this, cloner);
     43    }
     44
     45    private ZhuHeuristicCrossover2(ZhuHeuristicCrossover2 original, Cloner cloner)
     46      : base(original, cloner) {
    3847    }
    3948
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs

    r4379 r4752  
    2626using HeuristicLab.Data;
    2727using HeuristicLab.Problems.VehicleRouting.Variants;
     28using HeuristicLab.Common;
    2829
    2930namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    3637    public ZhuMergeCrossover1()
    3738      : base() {
     39    }
     40
     41    public override IDeepCloneable Clone(Cloner cloner) {
     42      return new ZhuMergeCrossover1(this, cloner);
     43    }
     44
     45    private ZhuMergeCrossover1(ZhuMergeCrossover1 original, Cloner cloner)
     46      : base(original, cloner) {
    3847    }
    3948
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs

    r4379 r4752  
    2727using System.Collections.Generic;
    2828using HeuristicLab.Problems.VehicleRouting.Variants;
     29using HeuristicLab.Common;
    2930
    3031namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    3738    public ZhuMergeCrossover2()
    3839      : base() {
     40    }
     41
     42    public override IDeepCloneable Clone(Cloner cloner) {
     43      return new ZhuMergeCrossover2(this, cloner);
     44    }
     45
     46    private ZhuMergeCrossover2(ZhuMergeCrossover2 original, Cloner cloner)
     47      : base(original, cloner) {
    3948    }
    4049
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    4041      : base() {
    4142      Parameters.Add(new ValueLookupParameter<IPermutationCrossover>("InnerCrossover", "The permutation crossover.", new PartiallyMatchedCrossover()));
     43    }
     44
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new PrinsPermutationCrossover(this, cloner);
     47    }
     48
     49    private PrinsPermutationCrossover(PrinsPermutationCrossover original, Cloner cloner)
     50      : base(original, cloner) {
    4251    }
    4352
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs

    r4379 r4752  
    2828using HeuristicLab.Problems.VehicleRouting.Encodings.General;
    2929using HeuristicLab.Problems.VehicleRouting.Interfaces;
     30using HeuristicLab.Common;
    3031
    3132namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    4546    }
    4647
     48    protected ZhuManipulator(ZhuManipulator original, Cloner cloner)
     49      : base(original, cloner) {
     50    }
     51
    4752    protected abstract void Manipulate(IRandom random, ZhuEncoding individual);
    4853
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs

    r4379 r4752  
    2525using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
     
    4243    }
    4344
     45    public override IDeepCloneable Clone(Cloner cloner) {
     46      return new ZhuPermutationManipulator(this, cloner);
     47    }
     48
     49    private ZhuPermutationManipulator(ZhuPermutationManipulator original, Cloner cloner)
     50      : base(original, cloner) {
     51    }
     52
    4453    protected override void Manipulate(IRandom random, ZhuEncoding individual) {
    4554      InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs

    r4379 r4752  
    9393    #endregion
    9494
    95     public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
    96       ZhuEncoding clone = new ZhuEncoding(
    97         new Permutation(this.PermutationType, this.array), ProblemInstance);
    98 
    99       cloner.RegisterClonedObject(this, clone);
    100       clone.readOnly = readOnly;
    101       return clone;
     95    public ZhuEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
     96      : base(permutation, problemInstance) {
    10297    }
    10398
    104     public ZhuEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
    105       : base(permutation, problemInstance) {
     99    public override IDeepCloneable Clone(Cloner cloner) {
     100      return new ZhuEncoding(this, cloner);
     101    }
     102
     103    protected ZhuEncoding(ZhuEncoding original, Cloner cloner)
     104      : base(original, cloner) {
    106105    }
    107106
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs

    r4520 r4752  
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
    3434using HeuristicLab.Problems.VehicleRouting.Encodings;
     35using HeuristicLab.Common;
    3536
    3637namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    105106      Parameters.Add(new LookupParameter<DoubleValue>("Overload", "The overload."));
    106107    }
     108
     109    public override IDeepCloneable Clone(Cloner cloner) {
     110      return new CVRPEvaluator(this, cloner);
     111    }
     112
     113    protected CVRPEvaluator(CVRPEvaluator original, Cloner cloner)
     114      : base(original, cloner) {
     115    }
    107116  }
    108117}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPProblemInstance.cs

    r4376 r4752  
    3232using HeuristicLab.PluginInfrastructure;
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
     34using HeuristicLab.Common;
    3435
    3536namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    7778      Parameters.Add(new ValueParameter<DoubleValue>("EvalOverloadPenalty", "The overload penalty considered in the evaluation.", new DoubleValue(100)));
    7879    }
     80
     81    public override IDeepCloneable Clone(Cloner cloner) {
     82      return new CVRPProblemInstance(this, cloner);
     83    }
     84
     85    protected CVRPProblemInstance(CVRPProblemInstance original, Cloner cloner)
     86      : base(original, cloner) {
     87    }
    7988  }
    8089}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs

    r4520 r4752  
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
    3434using HeuristicLab.Problems.VehicleRouting.Encodings;
     35using HeuristicLab.Common;
    3536
    3637namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    144145      Parameters.Add(new LookupParameter<DoubleValue>("TravelTime", "The travel time."));
    145146    }
     147
     148    public override IDeepCloneable Clone(Cloner cloner) {
     149      return new CVRPTWEvaluator(this, cloner);
     150    }
     151
     152    protected CVRPTWEvaluator(CVRPTWEvaluator original, Cloner cloner)
     153      : base(original, cloner) {
     154    }
    146155  }
    147156}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWProblemInstance.cs

    r4454 r4752  
    3232using HeuristicLab.PluginInfrastructure;
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
     34using HeuristicLab.Common;
    3435
    3536namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    103104      Parameters.Add(new ValueParameter<DoubleValue>("EvalTardinessPenalty", "The tardiness penalty considered in the evaluation.", new DoubleValue(100)));
    104105    }
     106
     107    public override IDeepCloneable Clone(Cloner cloner) {
     108      return new CVRPTWProblemInstance(this, cloner);
     109    }
     110
     111    protected CVRPTWProblemInstance(CVRPTWProblemInstance original, Cloner cloner)
     112      : base(original, cloner) {
     113    }
    105114  }
    106115}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs

    r4378 r4752  
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
    3434using HeuristicLab.Problems.VehicleRouting.Encodings;
     35using HeuristicLab.Common;
    3536
    3637
     
    7374    public SingleDepotVRPEvaluator() {
    7475    }
     76
     77    public override IDeepCloneable Clone(Cloner cloner) {
     78      return new SingleDepotVRPEvaluator(this, cloner);
     79    }
     80
     81    protected SingleDepotVRPEvaluator(SingleDepotVRPEvaluator original, Cloner cloner)
     82      : base(original, cloner) {
     83    }
    7584  }
    7685}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs

    r4374 r4752  
    3232using HeuristicLab.PluginInfrastructure;
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
     34using HeuristicLab.Common;
    3435
    3536namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    7071    public SingleDepotVRPProblemInstance() {
    7172    }
     73
     74    public override IDeepCloneable Clone(Cloner cloner) {
     75      return new SingleDepotVRPProblemInstance(this, cloner);
     76    }
     77
     78    protected SingleDepotVRPProblemInstance(SingleDepotVRPProblemInstance original, Cloner cloner)
     79      : base(original, cloner) {
     80    }
    7281  }
    7382}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs

    r4520 r4752  
    3333using HeuristicLab.Problems.VehicleRouting.Variants;
    3434using HeuristicLab.Problems.VehicleRouting.Encodings;
     35using HeuristicLab.Common;
    3536
    3637namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    6465      Parameters.Add(new LookupParameter<DoubleValue>("Distance", "The distance."));
    6566      Parameters.Add(new LookupParameter<DoubleValue>("VehiclesUtilized", "The number of vehicles utilized."));
     67    }
     68
     69    protected VRPEvaluator(VRPEvaluator original, Cloner cloner)
     70      : base(original, cloner) {
    6671    }
    6772
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs

    r4380 r4752  
    3131using HeuristicLab.Optimization;
    3232using HeuristicLab.PluginInfrastructure;
     33using HeuristicLab.Common;
    3334
    3435namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
     
    192193      Parameters.Add(new ValueParameter<IVRPEvaluator>("Evaluator", "The operator which should be used to evaluate VRP solutions.", Evaluator));
    193194    }
     195
     196    protected VRPProblemInstance(VRPProblemInstance original, Cloner cloner)
     197      : base(original, cloner) {
     198    }
    194199  }
    195200}
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs

    r4444 r4752  
    122122
    123123    public override IDeepCloneable Clone(Cloner cloner) {
    124       VehicleRoutingProblem clone = (VehicleRoutingProblem)base.Clone(cloner);
    125       clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
    126       clone.AttachEventHandlers();
    127       return clone;
     124      return new VehicleRoutingProblem(this, cloner);
     125    }
     126
     127    private VehicleRoutingProblem(VehicleRoutingProblem original, Cloner cloner)
     128      : base(original, cloner) {
     129      this.operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
     130      this.AttachEventHandlers();
    128131    }
    129132
Note: See TracChangeset for help on using the changeset viewer.