Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/17/16 00:29:30 (9 years ago)
Author:
abeham
Message:

#2457: worked on seeding algorithm instances

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.cs

    r13668 r13713  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    2222using HeuristicLab.Analysis;
    2323using HeuristicLab.Analysis.QualityAnalysis;
     24using HeuristicLab.Clients.OKB.RunCreation;
    2425using HeuristicLab.Common;
    2526using HeuristicLab.Common.Resources;
     27using HeuristicLab.Core;
    2628using HeuristicLab.Core.Views;
    2729using HeuristicLab.Data;
     30using HeuristicLab.Data.Views;
    2831using HeuristicLab.MainForm;
    2932using HeuristicLab.Optimization;
     
    3740using System.Windows.Forms;
    3841using System.Windows.Forms.DataVisualization.Charting;
     42using DoubleValue = HeuristicLab.Data.DoubleValue;
    3943
    4044namespace HeuristicLab.OptimizationExpertSystem {
     
    4246  [Content(typeof(ExpertSystem), IsDefaultView = true)]
    4347  public partial class ExpertSystemView : NamedItemView {
    44     protected TypeSelectorDialog problemTypeSelectorDialog;
     48    private EnumValueView<SeedingStrategyTypes> seedingStrategyView;
     49    private CheckedItemListView<IScope> seedingSolutionsView;
    4550    protected virtual bool SuppressEvents { get; set; }
    4651    private bool okbDownloadInProgress;
     
    6166      refreshMapButton.Text = string.Empty;
    6267      refreshMapButton.Image = VSImageLibrary.Refresh;
    63     }
    64 
    65     protected override void Dispose(bool disposing) {
    66       if (disposing) {
    67         if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
    68         if (components != null) components.Dispose();
    69       }
    70       base.Dispose(disposing);
    71     }
    72 
     68      seedingStrategyView = new EnumValueView<SeedingStrategyTypes>() {
     69        Dock = DockStyle.Fill
     70      };
     71      seedingSolutionsView = new CheckedItemListView<IScope>() {
     72        Dock = DockStyle.Fill
     73      };
     74      solutionsSeedingTableLayoutPanel.SuspendLayout();
     75      solutionsSeedingTableLayoutPanel.Controls.Add(seedingStrategyView, 0, 0);
     76      solutionsSeedingTableLayoutPanel.Controls.Add(seedingSolutionsView, 0, 1);
     77      solutionsSeedingTableLayoutPanel.ResumeLayout(true);
     78    }
     79
     80    #region Event Registration
    7381    protected override void DeregisterContentEvents() {
    7482      Content.PropertyChanged -= ContentOnPropertyChanged;
     
    7886      Content.SuggestedInstances.ItemsRemoved -= SuggestedInstancesOnChanged;
    7987      Content.SuggestedInstances.ItemsReplaced -= SuggestedInstancesOnChanged;
    80       Content.SolutionPool.ItemsAdded -= SolutionPoolOnChanged;
    81       Content.SolutionPool.ItemsRemoved -= SolutionPoolOnChanged;
    82       Content.SolutionPool.ItemsReplaced -= SolutionPoolOnChanged;
    83       Content.SolutionPool.CollectionReset -= SolutionPoolOnChanged;
    84       if (Content.Problem != null) Content.Problem.ProblemChanged -= ContentOnProblemChanged;
     88      DeregisterProblemEvents(Content.Problem);
    8589      base.DeregisterContentEvents();
    8690    }
     91
    8792    protected override void RegisterContentEvents() {
    8893      base.RegisterContentEvents();
     
    9398      Content.SuggestedInstances.ItemsRemoved += SuggestedInstancesOnChanged;
    9499      Content.SuggestedInstances.ItemsReplaced += SuggestedInstancesOnChanged;
    95       Content.SolutionPool.ItemsAdded += SolutionPoolOnChanged;
    96       Content.SolutionPool.ItemsRemoved += SolutionPoolOnChanged;
    97       Content.SolutionPool.ItemsReplaced += SolutionPoolOnChanged;
    98       Content.SolutionPool.CollectionReset += SolutionPoolOnChanged;
    99       if (Content.Problem != null) Content.Problem.ProblemChanged += ContentOnProblemChanged;
    100     }
     100      RegisterProblemEvents(Content.Problem);
     101    }
     102
     103    private void DeregisterProblemEvents(OKBProblem problem) {
     104      if (problem == null) return;
     105      problem.Solutions.ItemsAdded -= SolutionsOnChanged;
     106      problem.Solutions.ItemsRemoved -= SolutionsOnChanged;
     107      problem.Solutions.ItemsReplaced -= SolutionsOnChanged;
     108      problem.Solutions.CollectionReset -= SolutionsOnChanged;
     109      problem.ProblemChanged -= ContentOnProblemChanged;
     110    }
     111
     112    private void RegisterProblemEvents(OKBProblem problem) {
     113      if (problem == null) return;
     114      problem.Solutions.ItemsAdded += SolutionsOnChanged;
     115      problem.Solutions.ItemsRemoved += SolutionsOnChanged;
     116      problem.Solutions.ItemsReplaced += SolutionsOnChanged;
     117      problem.Solutions.CollectionReset += SolutionsOnChanged;
     118      problem.ProblemChanged += ContentOnProblemChanged;
     119    }
     120    #endregion
    101121
    102122    protected override void OnContentChanged() {
     
    107127        if (Content == null) {
    108128          maxEvaluationsTextBox.Text = String.Empty;
    109 
    110129          problemViewHost.Content = null;
    111           algorithmViewHost.Content = null;
     130          solverParametersView.Content = null;
     131          solverResultsView.Content = null;
    112132          runsView.Content = null;
    113           solutionsViewHost.Content = null;
    114133          kbViewHost.Content = null;
    115134          problemInstancesView.Content = null;
     135          seedingStrategyView.Content = null;
     136          seedingSolutionsView.Content = null;
    116137        } else {
    117138          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
    118139          problemViewHost.Content = Content.Problem;
    119140          runsView.Content = Content.Runs;
    120           solutionsViewHost.Content = Content.SolutionPool;
    121141          kbViewHost.ViewType = typeof(RunCollectionRLDView);
    122142          kbViewHost.Content = Content.KnowledgeBase;
    123143          problemInstancesView.Content = Content.ProblemInstances;
    124           algorithmViewHost.Content = Content.CurrentResult;
     144          solverResultsView.Content = Content.CurrentResult;
     145          seedingStrategyView.Content = Content.SeedingStrategy;
     146          seedingSolutionsView.Content = Content.SolutionSeedingPool;
    125147        }
    126148      } finally { SuppressEvents = false; }
    127149      UpdateSuggestedInstancesCombobox();
     150      UpdateSimilarityCalculators();
    128151      UpdateNamesComboboxes();
    129       UpdateSimilarityCalculators();
    130152    }
    131153
     
    137159      algorithmStartButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
    138160      algorithmCloneButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
    139       algorithmViewHost.Enabled = Content != null && !ReadOnly && !Locked;
    140161      runsView.Enabled = Content != null;
    141162      kbViewHost.Enabled = Content != null && !okbDownloadInProgress;
     
    143164      refreshMapButton.Enabled = Content != null;
    144165      okbDownloadButton.Enabled = Content != null && Content.Problem != null && Content.Problem.ProblemId >= 0 && !ReadOnly && !Locked && !okbDownloadInProgress;
    145     }
    146 
    147     private void UpdateSuggestedInstancesCombobox() {
    148       var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
    149       var prevNewIndex = -1;
    150       suggestedInstancesComboBox.Items.Clear();
    151       if (Content == null) return;
    152 
    153       for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
    154         suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
    155         if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
    156           prevNewIndex = prevSelection == null ? 0 : i;
    157       }
    158       if (prevNewIndex >= 0) {
    159         suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
    160       }
    161     }
    162 
    163     private void UpdateNamesComboboxes() {
    164       var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
    165       var selectedQualityName = qualityNameComboBox.SelectedIndex >= 0 ? (string)qualityNameComboBox.SelectedItem : string.Empty;
    166 
    167       solutionNameComboBox.Items.Clear();
    168       qualityNameComboBox.Items.Clear();
    169       if (Content == null) return;
    170       var qualityNames = new HashSet<string>(Content.SolutionPool.SelectMany(x => x.Variables).Where(x => x.Value is DoubleValue).Select(x => x.Name));
    171       var solutionNames = Content.SolutionPool.SelectMany(x => x.Variables).Where(x => !qualityNames.Contains(x.Name));
    172 
    173       foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
    174         solutionNameComboBox.Items.Add(sn.Key);
    175         // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
    176         if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
    177           solutionNameComboBox.SelectedItem = sn.Key;
    178       }
    179       foreach (var qn in qualityNames.OrderBy(x => x)) {
    180         qualityNameComboBox.Items.Add(qn);
    181         if (qn == selectedQualityName || string.IsNullOrEmpty(selectedQualityName)) qualityNameComboBox.SelectedItem = qn;
    182       }
    183     }
    184 
    185     private void UpdateSimilarityCalculators() {
    186       var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
    187       similarityComboBox.Items.Clear();
    188      
    189       if (Content == null || Content.Problem == null) return;
    190 
    191       foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
    192         similarityComboBox.Items.Add(calc);
    193         if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
    194       }
    195       if (selected == null && similarityComboBox.Items.Count > 0)
    196         similarityComboBox.SelectedIndex = 0;
    197166    }
    198167
     
    216185          case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break;
    217186          case "Problem":
     187            DeregisterProblemEvents(problemViewHost.Content as OKBProblem);
    218188            problemViewHost.Content = Content.Problem;
    219             Content.Problem.ProblemChanged += ContentOnProblemChanged;
     189            RegisterProblemEvents(Content.Problem);
     190            UpdateNamesComboboxes();
    220191            break;
    221192          case "ProblemInstances": problemInstancesView.Content = Content.ProblemInstances; break;
    222           case "CurrentResult": algorithmViewHost.Content = Content.CurrentResult; break;
     193          case "CurrentResult": solverResultsView.Content = Content.CurrentResult; break;
    223194        }
    224195      } finally { SuppressEvents = false; }
     
    230201    }
    231202
    232     private void SolutionPoolOnChanged(object sender, EventArgs e) {
     203    private void SolutionsOnChanged(object sender, EventArgs e) {
    233204      UpdateNamesComboboxes();
    234       if (qualityNameComboBox.SelectedIndex >= 0) {
    235         var qualityName = (string)qualityNameComboBox.SelectedItem;
    236         UpdateSolutionQualityAnalysis(qualityName);
    237       }
    238       if (similarityComboBox.SelectedIndex >= 0) {
    239         var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
    240         UpdateSolutionDiversityAnalysis(calculator);
    241         UpdateSolutionFdcAnalysis(calculator);
    242         UpdateSolutionLengthScaleAnalysis(calculator);
    243         UpdateSolutionNetworkAnalysis(calculator);
    244       } else solutionsDiversityViewHost.Content = null;
     205      UpdateSolutionVisualization();
    245206    }
    246207    #endregion
     
    263224      }
    264225    }
    265     #endregion
    266     #endregion
    267226
    268227    private void RefreshMapButtonOnClick(object sender, EventArgs e) {
    269228      Content.UpdateInstanceProjection();
    270229      UpdateProjectionComboBox();
    271     }
    272 
    273     private void UpdateProjectionComboBox() {
    274       projectionComboBox.Items.Clear();
    275       var projStrings = Content.ProblemInstances
    276         .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
    277         .Select(x => Regex.Match(x.Key, "Projection[.](?<g>.*)[.][XY]").Groups["g"].Value)
    278         .Distinct();
    279       foreach (var str in projStrings) {
    280         projectionComboBox.Items.Add(str);
    281       }
    282230    }
    283231
     
    295243    }
    296244
    297     private void OkbDownloadProgressOnStateChanged(object sender, EventArgs eventArgs) {
     245    private void OkbDownloadProgressOnStateChanged(object sender, EventArgs e) {
     246      if (InvokeRequired) { Invoke((Action<object, EventArgs>)OkbDownloadProgressOnStateChanged, sender, e); return; }
    298247      var progress = (IProgress)sender;
    299248      okbDownloadInProgress = progress.ProgressState == ProgressState.Started;
     
    316265
    317266    private void ProjectionComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
     267      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProjectionComboBoxOnSelectedIndexChanged, sender, e); return; }
    318268      if (projectionComboBox.SelectedIndex < 0) return;
    319269      var projection = (string)projectionComboBox.SelectedItem;
     
    346296    }
    347297
     298    private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
     299      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SuggestedInstancesComboBoxOnSelectedIndexChanged, sender, e); return; }
     300      if (suggestedInstancesComboBox.SelectedIndex >= 0) {
     301        solverParametersView.Content = Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex].Parameters;
     302      } else solverParametersView.Content = null;
     303      SetEnabledStateOfControls();
     304    }
     305
     306    private void SimilarityComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
     307      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SimilarityComboBoxOnSelectedIndexChanged, sender, e); return; }
     308      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
     309      if (calculator != null) {
     310        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
     311        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
     312      }
     313      UpdateSolutionDiversityAnalysis(calculator);
     314      UpdateSolutionFdcAnalysis(calculator);
     315      UpdateSolutionLengthScaleAnalysis(calculator);
     316      UpdateSolutionNetworkAnalysis(calculator);
     317    }
     318    #endregion
     319    #endregion
     320
     321    #region Control Configuration
     322    private void UpdateSuggestedInstancesCombobox() {
     323      var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
     324      var prevNewIndex = -1;
     325      suggestedInstancesComboBox.Items.Clear();
     326      if (Content == null) return;
     327
     328      for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
     329        suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
     330        if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
     331          prevNewIndex = prevSelection == null ? 0 : i;
     332      }
     333      if (prevNewIndex >= 0) {
     334        suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
     335      }
     336    }
     337
     338    private void UpdateSimilarityCalculators() {
     339      var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
     340      similarityComboBox.Items.Clear();
     341
     342      if (Content == null || Content.Problem == null) return;
     343
     344      foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
     345        similarityComboBox.Items.Add(calc);
     346        if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
     347      }
     348      if (selected == null && similarityComboBox.Items.Count > 0)
     349        similarityComboBox.SelectedIndex = 0;
     350    }
     351
     352    private void UpdateNamesComboboxes() {
     353      var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
     354
     355      solutionNameComboBox.Items.Clear();
     356      if (Content == null) return;
     357      var solutionNames = Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().SelectMany(x => x.Variables);
     358
     359      foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
     360        solutionNameComboBox.Items.Add(sn.Key);
     361        // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
     362        if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
     363          solutionNameComboBox.SelectedItem = sn.Key;
     364      }
     365    }
     366   
     367    private void UpdateProjectionComboBox() {
     368      projectionComboBox.Items.Clear();
     369      var projStrings = Content.ProblemInstances
     370        .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
     371        .Select(x => Regex.Match(x.Key, "Projection[.](?<g>.*)[.][XY]").Groups["g"].Value)
     372        .Distinct();
     373      foreach (var str in projStrings) {
     374        projectionComboBox.Items.Add(str);
     375      }
     376    }
     377    #endregion
     378
     379    #region Visualization
     380    #region Solution Visualization
     381    public void UpdateSolutionVisualization() {
     382      if (InvokeRequired) { Invoke((Action)UpdateSolutionVisualization); return;  }
     383      var qualityName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
     384      UpdateSolutionQualityAnalysis(qualityName);
     385      if (similarityComboBox.SelectedIndex >= 0) {
     386        var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
     387        UpdateSolutionDiversityAnalysis(calculator);
     388        UpdateSolutionFdcAnalysis(calculator);
     389        UpdateSolutionLengthScaleAnalysis(calculator);
     390        UpdateSolutionNetworkAnalysis(calculator);
     391      } else {
     392        solutionsDiversityViewHost.Content = null;
     393        solutionsFdcViewHost.Content = null;
     394        solutionsLengthScaleViewHost.Content = null;
     395        solutionsNetworkChart.Series.First().Points.Clear();
     396      }
     397    }
    348398    private void UpdateSolutionQualityAnalysis(string qualityName) {
    349399      var dt = solutionsQualityViewHost.Content as DataTable;
    350400      if (dt == null) {
    351401        dt = QualityDistributionAnalyzer.PrepareTable(qualityName);
     402        dt.VisualProperties.Title = "Quality Distribution";
    352403        solutionsQualityViewHost.Content = dt;
    353404      }
    354       QualityDistributionAnalyzer.UpdateTable(dt, Content.SolutionPool.Where(x => x.Variables.ContainsKey(qualityName)).Select(x => x.Variables[qualityName].Value).OfType<DoubleValue>().Select(x => x.Value));
     405      QualityDistributionAnalyzer.UpdateTable(dt, Content.Problem.Solutions.Select(x => x.Solution).OfType<IScope>().Where(x => x.Variables.ContainsKey(qualityName)).Select(x => x.Variables[qualityName].Value).OfType<DoubleValue>().Select(x => x.Value));
    355406    }
    356407
     
    358409      try {
    359410        solutionsDiversityViewHost.Content = null;
    360         if (Content.SolutionPool == null) return;
    361         var similarities = new double[Content.SolutionPool.Count, Content.SolutionPool.Count];
    362         for (int i = 0; i < Content.SolutionPool.Count; i++) {
    363           for (int j = 0; j < Content.SolutionPool.Count; j++)
    364             similarities[i, j] = calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j]);
     411        var similarities = new double[Content.Problem.Solutions.Count, Content.Problem.Solutions.Count];
     412        for (int i = 0; i < Content.Problem.Solutions.Count; i++) {
     413          for (int j = 0; j < Content.Problem.Solutions.Count; j++)
     414            similarities[i, j] = calculator.CalculateSolutionSimilarity((IScope)Content.Problem.Solutions[i].Solution, (IScope)Content.Problem.Solutions[j].Solution);
    365415        }
    366416        var hm = new HeatMap(similarities, "Solution Similarities", 0.0, 1.0);
     
    372422      try {
    373423        solutionsFdcViewHost.Content = null;
    374         if (Content.SolutionPool == null) return;
    375424        var points = new List<Point2D<double>>();
    376         for (int i = 0; i < Content.SolutionPool.Count; i++) {
    377           for (int j = 0; j < Content.SolutionPool.Count; j++) {
     425        for (int i = 0; i < Content.Problem.Solutions.Count; i++) {
     426          for (int j = 0; j < Content.Problem.Solutions.Count; j++) {
    378427            if (i == j) continue;
    379             var qDiff = Math.Abs(((DoubleValue)Content.SolutionPool[i].Variables[calculator.QualityVariableName].Value).Value - ((DoubleValue)Content.SolutionPool[j].Variables[calculator.QualityVariableName].Value).Value);
    380             points.Add(new Point2D<double>(qDiff, 1.0 - calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j])));
     428            var qDiff = Math.Abs(((DoubleValue)((IScope)Content.Problem.Solutions[i].Solution).Variables[calculator.QualityVariableName].Value).Value
     429              - ((DoubleValue)((IScope)Content.Problem.Solutions[j].Solution).Variables[calculator.QualityVariableName].Value).Value);
     430            points.Add(new Point2D<double>(qDiff, 1.0 - calculator.CalculateSolutionSimilarity((IScope)Content.Problem.Solutions[i].Solution, (IScope)Content.Problem.Solutions[j].Solution)));
    381431          }
    382432        }
    383433        var splot = new ScatterPlot("Fitness-Distance", "");
     434        splot.VisualProperties.XAxisTitle = "Absolute Fitness Difference";
     435        splot.VisualProperties.XAxisMinimumFixedValue = 0.0;
     436        splot.VisualProperties.YAxisTitle = "Solution Distance";
     437        splot.VisualProperties.YAxisMinimumFixedValue = 0.0;
     438        splot.VisualProperties.YAxisMaximumFixedValue = 1.0;
    384439        var row = new ScatterPlotDataRow("Fdc", "", points);
    385440        row.VisualProperties.PointSize = 7;
     
    392447      try {
    393448        solutionsLengthScaleViewHost.Content = null;
    394         if (Content.SolutionPool == null) return;
    395449        var dt = solutionsLengthScaleViewHost.Content as DataTable;
    396450        if (dt == null) {
     
    404458
    405459    private IEnumerable<double> CalculateLengthScale(ISolutionSimilarityCalculator calculator) {
    406       for (int i = 0; i < Content.SolutionPool.Count; i++) {
    407         for (int j = 0; j < Content.SolutionPool.Count; j++) {
     460      for (int i = 0; i < Content.Problem.Solutions.Count; i++) {
     461        for (int j = 0; j < Content.Problem.Solutions.Count; j++) {
    408462          if (i == j) continue;
    409           var sim = calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j]);
     463          var sim = calculator.CalculateSolutionSimilarity((IScope)Content.Problem.Solutions[i].Solution, (IScope)Content.Problem.Solutions[j].Solution);
    410464          if (sim.IsAlmost(0)) continue;
    411           var qDiff = Math.Abs(((DoubleValue)Content.SolutionPool[i].Variables[calculator.QualityVariableName].Value).Value - ((DoubleValue)Content.SolutionPool[j].Variables[calculator.QualityVariableName].Value).Value);
     465          var qDiff = Math.Abs(((DoubleValue)((IScope)Content.Problem.Solutions[i].Solution).Variables[calculator.QualityVariableName].Value).Value
     466            - ((DoubleValue)((IScope)Content.Problem.Solutions[j].Solution).Variables[calculator.QualityVariableName].Value).Value);
    412467          yield return qDiff / sim;
    413468        }
     
    419474        var series = solutionsNetworkChart.Series["SolutionSeries"];
    420475        series.Points.Clear();
    421         var dissimilarities = new DoubleMatrix(Content.SolutionPool.Count, Content.SolutionPool.Count);
    422         for (int i = 0; i < Content.SolutionPool.Count; i++) {
    423           for (int j = 0; j < Content.SolutionPool.Count; j++) {
     476        var dissimilarities = new DoubleMatrix(Content.Problem.Solutions.Count, Content.Problem.Solutions.Count);
     477        for (int i = 0; i < Content.Problem.Solutions.Count; i++) {
     478          for (int j = 0; j < Content.Problem.Solutions.Count; j++) {
    424479            if (i == j) continue;
    425             dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j]);
     480            dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity((IScope)Content.Problem.Solutions[i].Solution, (IScope)Content.Problem.Solutions[j].Solution);
    426481          }
    427482        }
    428483        var coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
    429484        for (var i = 0; i < coords.Rows; i++) {
    430           var quality = ((DoubleValue)Content.SolutionPool[i].Variables[calculator.QualityVariableName].Value).Value;
     485          var quality = ((DoubleValue)((IScope)Content.Problem.Solutions[i].Solution).Variables[calculator.QualityVariableName].Value).Value;
    431486          series.Points.Add(new DataPoint() {
    432             Name = i.ToString(),
     487            Name = (i + 1).ToString(),
    433488            XValue = coords[i, 0],
    434489            YValues = new[] { coords[i, 1], quality },
     
    438493      } catch { }
    439494    }
    440 
    441     private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
    442       SetEnabledStateOfControls();
    443     }
    444 
    445     private void qualityNameComboBox_SelectedIndexChanged(object sender, EventArgs e) {
    446       if (qualityNameComboBox.SelectedIndex < 0) return;
    447       solutionsQualityViewHost.Content = null;
    448       solutionsDiversityViewHost.Content = null;
    449       var qualityName = (string)qualityNameComboBox.SelectedItem;
    450       UpdateSolutionQualityAnalysis(qualityName);
    451       var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
    452       if (calculator != null) calculator.QualityVariableName = qualityName;
    453       UpdateSolutionDiversityAnalysis(calculator);
    454       UpdateSolutionFdcAnalysis(calculator);
    455       UpdateSolutionLengthScaleAnalysis(calculator);
    456       UpdateSolutionNetworkAnalysis(calculator);
    457     }
    458 
    459     private void solutionNameComboBox_SelectedIndexChanged(object sender, EventArgs e) {
    460       var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
    461       if (calculator != null) calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
    462       UpdateSolutionDiversityAnalysis(calculator);
    463       UpdateSolutionFdcAnalysis(calculator);
    464       UpdateSolutionLengthScaleAnalysis(calculator);
    465       UpdateSolutionNetworkAnalysis(calculator);
    466     }
    467 
    468     private void similarityComboBox_SelectedIndexChanged(object sender, EventArgs e) {
    469       var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
    470       if (calculator != null) {
    471         calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
    472         calculator.QualityVariableName = (string)qualityNameComboBox.SelectedItem;
    473       }
    474       UpdateSolutionDiversityAnalysis(calculator);
    475       UpdateSolutionFdcAnalysis(calculator);
    476       UpdateSolutionLengthScaleAnalysis(calculator);
    477       UpdateSolutionNetworkAnalysis(calculator);
    478     }
     495    #endregion
     496    #endregion
    479497  }
    480498}
Note: See TracChangeset for help on using the changeset viewer.