Free cookie consent management tool by TermsFeed Policy Generator

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

Updated local search to make use of Analyzers #999

File:
1 edited

Legend:

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

    r3616 r3621  
    3333using HeuristicLab.PluginInfrastructure;
    3434using HeuristicLab.Random;
     35using HeuristicLab.Analysis;
    3536
    3637namespace HeuristicLab.Algorithms.LocalSearch {
     
    7172      get { return (ValueParameter<IntValue>)Parameters["SampleSize"]; }
    7273    }
     74    private ValueParameter<MultiAnalyzer> MoveAnalyzerParameter {
     75      get { return (ValueParameter<MultiAnalyzer>)Parameters["MoveAnalyzer"]; }
     76    }
     77    private ValueParameter<MultiAnalyzer> AnalyzerParameter {
     78      get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
     79    }
    7380    #endregion
    7481
     
    102109      set { SampleSizeParameter.Value = value; }
    103110    }
     111    public MultiAnalyzer MoveAnalyzer {
     112      get { return MoveAnalyzerParameter.Value; }
     113      set { MoveAnalyzerParameter.Value = value; }
     114    }
     115    public MultiAnalyzer Analyzer {
     116      get { return AnalyzerParameter.Value; }
     117      set { AnalyzerParameter.Value = value; }
     118    }
    104119    private RandomCreator RandomCreator {
    105120      get { return (RandomCreator)OperatorGraph.InitialOperator; }
     
    111126      get { return (LocalSearchMainLoop)SolutionsCreator.Successor; }
    112127    }
    113     #endregion
    114 
     128    private BestAverageWorstQualityAnalyzer moveQualityAnalyzer;
     129    #endregion
     130
     131    [StorableConstructor]
     132    private LocalSearch(bool deserializing) : base(deserializing) { }
    115133    public LocalSearch()
    116134      : base() {
     
    122140      Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000)));
    123141      Parameters.Add(new ValueParameter<IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(100)));
    124 
     142      Parameters.Add(new ValueParameter<MultiAnalyzer>("MoveAnalyzer", "The operator used to analyze the moves in each iteration.", new MultiAnalyzer()));
     143      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze each iteration.", new MultiAnalyzer()));
     144     
    125145      RandomCreator randomCreator = new RandomCreator();
    126146      SolutionsCreator solutionsCreator = new SolutionsCreator();
     
    144164      lsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
    145165      lsMainLoop.ResultsParameter.ActualName = "Results";
     166      lsMainLoop.MoveAnalyzerParameter.ActualName = MoveAnalyzerParameter.Name;
     167      lsMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
    146168
    147169      Initialize();
    148170    }
    149     [StorableConstructor]
    150     private LocalSearch(bool deserializing) : base(deserializing) { }
    151171
    152172    public override IDeepCloneable Clone(Cloner cloner) {
     
    173193      ParameterizeMoveEvaluators();
    174194      ParameterizeMoveMakers();
     195      ParameterizeAnalyzers();
    175196      UpdateMoveGenerator();
    176197      UpdateMoveParameters();
     198      UpdateAnalyzers();
    177199      Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    178200      base.OnProblemChanged();
     
    189211      ParameterizeMoveEvaluators();
    190212      ParameterizeMoveMakers();
     213      ParameterizeAnalyzers();
    191214      Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    192215      base.Problem_EvaluatorChanged(sender, e);
     
    202225      UpdateMoveGenerator();
    203226      UpdateMoveParameters();
     227      UpdateAnalyzers();
    204228      ParameterizeMainLoop();
    205229      ParameterizeMoveEvaluators();
     
    219243      ParameterizeMoveEvaluators();
    220244      ParameterizeMoveMakers();
     245      ParameterizeAnalyzers();
    221246    }
    222247    private void MoveEvaluator_MoveQualityParameter_ActualNameChanged(object sender, EventArgs e) {
     
    224249      ParameterizeMoveEvaluators();
    225250      ParameterizeMoveMakers();
     251      ParameterizeAnalyzers();
    226252    }
    227253    #endregion
     
    230256    [StorableHook(HookType.AfterDeserialization)]
    231257    private void Initialize() {
     258      InitializeAnalyzers();
     259      UpdateAnalyzers();
    232260      if (Problem != null) {
    233261        Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
     
    238266      MoveGeneratorParameter.ValueChanged += new EventHandler(MoveGeneratorParameter_ValueChanged);
    239267      MoveEvaluatorParameter.ValueChanged += new EventHandler(MoveEvaluatorParameter_ValueChanged);
     268    }
     269    private void InitializeAnalyzers() {
     270      moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
     271      ParameterizeAnalyzers();
    240272    }
    241273    private void UpdateMoveGenerator() {
     
    281313      }
    282314    }
     315    private void UpdateAnalyzers() {
     316      Analyzer.Operators.Clear();
     317      MoveAnalyzer.Operators.Clear();
     318      MoveAnalyzer.Operators.Add(moveQualityAnalyzer);
     319      /*if (Problem != null) {
     320        foreach (ISolutionAnalyzer analyzer in Problem.Operators.OfType<ISolutionAnalyzer>().OrderBy(x => x.Name))
     321          Analyzer.Operators.Add(analyzer);
     322      }*/
     323    }
    283324    private void ClearMoveParameters() {
    284325      MoveMakerParameter.ValidValues.Clear();
     
    312353      }
    313354    }
     355    private void ParameterizeAnalyzers() {
     356      moveQualityAnalyzer.ResultsParameter.ActualName = "Results";
     357      if (Problem != null) {
     358        moveQualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
     359        if (MoveEvaluator != null)
     360          moveQualityAnalyzer.QualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName;
     361        moveQualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
     362      }
     363    }
    314364    #endregion
    315365  }
Note: See TracChangeset for help on using the changeset viewer.