Changeset 17253 for branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP/3.3/AnalyticalPTSP.cs
- Timestamp:
- 09/16/19 16:12:21 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP/3.3/AnalyticalPTSP.cs
r17226 r17253 20 20 #endregion 21 21 22 using System;23 22 using System.Linq; 23 using HEAL.Attic; 24 24 using HeuristicLab.Common; 25 25 using HeuristicLab.Core; 26 using HeuristicLab.Data;27 26 using HeuristicLab.Encodings.PermutationEncoding; 28 using HeuristicLab.Optimization;29 using HEAL.Attic;30 27 31 28 namespace HeuristicLab.Problems.PTSP { 32 [Item("Analytical Probabilistic T raveling Salesman Problem (PTSP)", "Represents a probabilistic traveling salesman problem where the expected tour length is calculated exactly.")]29 [Item("Analytical Probabilistic TSP (p-TSP)", "Represents a probabilistic traveling salesman problem where the expected tour length is calculated exactly.")] 33 30 [Creatable(CreatableAttribute.Categories.CombinatorialProblems)] 34 31 [StorableType("509B6AB5-F4DE-4144-A031-43EEBAD02CA6")] 35 public sealed class AnalyticalP robabilisticTravelingSalesmanProblem : ProbabilisticTravelingSalesmanProblem{32 public sealed class AnalyticalPTSP : ProbabilisticTSP { 36 33 37 34 [StorableConstructor] 38 private AnalyticalProbabilisticTravelingSalesmanProblem(StorableConstructorFlag _) : base(_) { } 39 private AnalyticalProbabilisticTravelingSalesmanProblem(AnalyticalProbabilisticTravelingSalesmanProblem original, Cloner cloner) : base(original, cloner) { } 40 public AnalyticalProbabilisticTravelingSalesmanProblem() { 41 Operators.Add(new BestPTSPSolutionAnalyzer()); 42 35 private AnalyticalPTSP(StorableConstructorFlag _) : base(_) { } 36 private AnalyticalPTSP(AnalyticalPTSP original, Cloner cloner) : base(original, cloner) { } 37 public AnalyticalPTSP() { 43 38 Operators.Add(new PTSPAnalyticalInversionMoveEvaluator()); 44 39 Operators.Add(new PTSPAnalyticalInsertionMoveEvaluator()); … … 53 48 Operators.Add(new PTSPAnalyticalTwoPointFiveMoveEvaluator()); 54 49 55 Operators.RemoveAll(x => x is SingleObjectiveMoveGenerator);56 Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);57 Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);58 59 50 Encoding.ConfigureOperators(Operators.OfType<IOperator>()); 60 51 foreach (var twopointfiveMoveOperator in Operators.OfType<ITwoPointFiveMoveOperator>()) { … … 64 55 65 56 public override IDeepCloneable Clone(Cloner cloner) { 66 return new AnalyticalP robabilisticTravelingSalesmanProblem(this, cloner);57 return new AnalyticalPTSP(this, cloner); 67 58 } 68 59 69 60 public override double Evaluate(Permutation tour, IRandom random) { 70 // abeham: Cache in local variable for performance reasons 71 var distanceMatrix = DistanceMatrix; 72 return Evaluate(tour, (a, b) => distanceMatrix[a, b], Probabilities); 61 return Evaluate(tour, ProbabilisticTSPData); 73 62 } 74 63 75 public static double Evaluate(Permutation tour, Func<int, int, double> distance, DoubleArray probabilities) {64 public static double Evaluate(Permutation tour, IProbabilisticTSPData data) { 76 65 // Analytical evaluation 77 66 var firstSum = 0.0; 78 67 for (var i = 0; i < tour.Length - 1; i++) { 79 68 for (var j = i + 1; j < tour.Length; j++) { 80 var prod1 = d istance(tour[i], tour[j]) * probabilities[tour[i]] * probabilities[tour[j]];69 var prod1 = data.GetDistance(tour[i], tour[j]) * data.GetProbability(tour[i]) * data.GetProbability(tour[j]); 81 70 for (var k = i + 1; k < j; k++) { 82 prod1 = prod1 * (1 - probabilities[tour[k]]);71 prod1 *= (1 - data.GetProbability(tour[k])); 83 72 } 84 73 firstSum += prod1; … … 88 77 for (var j = 0; j < tour.Length; j++) { 89 78 for (var i = 0; i < j; i++) { 90 var prod2 = d istance(tour[j], tour[i]) * probabilities[tour[i]] * probabilities[tour[j]];79 var prod2 = data.GetDistance(tour[j], tour[i]) * data.GetProbability(tour[i]) * data.GetProbability(tour[j]); 91 80 for (var k = j + 1; k < tour.Length; k++) { 92 prod2 = prod2 * (1 - probabilities[tour[k]]);81 prod2 *= (1 - data.GetProbability(tour[k])); 93 82 } 94 83 for (var k = 0; k < i; k++) { 95 prod2 = prod2 * (1 - probabilities[tour[k]]);84 prod2 *= (1 - data.GetProbability(tour[k])); 96 85 } 97 86 secondSum += prod2; … … 100 89 return firstSum + secondSum; 101 90 } 102 103 public static double Evaluate(Permutation tour, DistanceMatrix distanceMatrix, DoubleArray probabilities) {104 return Evaluate(tour, (a, b) => distanceMatrix[a, b], probabilities);105 }106 91 } 107 92 }
Note: See TracChangeset
for help on using the changeset viewer.