Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/27/17 13:45:50 (7 years ago)
Author:
abeham
Message:

#2706:

  • Added or updated similarity calculators and population similarity analysis for several problems (BinPacking, LAP, Orienteering, Parameter optimization, PTSP, QAP, TF, TSP, VRP)
  • Made TSPSimilarityCalculator obsolete since it's essentially the same as the one in the permutation plugin
  • Made QAPPopulationDiversityAnalyzer obsolete as it is replaced by the newer PopulationSimilarityAnalyzer
  • Removed genotype specific similarity code in QAPPermutationProximityCalculator (again identical to the permutation plugin)
  • Changed QAPSimilarityCalculator to perform phenotype similarity instead of genotype similarity (has not been previously used)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPSimilarityCalculator.cs

    r14185 r15069  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Data;
    2526using HeuristicLab.Encodings.PermutationEncoding;
    2627using HeuristicLab.Optimization.Operators;
     28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2729
    2830namespace HeuristicLab.Problems.QuadraticAssignment {
     
    3436  /// </remarks>
    3537  [Item("QAPSimilarityCalculator", "An operator that performs similarity calculation between two quadratic assignment solutions. The operator calculates the similarity based on the number of edges the two solutions have in common.")]
     38  [StorableClass]
    3639  public sealed class QAPSimilarityCalculator : SingleObjectiveSolutionSimilarityCalculator {
    3740    protected override bool IsCommutative { get { return true; } }
    3841
     42    [Storable]
     43    public DoubleMatrix Weights { get; set; }
     44    [Storable]
     45    public DoubleMatrix Distances { get; set; }
     46
    3947    private QAPSimilarityCalculator(bool deserializing) : base(deserializing) { }
    40     private QAPSimilarityCalculator(QAPSimilarityCalculator original, Cloner cloner) : base(original, cloner) { }
     48    private QAPSimilarityCalculator(QAPSimilarityCalculator original, Cloner cloner)
     49      : base(original, cloner) {
     50      Weights = cloner.Clone(original.Weights);
     51      Distances = cloner.Clone(original.Distances);
     52    }
    4153    public QAPSimilarityCalculator() : base() { }
    4254
     
    4557    }
    4658
    47     public static double CalculateSimilarity(Permutation left, Permutation right) {
     59    public static double CalculateSimilarity(Permutation left, Permutation right, DoubleMatrix weights, DoubleMatrix distances) {
    4860      if (left == null || right == null)
    4961        throw new ArgumentException("Cannot calculate similarity because one of the provided solutions or both are null.");
     
    5264      if (object.ReferenceEquals(left, right)) return 1.0;
    5365
    54       return QAPPermutationProximityCalculator.CalculateGenotypeSimilarity(left, right);
     66      return QAPPermutationProximityCalculator.CalculatePhenotypeSimilarity(left, right, weights, distances);
    5567    }
    5668
     
    5971      var sol2 = rightSolution.Variables[SolutionVariableName].Value as Permutation;
    6072
    61       return CalculateSimilarity(sol1, sol2);
     73      return CalculateSimilarity(sol1, sol2, Weights, Distances);
    6274    }
    6375  }
Note: See TracChangeset for help on using the changeset viewer.