- Timestamp:
- 03/18/15 12:01:21 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PTSP/HeuristicLab.Problems.PTSP/3.3/AnalyticalPTSP.cs
r12191 r12219 33 33 public override double Evaluate(Individual individual, IRandom random) { 34 34 Permutation p = individual.Permutation(); 35 // Compute A and B matrices 36 DoubleMatrix A = new DoubleMatrix(p.Length, p.Length - 1); 37 DoubleMatrix B = new DoubleMatrix(p.Length, p.Length - 1); 38 //for (int i = 0; i < p.Length; i++) { 39 // for (int k = 0; k < p.Length - 1; k++) { 40 // double firstPartial = 0; 41 // for (int r = k; k < p.Length - 1; r++) { 42 // double sum0 = DistanceMatrix[p[i],p[i+r]]* ProbabilityMatrix[0, p[i]] * ProbabilityMatrix[0, p[i+r]]; 43 // for(int s = i+1; s < i+r; s++) { 44 // sum0 = sum0 * (1 - ProbabilityMatrix[0, p[s]]); 45 // } 46 // firstPartial+=sum0; 47 // } 48 // double secondPartial = 0; 49 // for (int r = k; k < p.Length - 1; r++) { 50 // double sum1 = DistanceMatrix[p[i-r],p[i]]* ProbabilityMatrix[0, p[i-r]] * ProbabilityMatrix[0, p[i]]; 51 // for (int s = i + 1; s < p.Length-1; s++) { 52 // sum1 = sum1 * (1 - ProbabilityMatrix[0, p[s]]); 53 // } 54 // for (int t = 1; t < i-1; t++) { 55 // sum1 = sum1 * (1 - ProbabilityMatrix[0, p[t]]); 56 // } 57 // secondPartial+=sum1; 58 // } 59 // A[i, k] = firstPartial; 60 // B[i, k] = secondPartial; 61 // } 62 //} 63 35 64 // Analytical evaluation 36 65 double firstSum = 0; 37 66 for (int i = 0; i < p.Length - 1; i++) { 38 67 for (int j = i + 1; j < p.Length - 1; j++) { 39 double sum1 = DistanceMatrix[p[i], p[j]] * ProbabilityMatrix[ 0, p[i]] * ProbabilityMatrix[0, p[j]];68 double sum1 = DistanceMatrix[p[i], p[j]] * ProbabilityMatrix[p[i]].Value * ProbabilityMatrix[p[j]].Value; 40 69 for (int k = i + 1; k < j; k++) { 41 sum1 = sum1 * (1 - ProbabilityMatrix[ 0, p[k]]);70 sum1 = sum1 * (1 - ProbabilityMatrix[p[k]].Value); 42 71 } 72 A[i, j - 1] = sum1; 43 73 firstSum += sum1; 44 74 } … … 47 77 for (int j = 0; j < p.Length - 1; j++) { 48 78 for (int i = 0; i < j; i++) { 49 double sum2 = DistanceMatrix[p[j], p[i]] * ProbabilityMatrix[ 0, p[i]] * ProbabilityMatrix[0, p[j]];79 double sum2 = DistanceMatrix[p[j], p[i]] * ProbabilityMatrix[p[i]].Value * ProbabilityMatrix[p[j]].Value; 50 80 for (int k = j + 1; k < p.Length - 1; k++) { 51 sum2 = sum2 * (1 - ProbabilityMatrix[ 0, p[k]]);81 sum2 = sum2 * (1 - ProbabilityMatrix[p[k]].Value); 52 82 } 53 83 for (int k = 1; k < i; k++) { 54 sum2 = sum2 * (1 - ProbabilityMatrix[ 0, p[k]]);84 sum2 = sum2 * (1 - ProbabilityMatrix[p[k]].Value); 55 85 } 86 B[i, j] = sum2; 56 87 secondSum += sum2; 57 88 } 89 } 90 foreach (var op in Operators.OfType<PTSPAnalyticalInversionMovePathEvaluator>()) { 91 op.AParameter.Value = A; 92 op.BParameter.Value = B; 58 93 } 59 94 return firstSum + secondSum; … … 61 96 62 97 public AnalyticalProbabilisticTravelingSalesmanProblem() { 63 Operators.Add(new PTSP InversionMovePathEvaluator());98 Operators.Add(new PTSPAnalyticalInversionMovePathEvaluator()); 64 99 } 65 100 66 101 public override void Load(TSPData data) { 67 102 base.Load(data); 68 // Compute A and B matrices 103 foreach (var op in Operators.OfType<PTSPAnalyticalInversionMovePathEvaluator>()) { 104 op.ProbabilitiesParameter.Value = ProbabilityMatrix; 105 } 69 106 } 70 107
Note: See TracChangeset
for help on using the changeset viewer.