Changeset 3662


Ignore:
Timestamp:
05/06/10 02:46:37 (12 years ago)
Author:
swagner
Message:

Worked on refactoring of algorithm analysis and tracing (#999)

  • adapted analyzers
Location:
trunk/sources
Files:
1 added
6 deleted
20 edited
3 moved

Legend:

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

    r3658 r3662  
    140140      get { return selectors; }
    141141    }
    142     private PopulationBestAverageWorstQualityAnalyzer qualityAnalyzer;
     142    private BestAverageWorstQualityAnalyzer qualityAnalyzer;
    143143    #endregion
    144144
     
    291291    }
    292292    private void InitializeAnalyzers() {
    293       qualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     293      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    294294      ParameterizeAnalyzers();
    295295    }
     
    312312        qualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
    313313        qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
     314        qualityAnalyzer.QualityParameter.Depth = 1;
    314315        qualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
    315316      }
     
    353354      Analyzer.Operators.Add(qualityAnalyzer);
    354355      if (Problem != null) {
    355         foreach (IAnalyzer analyzer in Problem.Operators.OfType<IAnalyzer>().OrderBy(x => x.Name))
     356        foreach (IAnalyzer analyzer in Problem.Operators.OfType<IAnalyzer>().OrderBy(x => x.Name)) {
    356357          Analyzer.Operators.Add(analyzer);
     358        }
    357359      }
    358360    }
  • trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs

    r3658 r3662  
    204204      get { return (IslandGeneticAlgorithmMainLoop)IslandProcessor.Successor; }
    205205    }
    206     private PopulationBestAverageWorstQualityAnalyzer islandQualityAnalyzer;
     206    private BestAverageWorstQualityAnalyzer islandQualityAnalyzer;
    207207    //private MultipopulationBestAverageWorstQualityAnalyzer qualityAnalyzer;
    208208    #endregion
     
    398398    }
    399399    private void InitializeAnalyzers() {
    400       islandQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     400      islandQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    401401      //qualityAnalyzer = new MultipopulationBestAverageWorstQualityAnalyzer();
    402402      ParameterizeAnalyzers();
  • trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs

    r3658 r3662  
    126126      get { return (LocalSearchMainLoop)SolutionsCreator.Successor; }
    127127    }
    128     private PopulationBestAverageWorstQualityAnalyzer moveQualityAnalyzer;
     128    private BestAverageWorstQualityAnalyzer moveQualityAnalyzer;
    129129    #endregion
    130130
     
    269269    }
    270270    private void InitializeAnalyzers() {
    271       moveQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     271      moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    272272      ParameterizeAnalyzers();
    273273    }
  • trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs

    r3658 r3662  
    246246      get { return (IslandOffspringSelectionGeneticAlgorithmMainLoop)IslandProcessor.Successor; }
    247247    }
    248     private PopulationBestAverageWorstQualityAnalyzer islandQualityAnalyzer;
     248    private BestAverageWorstQualityAnalyzer islandQualityAnalyzer;
    249249    //private MultipopulationBestAverageWorstQualityAnalyzer qualityAnalyzer;
    250250    #endregion
     
    471471    }
    472472    private void InitializeAnalyzers() {
    473       islandQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     473      islandQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    474474      //qualityAnalyzer = new MultipopulationBestAverageWorstQualityAnalyzer();
    475475      ParameterizeAnalyzers();
  • trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASA.cs

    r3658 r3662  
    223223      get { return (SASEGASAMainLoop)VillageProcessor.Successor; }
    224224    }
    225     private PopulationBestAverageWorstQualityAnalyzer villageQualityAnalyzer;
     225    private BestAverageWorstQualityAnalyzer villageQualityAnalyzer;
    226226    //private MultipopulationBestAverageWorstQualityAnalyzer qualityAnalyzer;
    227227    #endregion
     
    429429    }
    430430    private void InitializeAnalyzers() {
    431       villageQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     431      villageQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    432432      //qualityAnalyzer = new MultipopulationBestAverageWorstQualityAnalyzer();
    433433      ParameterizeAnalyzers();
  • trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs

    r3658 r3662  
    141141      get { return annealingOperators; }
    142142    }
    143     private SolutionQualityAnalyzer qualityAnalyzer;
     143    private QualityAnalyzer qualityAnalyzer;
    144144    #endregion
    145145
     
    297297    }
    298298    private void InitializeAnalyzers() {
    299       qualityAnalyzer = new SolutionQualityAnalyzer();
     299      qualityAnalyzer = new QualityAnalyzer();
    300300      ParameterizeAnalyzers();
    301301    }
     
    320320        qualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
    321321        qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
     322        qualityAnalyzer.QualityParameter.Depth = 0;
    322323        qualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
    323324      }
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs

    r3658 r3662  
    143143      get { return (TabuSearchMainLoop)SolutionsCreator.Successor; }
    144144    }
    145     private PopulationBestAverageWorstQualityAnalyzer moveQualityAnalyzer;
     145    private BestAverageWorstQualityAnalyzer moveQualityAnalyzer;
    146146    private TabuNeighborhoodAnalyzer tabuNeighborhoodAnalyzer;
    147147    #endregion
     
    327327    }
    328328    private void InitializeAnalyzers() {
    329       moveQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
     329      moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    330330      tabuNeighborhoodAnalyzer = new TabuNeighborhoodAnalyzer();
    331331      ParameterizeAnalyzers();
  • trunk/sources/HeuristicLab.Analysis/3.3/BestAverageWorstQualityAnalyzer.cs

    r3659 r3662  
    2020#endregion
    2121
     22using System;
     23using HeuristicLab.Common;
    2224using HeuristicLab.Core;
    2325using HeuristicLab.Data;
     
    3032namespace HeuristicLab.Analysis {
    3133  /// <summary>
    32   /// An operator which analyzes the best, average and worst solution quality in the current population.
     34  /// An operator which analyzes the best, average and worst quality of solutions in the scope tree.
    3335  /// </summary>
    34   [Item("PopulationBestAverageWorstQualityAnalyzer", "An operator which analyzes the best, average and worst solution quality in the current population.")]
     36  [Item("BestAverageWorstQualityAnalyzer", "An operator which analyzes the best, average and worst quality of solutions in the scope tree.")]
    3537  [StorableClass]
    36   public sealed class PopulationBestAverageWorstQualityAnalyzer : AlgorithmOperator, IAnalyzer {
     38  public sealed class BestAverageWorstQualityAnalyzer : AlgorithmOperator, IAnalyzer {
    3739    #region Parameter properties
    3840    public ValueLookupParameter<BoolValue> MaximizationParameter {
     
    7173    #endregion
    7274
    73     [StorableConstructor]
    74     private PopulationBestAverageWorstQualityAnalyzer(bool deserializing) : base() { }
    75     public PopulationBestAverageWorstQualityAnalyzer()
     75    #region Properties
     76    private BestQualityMemorizer BestQualityMemorizer {
     77      get { return (BestQualityMemorizer)OperatorGraph.InitialOperator; }
     78    }
     79    private BestQualityMemorizer BestKnownQualityMemorizer {
     80      get { return (BestQualityMemorizer)BestQualityMemorizer.Successor; }
     81    }
     82    private BestAverageWorstQualityCalculator BestAverageWorstQualityCalculator {
     83      get { return (BestAverageWorstQualityCalculator)BestKnownQualityMemorizer.Successor; }
     84    }
     85    #endregion
     86
     87    public BestAverageWorstQualityAnalyzer()
    7688      : base() {
    77       Initialize();
    78     }
    79 
    80     private void Initialize() {
    8189      #region Create parameters
    8290      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
     
    94102
    95103      #region Create operators
    96       BestQualityMemorizer bestQualityMemorizer1 = new BestQualityMemorizer();
    97       BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
     104      BestQualityMemorizer bestQualityMemorizer = new BestQualityMemorizer();
     105      BestQualityMemorizer bestKnownQualityMemorizer = new BestQualityMemorizer();
    98106      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator = new BestAverageWorstQualityCalculator();
    99107      DataTableValuesCollector dataTableValuesCollector = new DataTableValuesCollector();
     
    101109      ResultsCollector resultsCollector = new ResultsCollector();
    102110
    103       bestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
    104       bestQualityMemorizer1.MaximizationParameter.ActualName = "Maximization";
    105       bestQualityMemorizer1.QualityParameter.ActualName = "Quality";
     111      bestQualityMemorizer.BestQualityParameter.ActualName = BestQualityParameter.Name;
     112      bestQualityMemorizer.MaximizationParameter.ActualName = MaximizationParameter.Name;
     113      bestQualityMemorizer.QualityParameter.ActualName = QualityParameter.Name;
     114      bestQualityMemorizer.QualityParameter.Depth = QualityParameter.Depth;
    106115
    107       bestQualityMemorizer2.BestQualityParameter.ActualName = "BestKnownQuality";
    108       bestQualityMemorizer2.MaximizationParameter.ActualName = "Maximization";
    109       bestQualityMemorizer2.QualityParameter.ActualName = "Quality";
     116      bestKnownQualityMemorizer.BestQualityParameter.ActualName = BestKnownQualityParameter.Name;
     117      bestKnownQualityMemorizer.MaximizationParameter.ActualName = MaximizationParameter.Name;
     118      bestKnownQualityMemorizer.QualityParameter.ActualName = QualityParameter.Name;
     119      bestKnownQualityMemorizer.QualityParameter.Depth = QualityParameter.Depth;
    110120
    111       bestAverageWorstQualityCalculator.AverageQualityParameter.ActualName = "CurrentAverageQuality";
    112       bestAverageWorstQualityCalculator.BestQualityParameter.ActualName = "CurrentBestQuality";
    113       bestAverageWorstQualityCalculator.MaximizationParameter.ActualName = "Maximization";
    114       bestAverageWorstQualityCalculator.QualityParameter.ActualName = "Quality";
    115       bestAverageWorstQualityCalculator.WorstQualityParameter.ActualName = "CurrentWorstQuality";
     121      bestAverageWorstQualityCalculator.AverageQualityParameter.ActualName = CurrentAverageQualityParameter.Name;
     122      bestAverageWorstQualityCalculator.BestQualityParameter.ActualName = CurrentBestQualityParameter.Name;
     123      bestAverageWorstQualityCalculator.MaximizationParameter.ActualName = MaximizationParameter.Name;
     124      bestAverageWorstQualityCalculator.QualityParameter.ActualName = QualityParameter.Name;
     125      bestAverageWorstQualityCalculator.QualityParameter.Depth = QualityParameter.Depth;
     126      bestAverageWorstQualityCalculator.WorstQualityParameter.ActualName = CurrentWorstQualityParameter.Name;
    116127
    117       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
    118       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
    119       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
    120       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
    121       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
    122       dataTableValuesCollector.DataTableParameter.ActualName = "Qualities";
     128      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentBestQuality", null, CurrentBestQualityParameter.Name));
     129      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentAverageQuality", null, CurrentAverageQualityParameter.Name));
     130      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentWorstQuality", null, CurrentWorstQualityParameter.Name));
     131      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestQuality", null, BestQualityParameter.Name));
     132      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestKnownQuality", null, BestKnownQualityParameter.Name));
     133      dataTableValuesCollector.DataTableParameter.ActualName = QualitiesParameter.Name;
    123134
    124       qualityDifferenceCalculator.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
    125       qualityDifferenceCalculator.FirstQualityParameter.ActualName = "BestKnownQuality";
    126       qualityDifferenceCalculator.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
    127       qualityDifferenceCalculator.SecondQualityParameter.ActualName = "BestQuality";
     135      qualityDifferenceCalculator.AbsoluteDifferenceParameter.ActualName = AbsoluteDifferenceBestKnownToBestParameter.Name;
     136      qualityDifferenceCalculator.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
     137      qualityDifferenceCalculator.RelativeDifferenceParameter.ActualName = RelativeDifferenceBestKnownToBestParameter.Name;
     138      qualityDifferenceCalculator.SecondQualityParameter.ActualName = BestQualityParameter.Name;
    128139
    129       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
    130       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
    131       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
    132       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
    133       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
    134       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
    135       resultsCollector.CollectedValues.Add(new LookupParameter<PercentValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
    136       resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Qualities"));
    137       resultsCollector.ResultsParameter.ActualName = "Results";
     140      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentBestQuality", null, CurrentBestQualityParameter.Name));
     141      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentAverageQuality", null, CurrentAverageQualityParameter.Name));
     142      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentWorstQuality", null, CurrentWorstQualityParameter.Name));
     143      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestQuality", null, BestQualityParameter.Name));
     144      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestKnownQuality", null, BestKnownQualityParameter.Name));
     145      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("AbsoluteDifferenceBestKnownToBest", null, AbsoluteDifferenceBestKnownToBestParameter.Name));
     146      resultsCollector.CollectedValues.Add(new LookupParameter<PercentValue>("RelativeDifferenceBestKnownToBest", null, RelativeDifferenceBestKnownToBestParameter.Name));
     147      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(QualitiesParameter.Name));
     148      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
    138149      #endregion
    139150
    140151      #region Create operator graph
    141       OperatorGraph.InitialOperator = bestQualityMemorizer1;
    142       bestQualityMemorizer1.Successor = bestQualityMemorizer2;
    143       bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator;
     152      OperatorGraph.InitialOperator = bestQualityMemorizer;
     153      bestQualityMemorizer.Successor = bestKnownQualityMemorizer;
     154      bestKnownQualityMemorizer.Successor = bestAverageWorstQualityCalculator;
    144155      bestAverageWorstQualityCalculator.Successor = dataTableValuesCollector;
    145156      dataTableValuesCollector.Successor = qualityDifferenceCalculator;
     
    147158      resultsCollector.Successor = null;
    148159      #endregion
     160
     161      Initialize();
     162    }
     163    [StorableConstructor]
     164    private BestAverageWorstQualityAnalyzer(bool deserializing) : base() { }
     165
     166    [StorableHook(HookType.AfterDeserialization)]
     167    private void Initialize() {
     168      QualityParameter.DepthChanged += new EventHandler(QualityParameter_DepthChanged);
     169    }
     170
     171    public override IDeepCloneable Clone(Cloner cloner) {
     172      BestAverageWorstQualityAnalyzer clone = (BestAverageWorstQualityAnalyzer)base.Clone(cloner);
     173      clone.Initialize();
     174      return clone;
     175    }
     176
     177    private void QualityParameter_DepthChanged(object sender, System.EventArgs e) {
     178      BestQualityMemorizer.QualityParameter.Depth = QualityParameter.Depth;
     179      BestKnownQualityMemorizer.QualityParameter.Depth = QualityParameter.Depth;
     180      BestAverageWorstQualityCalculator.QualityParameter.Depth = QualityParameter.Depth;
    149181    }
    150182  }
  • trunk/sources/HeuristicLab.Analysis/3.3/BestAverageWorstQualityCalculator.cs

    r3659 r3662  
    2929namespace HeuristicLab.Analysis {
    3030  /// <summary>
    31   /// An operator which calculates the best, average and worst solution quality of the current population.
     31  /// An operator which calculates the best, average and worst quality of solutions in the scope tree.
    3232  /// </summary>
    33   [Item("BestAverageWorstQualityCalculator", "An operator which calculates the best, average and worst solution quality of the current population.")]
     33  [Item("BestAverageWorstQualityCalculator", "An operator which calculates the best, average and worst quality of solutions in the scope tree.")]
    3434  [StorableClass]
    3535  public sealed class BestAverageWorstQualityCalculator : SingleSuccessorOperator {
    36     public IValueLookupParameter<BoolValue> MaximizationParameter {
    37       get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     36    public ValueLookupParameter<BoolValue> MaximizationParameter {
     37      get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
    3838    }
    39     public ILookupParameter<ItemArray<DoubleValue>> QualityParameter {
    40       get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Quality"]; }
     39    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
     40      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
    4141    }
    42     public IValueLookupParameter<DoubleValue> BestQualityParameter {
    43       get { return (IValueLookupParameter<DoubleValue>)Parameters["BestQuality"]; }
     42    public ValueLookupParameter<DoubleValue> BestQualityParameter {
     43      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestQuality"]; }
    4444    }
    45     public IValueLookupParameter<DoubleValue> AverageQualityParameter {
    46       get { return (IValueLookupParameter<DoubleValue>)Parameters["AverageQuality"]; }
     45    public ValueLookupParameter<DoubleValue> AverageQualityParameter {
     46      get { return (ValueLookupParameter<DoubleValue>)Parameters["AverageQuality"]; }
    4747    }
    48     public IValueLookupParameter<DoubleValue> WorstQualityParameter {
    49       get { return (IValueLookupParameter<DoubleValue>)Parameters["WorstQuality"]; }
     48    public ValueLookupParameter<DoubleValue> WorstQualityParameter {
     49      get { return (ValueLookupParameter<DoubleValue>)Parameters["WorstQuality"]; }
    5050    }
    5151
     
    5353      : base() {
    5454      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the current problem is a maximization problem, otherwise false."));
    55       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value contained in each sub-scope which represents the solution quality."));
     55      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value contained in the scope tree which represents the solution quality."));
    5656      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The quality value of the best solution."));
    5757      Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageQuality", "The average quality of all solutions."));
  • trunk/sources/HeuristicLab.Analysis/3.3/BestQualityMemorizer.cs

    r3659 r3662  
    2929namespace HeuristicLab.Analysis {
    3030  /// <summary>
    31   /// An operator that updates the best quality found so far with those qualities in the subscopes.
     31  /// An operator that updates the best quality found so far with those qualities contained in the scope tree.
    3232  /// </summary>
    33   [Item("BestQualityMemorizer", "An operator that updates the best quality found so far with those qualities in the subscopes.")]
     33  [Item("BestQualityMemorizer", "An operator that updates the best quality found so far with those qualities contained in the scope tree.")]
    3434  [StorableClass]
    3535  public class BestQualityMemorizer : SingleSuccessorOperator {
    36     public IValueLookupParameter<BoolValue> MaximizationParameter {
    37       get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     36    public ValueLookupParameter<BoolValue> MaximizationParameter {
     37      get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
    3838    }
    39     public ILookupParameter<ItemArray<DoubleValue>> QualityParameter {
    40       get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Quality"]; }
     39    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
     40      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
    4141    }
    42     public IValueLookupParameter<DoubleValue> BestQualityParameter {
    43       get { return (IValueLookupParameter<DoubleValue>)Parameters["BestQuality"]; }
     42    public ValueLookupParameter<DoubleValue> BestQualityParameter {
     43      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestQuality"]; }
    4444    }
    4545
     
    4747      : base() {
    4848      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the current problem is a maximization problem, otherwise false."));
    49       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value contained in each sub-scope which represents the solution quality."));
     49      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value contained in the scope tree which represents the solution quality."));
    5050      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The quality value of the best solution."));
    5151    }
  • trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj

    r3623 r3662  
    8585  <ItemGroup>
    8686    <None Include="HeuristicLabAnalysisPlugin.cs.frame" />
     87    <Compile Include="BestAverageWorstQualityAnalyzer.cs" />
    8788    <Compile Include="BestAverageWorstQualityCalculator.cs" />
    8889    <Compile Include="BestQualityMemorizer.cs" />
    89     <Compile Include="PopulationQualityAnalyzer.cs" />
    90     <Compile Include="PopulationValueAnalyzer.cs" />
     90    <Compile Include="QualityAnalyzer.cs" />
     91    <Compile Include="MinAverageMaxValueAnalyzer.cs" />
    9192    <Compile Include="MinAverageMaxValueCalculator.cs" />
    92     <Compile Include="PopulationMinAverageMaxValueAnalyzer.cs" />
    93     <Compile Include="SolutionValueAnalyzer.cs" />
    94     <Compile Include="SolutionQualityAnalyzer.cs" />
    9593    <Compile Include="MultiAnalyzer.cs" />
    96     <Compile Include="PopulationBestAverageWorstQualityAnalyzer.cs" />
    9794    <Compile Include="QualityDifferenceCalculator.cs" />
    9895    <Compile Include="DataRow.cs" />
     
    10198    <Compile Include="DataTable.cs" />
    10299    <Compile Include="DataTableValuesCollector.cs" />
     100    <Compile Include="ValueAnalyzer.cs" />
    103101  </ItemGroup>
    104102  <ItemGroup>
  • trunk/sources/HeuristicLab.Analysis/3.3/MinAverageMaxValueAnalyzer.cs

    r3659 r3662  
    2020#endregion
    2121
     22using System;
     23using HeuristicLab.Common;
    2224using HeuristicLab.Core;
    2325using HeuristicLab.Data;
     
    3032namespace HeuristicLab.Analysis {
    3133  /// <summary>
    32   /// An operator which analyzes the minimum, average and maximum of a value in the current population.
     34  /// An operator which analyzes the minimum, average and maximum of a value in the scope tree.
    3335  /// </summary>
    34   [Item("PopulationMinAverageMaxValueAnalyzer", "An operator which analyzes the minimum, average and maximum of a value in the current population.")]
     36  [Item("MinAverageMaxValueAnalyzer", "An operator which analyzes the minimum, average and maximum of a value in the scope tree.")]
    3537  [StorableClass]
    36   public sealed class PopulationMinAverageMaxValueAnalyzer : AlgorithmOperator, IAnalyzer {
     38  public sealed class MinAverageMaxValueAnalyzer : AlgorithmOperator, IAnalyzer {
    3739    #region Parameter properties
    3840    public ScopeTreeLookupParameter<DoubleValue> ValueParameter {
     
    5658    #endregion
    5759
    58     [StorableConstructor]
    59     private PopulationMinAverageMaxValueAnalyzer(bool deserializing) : base() { }
    60     public PopulationMinAverageMaxValueAnalyzer()
     60    #region Properties
     61    private MinAverageMaxValueCalculator MinAverageMaxValueCalculator {
     62      get { return (MinAverageMaxValueCalculator)OperatorGraph.InitialOperator; }
     63    }
     64    #endregion
     65
     66    public MinAverageMaxValueAnalyzer()
    6167      : base() {
    62       Initialize();
    63     }
    64 
    65     private void Initialize() {
    6668      #region Create parameters
    67       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in each solution which should be analyzed."));
     69      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in the scope tree which should be analyzed."));
    6870      Parameters.Add(new ValueLookupParameter<DoubleValue>("MinValue", "The minimum of the value."));
    6971      Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageValue", "The average of the value."));
     
    7880      ResultsCollector resultsCollector = new ResultsCollector();
    7981
    80       minAverageMaxValueCalculator.AverageValueParameter.ActualName = "AverageValue";
    81       minAverageMaxValueCalculator.MaxValueParameter.ActualName = "MaxValue";
    82       minAverageMaxValueCalculator.MinValueParameter.ActualName = "MinValue";
    83       minAverageMaxValueCalculator.ValueParameter.ActualName = "Value";
     82      minAverageMaxValueCalculator.AverageValueParameter.ActualName = AverageValueParameter.Name;
     83      minAverageMaxValueCalculator.MaxValueParameter.ActualName = MaxValueParameter.Name;
     84      minAverageMaxValueCalculator.MinValueParameter.ActualName = MinValueParameter.Name;
     85      minAverageMaxValueCalculator.ValueParameter.ActualName = ValueParameter.Name;
     86      minAverageMaxValueCalculator.ValueParameter.Depth = ValueParameter.Depth;
    8487
    85       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Minimum Value", null, "MinValue"));
    86       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Average Value", null, "AverageValue"));
    87       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Maximum Value", null, "MaxValue"));
    88       dataTableValuesCollector.DataTableParameter.ActualName = "Values";
     88      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("MinValue", null, MinValueParameter.Name));
     89      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("AverageValue", null, AverageValueParameter.Name));
     90      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("MaxValue", null, MaxValueParameter.Name));
     91      dataTableValuesCollector.DataTableParameter.ActualName = ValuesParameter.Name;
    8992
    90       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Minimum Value", null, "MinValue"));
    91       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Average Value", null, "AverageValue"));
    92       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Maximum Value", null, "MaxValue"));
    93       resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Values"));
    94       resultsCollector.ResultsParameter.ActualName = "Results";
     93      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("MinValue", null, MinValueParameter.Name));
     94      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("AverageValue", null, AverageValueParameter.Name));
     95      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("MaxValue", null, MaxValueParameter.Name));
     96      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(ValuesParameter.Name));
     97      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
    9598      #endregion
    9699
     
    101104      resultsCollector.Successor = null;
    102105      #endregion
     106
     107      Initialize();
     108    }
     109    [StorableConstructor]
     110    private MinAverageMaxValueAnalyzer(bool deserializing) : base() { }
     111
     112    [StorableHook(HookType.AfterDeserialization)]
     113    private void Initialize() {
     114      ValueParameter.DepthChanged += new EventHandler(ValueParameter_DepthChanged);
     115    }
     116
     117    public override IDeepCloneable Clone(Cloner cloner) {
     118      MinAverageMaxValueAnalyzer clone = (MinAverageMaxValueAnalyzer)base.Clone(cloner);
     119      clone.Initialize();
     120      return clone;
     121    }
     122
     123    private void ValueParameter_DepthChanged(object sender, System.EventArgs e) {
     124      MinAverageMaxValueCalculator.ValueParameter.Depth = ValueParameter.Depth;
    103125    }
    104126  }
  • trunk/sources/HeuristicLab.Analysis/3.3/MinAverageMaxValueCalculator.cs

    r3659 r3662  
    2929namespace HeuristicLab.Analysis {
    3030  /// <summary>
    31   /// An operator which calculates the minimum, average and maximum of a value in the current population.
     31  /// An operator which calculates the minimum, average and maximum of a value in the scope tree.
    3232  /// </summary>
    33   [Item("MinAverageMaxValueCalculator", "An operator which calculates the minimum, average and maximum of a value in the current population.")]
     33  [Item("MinAverageMaxValueCalculator", "An operator which calculates the minimum, average and maximum of a value in the scope tree.")]
    3434  [StorableClass]
    3535  public sealed class MinAverageMaxValueCalculator : SingleSuccessorOperator {
    36     public ILookupParameter<ItemArray<DoubleValue>> ValueParameter {
    37       get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Value"]; }
     36    public ScopeTreeLookupParameter<DoubleValue> ValueParameter {
     37      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Value"]; }
    3838    }
    39     public IValueLookupParameter<DoubleValue> MinValueParameter {
    40       get { return (IValueLookupParameter<DoubleValue>)Parameters["MinValue"]; }
     39    public ValueLookupParameter<DoubleValue> MinValueParameter {
     40      get { return (ValueLookupParameter<DoubleValue>)Parameters["MinValue"]; }
    4141    }
    42     public IValueLookupParameter<DoubleValue> AverageValueParameter {
    43       get { return (IValueLookupParameter<DoubleValue>)Parameters["AverageValue"]; }
     42    public ValueLookupParameter<DoubleValue> AverageValueParameter {
     43      get { return (ValueLookupParameter<DoubleValue>)Parameters["AverageValue"]; }
    4444    }
    45     public IValueLookupParameter<DoubleValue> MaxValueParameter {
    46       get { return (IValueLookupParameter<DoubleValue>)Parameters["MaxValue"]; }
     45    public ValueLookupParameter<DoubleValue> MaxValueParameter {
     46      get { return (ValueLookupParameter<DoubleValue>)Parameters["MaxValue"]; }
    4747    }
    4848
    4949    public MinAverageMaxValueCalculator()
    5050      : base() {
    51       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in each sub-scope for which the minimum, average and maximum should be calculated."));
     51      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in the scope tree for which the minimum, average and maximum should be calculated."));
    5252      Parameters.Add(new ValueLookupParameter<DoubleValue>("MinValue", "The minimum of the value."));
    5353      Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageValue", "The average of the value."));
    5454      Parameters.Add(new ValueLookupParameter<DoubleValue>("MaxValue", "The maximum of the value."));
    5555    }
    56 
    5756
    5857    public override IOperation Apply() {
  • trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalyzer.cs

    r3659 r3662  
    2020#endregion
    2121
     22using System;
     23using HeuristicLab.Common;
    2224using HeuristicLab.Core;
    2325using HeuristicLab.Data;
     
    3032namespace HeuristicLab.Analysis {
    3133  /// <summary>
    32   /// An operator which analyzes a value in the current population.
     34  /// An operator which analyzes a value in the scope tree.
    3335  /// </summary>
    34   [Item("PopulationValueAnalyzer", "An operator which analyzes a value in the current population.")]
     36  [Item("ValueAnalyzer", "An operator which analyzes a value in the scope tree.")]
    3537  [StorableClass]
    36   public sealed class PopulationValueAnalyzer : AlgorithmOperator, IAnalyzer {
     38  public sealed class ValueAnalyzer : AlgorithmOperator, IAnalyzer {
    3739    #region Parameter properties
    3840    public ScopeTreeLookupParameter<DoubleValue> ValueParameter {
     
    4749    #endregion
    4850
    49     [StorableConstructor]
    50     private PopulationValueAnalyzer(bool deserializing) : base() { }
    51     public PopulationValueAnalyzer()
     51    #region Properties
     52    private DataTableValuesCollector DataTableValuesCollector {
     53      get { return (DataTableValuesCollector)OperatorGraph.InitialOperator; }
     54    }
     55    private ResultsCollector ResultsCollector {
     56      get { return (ResultsCollector)DataTableValuesCollector.Successor; }
     57    }
     58    #endregion
     59
     60    public ValueAnalyzer()
    5261      : base() {
    53       Initialize();
    54     }
    55 
    56     private void Initialize() {
    5762      #region Create parameters
    58       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in each solution which should be analyzed."));
     63      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in the scope tree which should be analyzed."));
    5964      Parameters.Add(new ValueLookupParameter<DataTable>("Values", "The data table to store the values."));
    6065      Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The results collection where the analysis values should be stored."));
     
    6570      ResultsCollector resultsCollector = new ResultsCollector();
    6671
    67       dataTableValuesCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", null, "Value"));
    68       dataTableValuesCollector.DataTableParameter.ActualName = "Values";
     72      dataTableValuesCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", null, ValueParameter.Name));
     73      ((ScopeTreeLookupParameter<DoubleValue>)dataTableValuesCollector.CollectedValues["Value"]).Depth = ValueParameter.Depth;
     74      dataTableValuesCollector.DataTableParameter.ActualName = ValuesParameter.Name;
    6975
    70       resultsCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", null, "Value"));
    71       resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Values"));
    72       resultsCollector.ResultsParameter.ActualName = "Results";
     76      resultsCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", null, ValueParameter.Name));
     77      ((ScopeTreeLookupParameter<DoubleValue>)resultsCollector.CollectedValues["Value"]).Depth = ValueParameter.Depth;
     78      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(ValuesParameter.Name));
     79      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
    7380      #endregion
    7481
     
    7885      resultsCollector.Successor = null;
    7986      #endregion
     87
     88      Initialize();
     89    }
     90    [StorableConstructor]
     91    private ValueAnalyzer(bool deserializing) : base() { }
     92
     93    [StorableHook(HookType.AfterDeserialization)]
     94    private void Initialize() {
     95      ValueParameter.DepthChanged += new EventHandler(ValueParameter_DepthChanged);
     96    }
     97
     98    public override IDeepCloneable Clone(Cloner cloner) {
     99      ValueAnalyzer clone = (ValueAnalyzer)base.Clone(cloner);
     100      clone.Initialize();
     101      return clone;
     102    }
     103
     104    private void ValueParameter_DepthChanged(object sender, System.EventArgs e) {
     105      ((ScopeTreeLookupParameter<DoubleValue>)DataTableValuesCollector.CollectedValues["Value"]).Depth = ValueParameter.Depth;
     106      ((ScopeTreeLookupParameter<DoubleValue>)ResultsCollector.CollectedValues["Value"]).Depth = ValueParameter.Depth;
    80107    }
    81108  }
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/PopulationMinAvgMaxTreeSizeAnalyzer.cs

    r3659 r3662  
    6969      UniformSubScopesProcessor subScopesProcessor = new UniformSubScopesProcessor();
    7070      SymbolicExpressionTreeSizeCalculator sizeCalculator = new SymbolicExpressionTreeSizeCalculator();
    71       PopulationMinAverageMaxValueAnalyzer valuesAnalyzer = new PopulationMinAverageMaxValueAnalyzer();
     71      MinAverageMaxValueAnalyzer valuesAnalyzer = new MinAverageMaxValueAnalyzer();
    7272      sizeCalculator.SymbolicExpressionTreeParameter.ActualName = SymbolicExpressionTreeParameter.Name;
    7373      sizeCalculator.SymbolicExpressionTreeSizeParameter.ActualName = SymbolicExpressionTreeSizeParameter.Name;
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/SymbolicExpressionTreeSizeAnalyzer.cs

    r3651 r3662  
    7171
    7272      SymbolicExpressionTreeSizeCalculator sizeCalculator = new SymbolicExpressionTreeSizeCalculator();
    73       SolutionValueAnalyzer valueAnalyzer = new SolutionValueAnalyzer();
     73      ValueAnalyzer valueAnalyzer = new ValueAnalyzer();
    7474      sizeCalculator.SymbolicExpressionTreeParameter.ActualName = SymbolicExpressionTreeParameter.Name;
    7575      sizeCalculator.SymbolicExpressionTreeSizeParameter.ActualName = SymbolicExpressionTreeSizeParameter.Name;
    7676      valueAnalyzer.ValueParameter.ActualName = sizeCalculator.SymbolicExpressionTreeSizeParameter.Name;
     77      valueAnalyzer.ValueParameter.Depth = 0;
    7778      valueAnalyzer.ValuesParameter.ActualName = SymbolicExpressionTreeSizesParameter.Name;
    7879      valueAnalyzer.ResultsParameter.ActualName = ResultsParameter.Name;
  • trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj

    r3658 r3662  
    179179  </ItemGroup>
    180180  <ItemGroup>
     181    <EmbeddedResource Include="Documents\GA_TSP.hl" />
    181182    <EmbeddedResource Include="Properties\Resources.resx">
    182183      <Generator>ResXFileCodeGenerator</Generator>
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionModelQualityAnalyzer.cs

    r3659 r3662  
    102102      SimpleSymbolicRegressionEvaluator simpleEvaluator = new SimpleSymbolicRegressionEvaluator();
    103103      SimpleRSquaredEvaluator simpleR2Evalator = new SimpleRSquaredEvaluator();
    104       PopulationMinAverageMaxValueAnalyzer minAvgMaxAnalyzer = new PopulationMinAverageMaxValueAnalyzer();
     104      MinAverageMaxValueAnalyzer minAvgMaxAnalyzer = new MinAverageMaxValueAnalyzer();
    105105      #endregion
    106106
  • trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/PopulationBestTSPSolutionAnalyzer.cs

    r3659 r3662  
    3636  [Item("PopulationBestTSPSolutionAnalyzer", "An operator for analyzing the best solution of Traveling Salesman Problems given in path representation using city coordinates.")]
    3737  [StorableClass]
    38   public sealed class PopulationBestTSPSolutionAnalyzer : SingleSuccessorOperator, IBestTSPSolutionAnalyzer, IAnalyzer {
    39     public ILookupParameter<DoubleMatrix> CoordinatesParameter {
    40       get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
     38  public sealed class PopulationBestTSPSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
     39    public LookupParameter<DoubleMatrix> CoordinatesParameter {
     40      get { return (LookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
    4141    }
    42     public ILookupParameter<ItemArray<Permutation>> PermutationParameter {
    43       get { return (ILookupParameter<ItemArray<Permutation>>)Parameters["Permutation"]; }
     42    public ScopeTreeLookupParameter<Permutation> PermutationParameter {
     43      get { return (ScopeTreeLookupParameter<Permutation>)Parameters["Permutation"]; }
    4444    }
    45     ILookupParameter IBestTSPSolutionAnalyzer.PermutationParameter {
    46       get { return PermutationParameter; }
     45    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
     46      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
    4747    }
    48     public ILookupParameter<ItemArray<DoubleValue>> QualityParameter {
    49       get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Quality"]; }
     48    public LookupParameter<PathTSPTour> BestSolutionParameter {
     49      get { return (LookupParameter<PathTSPTour>)Parameters["BestSolution"]; }
    5050    }
    51     ILookupParameter IBestTSPSolutionAnalyzer.QualityParameter {
    52       get { return QualityParameter; }
    53     }
    54     public ILookupParameter<PathTSPTour> BestSolutionParameter {
    55       get { return (ILookupParameter<PathTSPTour>)Parameters["BestSolution"]; }
    56     }
    57     public IValueLookupParameter<ResultCollection> ResultsParameter {
    58       get { return (IValueLookupParameter<ResultCollection>)Parameters["Results"]; }
     51    public ValueLookupParameter<ResultCollection> ResultsParameter {
     52      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
    5953    }
    6054
  • trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj

    r3635 r3662  
    8484  </ItemGroup>
    8585  <ItemGroup>
    86     <Compile Include="Analyzers\MultiPopulationBestTSPSolutionAnalyzer.cs" />
    8786    <Compile Include="Analyzers\PopulationBestTSPSolutionAnalyzer.cs" />
    88     <Compile Include="Analyzers\BestTSPSolutionAnalyzer.cs" />
    8987    <Compile Include="Evaluators\TSPEuclideanPathEvaluator.cs" />
    9088    <Compile Include="Evaluators\TSPGeoPathEvaluator.cs" />
    9189    <Compile Include="HeuristicLabProblemsTravelingSalesmanPlugin.cs" />
    92     <Compile Include="Interfaces\IBestTSPSolutionAnalyzer.cs" />
    9390    <Compile Include="MoveEvaluators\ThreeOpt\TSPTranslocationMoveEuclideanPathEvaluator.cs" />
    9491    <Compile Include="MoveEvaluators\ThreeOpt\TSPTranslocationMoveGeoPathEvaluator.cs" />
  • trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs

    r3635 r3662  
    124124      get { return operators; }
    125125    }
    126     private IEnumerable<IBestTSPSolutionAnalyzer> BestTSPSolutionAnalyzers {
    127       get { return operators.OfType<IBestTSPSolutionAnalyzer>(); }
     126    private PopulationBestTSPSolutionAnalyzer BestTSPSolutionAnalyzer {
     127      get { return operators.OfType<PopulationBestTSPSolutionAnalyzer>().FirstOrDefault(); }
    128128    }
    129129    #endregion
     
    231231      ParameterizeSolutionCreator();
    232232      ParameterizeEvaluator();
    233       ParameterizeAnalyzers();
     233      ParameterizeAnalyzer();
    234234      ParameterizeOperators();
    235235      OnSolutionCreatorChanged();
     
    237237    private void SolutionCreator_PermutationParameter_ActualNameChanged(object sender, EventArgs e) {
    238238      ParameterizeEvaluator();
    239       ParameterizeAnalyzers();
     239      ParameterizeAnalyzer();
    240240      ParameterizeOperators();
    241241    }
     
    244244      ParameterizeEvaluator();
    245245      UpdateMoveEvaluators();
    246       ParameterizeAnalyzers();
     246      ParameterizeAnalyzer();
    247247      ClearDistanceMatrix();
    248248      OnEvaluatorChanged();
    249249    }
    250250    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
    251       ParameterizeAnalyzers();
     251      ParameterizeAnalyzer();
    252252    }
    253253    private void MoveGenerator_InversionMoveParameter_ActualNameChanged(object sender, EventArgs e) {
     
    280280    private void InitializeOperators() {
    281281      operators = new List<IOperator>();
    282       operators.Add(new BestTSPSolutionAnalyzer());
    283282      operators.Add(new PopulationBestTSPSolutionAnalyzer());
    284       operators.Add(new MultiPopulationBestTSPSolutionAnalyzer());
    285       ParameterizeAnalyzers();
     283      ParameterizeAnalyzer();
    286284      operators.AddRange(ApplicationManager.Manager.GetInstances<IPermutationOperator>().Cast<IOperator>());
    287285      ParameterizeOperators();
     
    325323      }
    326324    }
    327     private void ParameterizeAnalyzers() {
    328       foreach (IBestTSPSolutionAnalyzer analyzer in BestTSPSolutionAnalyzers) {
    329         analyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
    330         analyzer.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
    331         analyzer.PermutationParameter.ActualName = SolutionCreator.PermutationParameter.ActualName;
    332         analyzer.ResultsParameter.ActualName = "Results";
    333       }
     325    private void ParameterizeAnalyzer() {
     326      BestTSPSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
     327      BestTSPSolutionAnalyzer.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
     328      BestTSPSolutionAnalyzer.PermutationParameter.ActualName = SolutionCreator.PermutationParameter.ActualName;
     329      BestTSPSolutionAnalyzer.ResultsParameter.ActualName = "Results";
    334330    }
    335331    private void ParameterizeOperators() {
Note: See TracChangeset for help on using the changeset viewer.