Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/15 12:01:21 (9 years ago)
Author:
apolidur
Message:

#2221: First version of 1-shift and 2-p-opt moves

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PTSP/HeuristicLab.Problems.PTSP/3.3/AnalyticalPTSP.cs

    r12191 r12219  
    3333    public override double Evaluate(Individual individual, IRandom random) {
    3434      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     
    3564      // Analytical evaluation
    3665      double firstSum = 0;
    3766      for (int i = 0; i < p.Length - 1; i++) {
    3867        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;
    4069          for (int k = i + 1; k < j; k++) {
    41             sum1 = sum1 * (1 - ProbabilityMatrix[0, p[k]]);
     70            sum1 = sum1 * (1 - ProbabilityMatrix[p[k]].Value);
    4271          }
     72          A[i, j - 1] = sum1;
    4373          firstSum += sum1;
    4474        }
     
    4777      for (int j = 0; j < p.Length - 1; j++) {
    4878        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;
    5080          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);
    5282          }
    5383          for (int k = 1; k < i; k++) {
    54             sum2 = sum2 * (1 - ProbabilityMatrix[0, p[k]]);
     84            sum2 = sum2 * (1 - ProbabilityMatrix[p[k]].Value);
    5585          }
     86          B[i, j] = sum2;
    5687          secondSum += sum2;
    5788        }
     89      }
     90      foreach (var op in Operators.OfType<PTSPAnalyticalInversionMovePathEvaluator>()) {
     91        op.AParameter.Value = A;
     92        op.BParameter.Value = B;
    5893      }
    5994      return firstSum + secondSum;
     
    6196
    6297    public AnalyticalProbabilisticTravelingSalesmanProblem() {
    63       Operators.Add(new PTSPInversionMovePathEvaluator());
     98      Operators.Add(new PTSPAnalyticalInversionMovePathEvaluator());
    6499    }
    65100
    66101    public override void Load(TSPData data) {
    67102      base.Load(data);
    68       // Compute A and B matrices
     103      foreach (var op in Operators.OfType<PTSPAnalyticalInversionMovePathEvaluator>()) {
     104        op.ProbabilitiesParameter.Value = ProbabilityMatrix;
     105      }
    69106    }
    70107
Note: See TracChangeset for help on using the changeset viewer.