Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/24/12 15:04:37 (12 years ago)
Author:
jkarder
Message:

#1331:

  • applied some of the changes suggested by ascheibe in comment:32:ticket:1331
  • restructured path relinking and improvement operators and similarity calculators
  • fixed bug in TSPMultipleGuidesPathRelinker
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ScatterSearch (trunk integration)/HeuristicLab.Algorithms.ScatterSearch/3.3/ScatterSearch.cs

    r8299 r8319  
    2222using System;
    2323using System.Linq;
    24 using System.Reflection;
    2524using HeuristicLab.Analysis;
    2625using HeuristicLab.Common;
     
    8988      get { return (IValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; }
    9089    }
    91     public ConstrainedValueParameter<ISimilarityCalculator> SimilarityCalculatorParameter {
    92       get { return (ConstrainedValueParameter<ISimilarityCalculator>)Parameters["SimilarityCalculator"]; }
     90    public ConstrainedValueParameter<ISolutionSimilarityCalculator> SimilarityCalculatorParameter {
     91      get { return (ConstrainedValueParameter<ISolutionSimilarityCalculator>)Parameters["SimilarityCalculator"]; }
    9392    }
    9493    #endregion
     
    139138      set { SetSeedRandomlyParameter.Value = value; }
    140139    }
    141     private ISimilarityCalculator SimilarityCalculator {
     140    private ISolutionSimilarityCalculator SimilarityCalculator {
    142141      get { return SimilarityCalculatorParameter.Value; }
    143142      set { SimilarityCalculatorParameter.Value = value; }
     
    185184      Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
    186185      Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
    187       Parameters.Add(new ConstrainedValueParameter<ISimilarityCalculator>("SimilarityCalculator", "The operator used to calculate the similarity between two solutions."));
     186      Parameters.Add(new ConstrainedValueParameter<ISolutionSimilarityCalculator>("SimilarityCalculator", "The operator used to calculate the similarity between two solutions."));
    188187      #endregion
    189188
     
    382381    }
    383382    private void UpdateSimilarityCalculators() {
    384       ISimilarityCalculator oldDiversityCalculator = SimilarityCalculatorParameter.Value;
     383      ISolutionSimilarityCalculator oldSimilarityCalculator = SimilarityCalculatorParameter.Value;
    385384      SimilarityCalculatorParameter.ValidValues.Clear();
    386       ISimilarityCalculator defaultDiversityCalculator = Problem.Operators.OfType<ISimilarityCalculator>().FirstOrDefault();
    387 
    388       foreach (ISimilarityCalculator diversityCalculator in Problem.Operators.OfType<ISimilarityCalculator>())
    389         SimilarityCalculatorParameter.ValidValues.Add(diversityCalculator);
    390 
    391       if (oldDiversityCalculator != null) {
    392         ISimilarityCalculator diversityCalculator = SimilarityCalculatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldDiversityCalculator.GetType());
    393         if (diversityCalculator != null) SimilarityCalculatorParameter.Value = diversityCalculator;
    394         else oldDiversityCalculator = null;
    395       }
    396       if (oldDiversityCalculator == null && defaultDiversityCalculator != null)
    397         SimilarityCalculatorParameter.Value = defaultDiversityCalculator;
     385      ISolutionSimilarityCalculator defaultSimilarityCalculator = Problem.Operators.OfType<ISolutionSimilarityCalculator>().FirstOrDefault();
     386
     387      foreach (ISolutionSimilarityCalculator similarityCalculator in Problem.Operators.OfType<ISolutionSimilarityCalculator>())
     388        SimilarityCalculatorParameter.ValidValues.Add(similarityCalculator);
     389
     390      if (oldSimilarityCalculator != null) {
     391        ISolutionSimilarityCalculator similarityCalculator = SimilarityCalculatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldSimilarityCalculator.GetType());
     392        if (similarityCalculator != null) SimilarityCalculatorParameter.Value = similarityCalculator;
     393        else oldSimilarityCalculator = null;
     394      }
     395      if (oldSimilarityCalculator == null && defaultSimilarityCalculator != null)
     396        SimilarityCalculatorParameter.Value = defaultSimilarityCalculator;
    398397    }
    399398    private void ParameterizeBestSelector() {
     
    410409        MainLoop.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
    411410        MainLoop.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
    412         MainLoop.TargetParameter.ActualName = Improver.TargetParameter.ActualName;
    413         foreach (var op in MainLoop.OperatorGraph.Operators.OfType<IScatterSearchOperator>()) {
    414           // parameter should be accessed direclty (using an interface definition)
    415           PropertyInfo propInfo = op.GetType().GetProperty(MainLoop.TargetParameter.Name + "Parameter");
    416           if (propInfo != null && propInfo.CanRead)
    417             (propInfo.GetValue(op, null) as IValueLookupParameter<IItem>).ActualName = MainLoop.TargetParameter.ActualName;
    418           propInfo = op.GetType().GetProperty(MainLoop.QualityParameter.Name + "Parameter");
    419           if (propInfo != null && propInfo.CanRead)
    420             (propInfo.GetValue(op, null) as IValueLookupParameter<IItem>).ActualName = MainLoop.QualityParameter.ActualName;
    421         }
     411        MainLoop.OperatorGraph.Operators.OfType<PopulationRebuildMethod>().Single().QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
     412        MainLoop.OperatorGraph.Operators.OfType<SolutionPoolUpdateMethod>().Single().QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
    422413        foreach (ISimilarityBasedOperator op in MainLoop.OperatorGraph.Operators.OfType<ISimilarityBasedOperator>())
    423414          op.SimilarityCalculator = SimilarityCalculator;
Note: See TracChangeset for help on using the changeset viewer.