Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/05/10 14:52:19 (14 years ago)
Author:
abeham
Message:

#999

  • changes in LS
    • counting evaluated moves
    • tracking best quality which is needed by the algorithm
  • changes in TS
    • adapted to analyzer
    • added a neighborhood analyzer that shows what percentage of the neighborhood is tabu
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs

    r3616 r3636  
    3333using HeuristicLab.PluginInfrastructure;
    3434using HeuristicLab.Random;
     35using HeuristicLab.Analysis;
    3536
    3637namespace HeuristicLab.Algorithms.TabuSearch {
     
    8081      get { return (ValueParameter<IntValue>)Parameters["SampleSize"]; }
    8182    }
     83    private ValueParameter<MultiAnalyzer<IPopulationAnalyzer>> MoveAnalyzerParameter {
     84      get { return (ValueParameter<MultiAnalyzer<IPopulationAnalyzer>>)Parameters["MoveAnalyzer"]; }
     85    }
     86    private ValueParameter<MultiAnalyzer<ISolutionAnalyzer>> AnalyzerParameter {
     87      get { return (ValueParameter<MultiAnalyzer<ISolutionAnalyzer>>)Parameters["Analyzer"]; }
     88    }
    8289    #endregion
    8390
     
    119126      set { MaximumIterationsParameter.Value = value; }
    120127    }
     128    public MultiAnalyzer<IPopulationAnalyzer> MoveAnalyzer {
     129      get { return MoveAnalyzerParameter.Value; }
     130      set { MoveAnalyzerParameter.Value = value; }
     131    }
     132    public MultiAnalyzer<ISolutionAnalyzer> Analyzer {
     133      get { return AnalyzerParameter.Value; }
     134      set { AnalyzerParameter.Value = value; }
     135    }
    121136    private RandomCreator RandomCreator {
    122137      get { return (RandomCreator)OperatorGraph.InitialOperator; }
     
    128143      get { return (TabuSearchMainLoop)SolutionsCreator.Successor; }
    129144    }
     145    private PopulationBestAverageWorstQualityAnalyzer moveQualityAnalyzer;
     146    private TabuNeighborhoodAnalyzer tabuNeighborhoodAnalyzer;
    130147    #endregion
    131148
     
    142159      Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000)));
    143160      Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The neighborhood size for stochastic sampling move generators", new IntValue(100)));
    144 
     161      Parameters.Add(new ValueParameter<MultiAnalyzer<IPopulationAnalyzer>>("MoveAnalyzer", "The operator used to analyze the moves.", new MultiAnalyzer<IPopulationAnalyzer>()));
     162      Parameters.Add(new ValueParameter<MultiAnalyzer<ISolutionAnalyzer>>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer<ISolutionAnalyzer>()));
     163     
    145164      RandomCreator randomCreator = new RandomCreator();
    146165      SolutionsCreator solutionsCreator = new SolutionsCreator();
     
    166185      tsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
    167186      tsMainLoop.ResultsParameter.ActualName = "Results";
     187      tsMainLoop.MoveAnalyzerParameter.ActualName = MoveAnalyzerParameter.Name;
     188      tsMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
    168189
    169190      Initialize();
     
    199220      UpdateMoveGenerator();
    200221      UpdateMoveParameters();
     222      UpdateAnalyzers();
    201223      ParameterizeMoveGenerators();
    202224      ParameterizeMoveEvaluator();
     
    204226      ParameterizeTabuMaker();
    205227      ParameterizeTabuChecker();
     228      ParameterizeAnalyzers();
    206229      Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    207230      base.OnProblemChanged();
     
    220243      ParameterizeTabuMaker();
    221244      ParameterizeTabuChecker();
     245      ParameterizeAnalyzers();
    222246      Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    223247      base.Problem_EvaluatorChanged(sender, e);
     
    237261      UpdateMoveGenerator();
    238262      UpdateMoveParameters();
     263      UpdateAnalyzers();
    239264      ParameterizeMainLoop();
    240265      ParameterizeMoveGenerators();
     
    243268      ParameterizeTabuMaker();
    244269      ParameterizeTabuChecker();
     270      ParameterizeAnalyzers();
    245271      base.Problem_OperatorsChanged(sender, e);
    246272    }
     
    261287      ParameterizeTabuMaker();
    262288      ParameterizeTabuChecker();
     289      ParameterizeAnalyzers();
    263290    }
    264291    private void MoveEvaluator_MoveQualityParameter_ActualNameChanged(object sender, EventArgs e) {
     
    268295      ParameterizeTabuMaker();
    269296      ParameterizeTabuChecker();
     297      ParameterizeAnalyzers();
    270298    }
    271299    private void TabuCheckerParameter_ValueChanged(object sender, EventArgs e) {
    272300      ParameterizeMainLoop();
     301      ParameterizeAnalyzers();
    273302    }
    274303    private void TabuChecker_MoveTabuParameter_ActualNameChanged(object sender, EventArgs e) {
    275304      ParameterizeMainLoop();
     305      ParameterizeAnalyzers();
    276306    }
    277307    private void SampleSizeParameter_NameChanged(object sender, EventArgs e) {
     
    283313    [StorableHook(HookType.AfterDeserialization)]
    284314    private void Initialize() {
     315      InitializeAnalyzers();
     316      UpdateAnalyzers();
    285317      if (Problem != null) {
    286318        Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
     
    293325      TabuCheckerParameter.ValueChanged += new EventHandler(TabuCheckerParameter_ValueChanged);
    294326      SampleSizeParameter.NameChanged += new EventHandler(SampleSizeParameter_NameChanged);
     327    }
     328    private void InitializeAnalyzers() {
     329      moveQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     330      tabuNeighborhoodAnalyzer = new TabuNeighborhoodAnalyzer();
     331      ParameterizeAnalyzers();
    295332    }
    296333    private void UpdateMoveGenerator() {
     
    349386      }
    350387    }
     388    private void UpdateAnalyzers() {
     389      Analyzer.Operators.Clear();
     390      MoveAnalyzer.Operators.Clear();
     391      MoveAnalyzer.Operators.Add(moveQualityAnalyzer);
     392      MoveAnalyzer.Operators.Add(tabuNeighborhoodAnalyzer);
     393      if (Problem != null) {
     394        foreach (ISolutionAnalyzer analyzer in Problem.Operators.OfType<ISolutionAnalyzer>().OrderBy(x => x.Name))
     395          Analyzer.Operators.Add(analyzer);
     396      }
     397    }
    351398    private void ClearMoveParameters() {
    352399      MoveMakerParameter.ValidValues.Clear();
     
    405452      }
    406453    }
     454    private void ParameterizeAnalyzers() {
     455      moveQualityAnalyzer.ResultsParameter.ActualName = "Results";
     456      tabuNeighborhoodAnalyzer.ResultsParameter.ActualName = "Results";
     457      tabuNeighborhoodAnalyzer.PercentTabuParameter.ActualName = "PercentTabu";
     458      if (Problem != null) {
     459        moveQualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
     460        if (MoveEvaluator != null)
     461          moveQualityAnalyzer.QualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName;
     462        moveQualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
     463        if (TabuChecker != null)
     464          tabuNeighborhoodAnalyzer.IsTabuParameter.ActualName = TabuChecker.MoveTabuParameter.ActualName;
     465      }
     466    }
    407467    #endregion
    408468  }
Note: See TracChangeset for help on using the changeset viewer.