Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/15/11 23:11:41 (14 years ago)
Author:
abeham
Message:

#1541

  • Added PermutationView that allows to change the permutation type
  • Updated AFA and PopDiv Analyzer
  • Simplified QAP name to just the instance when loading from embedded resource
Location:
branches/QAPAlgorithms/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/QAPAlgorithms/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/QAPAlleleFrequencyAnalyzer.cs

    r6342 r6416  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using HeuristicLab.Analysis;
    2324using HeuristicLab.Common;
     
    5657
    5758    protected override Allele[] CalculateAlleles(Permutation solution) {
    58       Allele[] alleles = new Allele[solution.Length];
     59      Allele[] alleles = new Allele[solution.Length * solution.Length];
     60      Dictionary<string, int> allelesDict = new Dictionary<string, int>();
    5961      DoubleMatrix weights = WeightsParameter.ActualValue;
    6062      DoubleMatrix distances = DistancesParameter.ActualValue;
    61       int source, target;
    6263      double impact;
    6364
    64       for (int i = 0; i < solution.Length; i++) {
    65         source = i;
    66         target = solution[i];
    67         impact = 0;
    68         for (int j = 0; j < solution.Length; j++)
    69           impact += weights[source, j] * distances[target, solution[j]];
    70         alleles[i] = new Allele(source.ToString() + "->" + target.ToString(), impact);
     65      for (int x = 0; x < solution.Length; x++) {
     66        for (int y = 0; y < solution.Length; y++) {
     67          string allele = weights[x, y].ToString() + ">" + distances[solution[x], solution[y]].ToString();
     68          int repetition = 1;
     69          if (allelesDict.ContainsKey(allele)) repetition += allelesDict[allele];
     70          allelesDict[allele] = repetition;
     71          impact = weights[x, y] * distances[solution[x], solution[y]];
     72          alleles[x * solution.Length + y] = new Allele(allele + "/" + repetition, impact);
     73        }
    7174      }
    7275
  • branches/QAPAlgorithms/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/QAPPopulationDiversityAnalyzer.cs

    r6342 r6416  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Data;
    2526using HeuristicLab.Encodings.PermutationEncoding;
     27using HeuristicLab.Parameters;
    2628using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2729
     
    3335  [StorableClass]
    3436  public sealed class QAPPopulationDiversityAnalyzer : PopulationDiversityAnalyzer<Permutation> {
     37    public IValueParameter<BoolValue> UsePhenotypeSimilarityParameter {
     38      get { return (IValueParameter<BoolValue>)Parameters["UsePhenotypeSimilarity"]; }
     39    }
     40    public ILookupParameter<DoubleMatrix> WeightsParameter {
     41      get { return (ILookupParameter<DoubleMatrix>)Parameters["Weights"]; }
     42    }
     43    public ILookupParameter<DoubleMatrix> DistancesParameter {
     44      get { return (ILookupParameter<DoubleMatrix>)Parameters["Distances"]; }
     45    }
     46
    3547    [StorableConstructor]
    3648    private QAPPopulationDiversityAnalyzer(bool deserializing) : base(deserializing) { }
    3749    private QAPPopulationDiversityAnalyzer(QAPPopulationDiversityAnalyzer original, Cloner cloner) : base(original, cloner) { }
    38     public QAPPopulationDiversityAnalyzer() : base() { }
     50    public QAPPopulationDiversityAnalyzer()
     51      : base() {
     52      Parameters.Add(new ValueParameter<BoolValue>("UsePhenotypeSimilarity", "True if the similarity should be measured a level closer to the phenotype (the number of similar assignments of individual weights to distances). Set to false if the number of equal assignments (facility to location) should be counted.", new BoolValue(false)));
     53      Parameters.Add(new LookupParameter<DoubleMatrix>("Weights", "The weights matrix."));
     54      Parameters.Add(new LookupParameter<DoubleMatrix>("Distances", "The distances matrix."));
     55    }
    3956
    4057    public override IDeepCloneable Clone(Cloner cloner) {
     
    4259    }
    4360
     61    [StorableHook(HookType.AfterDeserialization)]
     62    private void AfterDeserialization() {
     63      // BackwardsCompatibility3.3
     64      #region Backwards compatible code, remove with 3.4
     65      if (!Parameters.ContainsKey("UsePhenotypeSimilarity"))
     66        Parameters.Add(new ValueParameter<BoolValue>("UsePhenotypeSimilarity", "True if the similarity should be measured a level closer to the phenotype (the number of similar assignments of individual weights to distances). Set to false if the number of equal assignments (facility to location) should be counted.", new BoolValue(false)));
     67      if (!Parameters.ContainsKey("Weights"))
     68        Parameters.Add(new LookupParameter<DoubleMatrix>("Weights", "The weights matrix."));
     69      if (!Parameters.ContainsKey("Distances"))
     70        Parameters.Add(new LookupParameter<DoubleMatrix>("Distances", "The distances matrix."));
     71      #endregion
     72    }
     73
    4474    protected override double[,] CalculateSimilarities(Permutation[] solutions) {
     75      DoubleMatrix weights = WeightsParameter.ActualValue, distances = DistancesParameter.ActualValue;
     76      bool phenotypeSimilarity = UsePhenotypeSimilarityParameter.Value.Value;
    4577      int count = solutions.Length;
    4678      double[,] similarities = new double[count, count];
     
    4981        similarities[i, i] = 1;
    5082        for (int j = i + 1; j < count; j++) {
    51           similarities[i, j] = CalculateSimilarity(solutions[i], solutions[j]);
     83          if (phenotypeSimilarity)
     84            similarities[i, j] = QAPPermutationProximityCalculator.CalculatePhenotypeSimilarity(solutions[i], solutions[j], weights, distances);
     85          else similarities[i, j] = QAPPermutationProximityCalculator.CalculateGenotypeSimilarity(solutions[i], solutions[j]);
    5286          similarities[j, i] = similarities[i, j];
    5387        }
     
    5589      return similarities;
    5690    }
    57 
    58     private double CalculateSimilarity(Permutation assignment1, Permutation assignment2) {
    59       int identicalAssignments = 0;
    60       for (int i = 0; i < assignment1.Length; i++) {
    61         if (assignment1[i] == assignment2[i])
    62           identicalAssignments++;
    63       }
    64       return ((double)identicalAssignments) / assignment1.Length;
    65     }
    6691  }
    6792}
Note: See TracChangeset for help on using the changeset viewer.