Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/16/19 16:12:21 (5 years ago)
Author:
abeham
Message:

#2521: worked on refactoring PTSP

File:
1 edited

Legend:

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

    r17226 r17253  
    2020#endregion
    2121
    22 using System;
    2322using System.Linq;
     23using HEAL.Attic;
    2424using HeuristicLab.Common;
    2525using HeuristicLab.Core;
    26 using HeuristicLab.Data;
    2726using HeuristicLab.Encodings.PermutationEncoding;
    28 using HeuristicLab.Optimization;
    29 using HEAL.Attic;
    3027
    3128namespace HeuristicLab.Problems.PTSP {
    32   [Item("Analytical Probabilistic Traveling 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.")]
    3330  [Creatable(CreatableAttribute.Categories.CombinatorialProblems)]
    3431  [StorableType("509B6AB5-F4DE-4144-A031-43EEBAD02CA6")]
    35   public sealed class AnalyticalProbabilisticTravelingSalesmanProblem : ProbabilisticTravelingSalesmanProblem {
     32  public sealed class AnalyticalPTSP : ProbabilisticTSP {
    3633
    3734    [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() {
    4338      Operators.Add(new PTSPAnalyticalInversionMoveEvaluator());
    4439      Operators.Add(new PTSPAnalyticalInsertionMoveEvaluator());
     
    5348      Operators.Add(new PTSPAnalyticalTwoPointFiveMoveEvaluator());
    5449
    55       Operators.RemoveAll(x => x is SingleObjectiveMoveGenerator);
    56       Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);
    57       Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);
    58 
    5950      Encoding.ConfigureOperators(Operators.OfType<IOperator>());
    6051      foreach (var twopointfiveMoveOperator in Operators.OfType<ITwoPointFiveMoveOperator>()) {
     
    6455
    6556    public override IDeepCloneable Clone(Cloner cloner) {
    66       return new AnalyticalProbabilisticTravelingSalesmanProblem(this, cloner);
     57      return new AnalyticalPTSP(this, cloner);
    6758    }
    6859
    6960    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);
    7362    }
    7463
    75     public static double Evaluate(Permutation tour, Func<int, int, double> distance, DoubleArray probabilities) {
     64    public static double Evaluate(Permutation tour, IProbabilisticTSPData data) {
    7665      // Analytical evaluation
    7766      var firstSum = 0.0;
    7867      for (var i = 0; i < tour.Length - 1; i++) {
    7968        for (var j = i + 1; j < tour.Length; j++) {
    80           var prod1 = distance(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]);
    8170          for (var k = i + 1; k < j; k++) {
    82             prod1 = prod1 * (1 - probabilities[tour[k]]);
     71            prod1 *= (1 - data.GetProbability(tour[k]));
    8372          }
    8473          firstSum += prod1;
     
    8877      for (var j = 0; j < tour.Length; j++) {
    8978        for (var i = 0; i < j; i++) {
    90           var prod2 = distance(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]);
    9180          for (var k = j + 1; k < tour.Length; k++) {
    92             prod2 = prod2 * (1 - probabilities[tour[k]]);
     81            prod2 *= (1 - data.GetProbability(tour[k]));
    9382          }
    9483          for (var k = 0; k < i; k++) {
    95             prod2 = prod2 * (1 - probabilities[tour[k]]);
     84            prod2 *= (1 - data.GetProbability(tour[k]));
    9685          }
    9786          secondSum += prod2;
     
    10089      return firstSum + secondSum;
    10190    }
    102 
    103     public static double Evaluate(Permutation tour, DistanceMatrix distanceMatrix, DoubleArray probabilities) {
    104       return Evaluate(tour, (a, b) => distanceMatrix[a, b], probabilities);
    105     }
    10691  }
    10792}
Note: See TracChangeset for help on using the changeset viewer.