Changeset 8086 for branches/ScatterSearch (trunk integration)/HeuristicLab.Problems.VehicleRouting/3.3/SimilarityCalculators/VRPSimilarityCalculator.cs
- Timestamp:
- 06/22/12 11:11:38 (12 years ago)
- Location:
- branches/ScatterSearch (trunk integration)
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ScatterSearch (trunk integration)
- Property svn:ignore
-
old new 20 20 bin 21 21 protoc.exe 22 _ReSharper.HeuristicLab 3.3 Tests
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/ScatterSearch (trunk integration)/HeuristicLab.Problems.VehicleRouting
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Problems.VehicleRouting (added) merged: 7895,7900,7904,7906,7923,7934,7999,8006,8053
- Property svn:mergeinfo changed
-
branches/ScatterSearch (trunk integration)/HeuristicLab.Problems.VehicleRouting/3.3/SimilarityCalculators/VRPSimilarityCalculator.cs
r7815 r8086 26 26 using HeuristicLab.Core; 27 27 using HeuristicLab.Optimization.Operators; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;29 28 using HeuristicLab.Problems.VehicleRouting.Encodings; 30 29 using HeuristicLab.Problems.VehicleRouting.Encodings.Potvin; 31 using HeuristicLab.Data;32 using HeuristicLab.Parameters;33 30 34 31 namespace HeuristicLab.Problems.VehicleRouting { … … 37 34 /// </summary> 38 35 [Item("VRPSimilarityCalculator", "An operator that performs similarity calculation between two vehicle routing solutions.")] 39 [StorableClass]40 36 public sealed class VRPSimilarityCalculator : SimilarityCalculator { 41 public ILookupParameter<DoubleMatrix> DistanceMatrixParameter {42 get {43 if (Parameters.ContainsKey("DistanceMatrix"))44 return (ILookupParameter<DoubleMatrix>)Parameters["DistanceMatrix"];45 else46 return null;47 }48 }49 50 [StorableConstructor]51 37 private VRPSimilarityCalculator(bool deserializing) : base(deserializing) { } 52 38 private VRPSimilarityCalculator(VRPSimilarityCalculator original, Cloner cloner) : base(original, cloner) { } 53 public VRPSimilarityCalculator() : base() { 54 Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 55 } 39 public VRPSimilarityCalculator() : base() { } 56 40 57 public override IDeepCloneable Clone(Cloner cloner) {58 return new VRPSimilarityCalculator(this, cloner);59 }41 public static double CalculateSimilarity(PotvinEncoding left, PotvinEncoding right) { 42 if (left == null || right == null) 43 throw new ArgumentException("Cannot calculate similarity because one of the provided solutions or both are null."); 60 44 61 public static double CalculateSimilarity(PotvinEncoding e1, PotvinEncoding e2) {62 45 // extract edges from first solution 63 46 var edges1 = new List<Tuple<int, int>>(); 64 foreach (Tour tour in e1.Tours) {47 foreach (Tour tour in left.Tours) { 65 48 edges1.Add(new Tuple<int, int>(0, tour.Cities[0])); 66 49 for (int i = 0; i < tour.Cities.Count - 1; i++) … … 71 54 // extract edges from second solution 72 55 var edges2 = new List<Tuple<int, int>>(); 73 foreach (Tour tour in e2.Tours) {56 foreach (Tour tour in right.Tours) { 74 57 edges2.Add(new Tuple<int, int>(0, tour.Cities[0])); 75 58 for (int i = 0; i < tour.Cities.Count - 1; i++) … … 91 74 92 75 protected override double CalculateSimilarity(IScope left, IScope right) { 93 IVRPEncoding e1 = left.Variables[TargetParameter.ActualName].Value as IVRPEncoding; 94 if (!(e1 is PotvinEncoding)) 95 e1 = PotvinEncoding.ConvertFrom(e1 as IVRPEncoding, DistanceMatrixParameter); 76 PotvinEncoding sol1 = left.Variables[Target].Value as PotvinEncoding; 77 PotvinEncoding sol2 = right.Variables[Target].Value as PotvinEncoding; 96 78 97 IVRPEncoding e2 = right.Variables[TargetParameter.ActualName].Value as IVRPEncoding; 98 if (!(e2 is PotvinEncoding)) 99 e2 = PotvinEncoding.ConvertFrom(e2 as IVRPEncoding, DistanceMatrixParameter); 100 101 return CalculateSimilarity(e1 as PotvinEncoding, e2 as PotvinEncoding); 79 return CalculateSimilarity(sol1, sol2); 102 80 } 103 81 }
Note: See TracChangeset
for help on using the changeset viewer.