Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/11/16 17:34:50 (8 years ago)
Author:
abeham
Message:

#2457: worked on problem instance mapping

Location:
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views
Files:
3 edited

Legend:

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

    r13722 r13751  
    271271          Label = run.Name
    272272        };
    273         instancesSeries.Points.Add(dataPoint);
    274       }
    275 
    276       var curPoint = Content.ProjectCurrentInstance(projection);
    277       if (curPoint != null) {
    278         var dp = new DataPoint(curPoint.Item1, curPoint.Item2) {
    279           Label = Content.Problem.Problem.Name
    280         };
    281         currentInstanceSeries.Points.Add(dp);
     273        if (!Content.IsCurrentInstance(run)) instancesSeries.Points.Add(dataPoint);
     274        else currentInstanceSeries.Points.Add(dataPoint);
    282275      }
    283276    }
  • branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.Designer.cs

    r13722 r13751  
    5050      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
    5151      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
    52       this.projectionLabel = new System.Windows.Forms.Label();
    53       this.projectionComboBox = new System.Windows.Forms.ComboBox();
    5452      this.problemInstancesTabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
    5553      this.mapTabPage = new System.Windows.Forms.TabPage();
    56       this.instanceMapChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
    5754      this.instancesTabPage = new System.Windows.Forms.TabPage();
    5855      this.problemInstancesView = new HeuristicLab.MainForm.WindowsForms.ViewHost();
     56      this.mapSplitContainer = new System.Windows.Forms.SplitContainer();
     57      this.invPropCheckBox = new System.Windows.Forms.CheckBox();
     58      this.sizeLabel = new System.Windows.Forms.Label();
     59      this.projectionLabel = new System.Windows.Forms.Label();
     60      this.instanceMapChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
     61      this.sizeComboBox = new System.Windows.Forms.ComboBox();
     62      this.projectionComboBox = new System.Windows.Forms.ComboBox();
     63      this.showCharacteristicsCheckBox = new System.Windows.Forms.CheckBox();
    5964      this.problemInstancesTabControl.SuspendLayout();
    6065      this.mapTabPage.SuspendLayout();
     66      this.instancesTabPage.SuspendLayout();
     67      ((System.ComponentModel.ISupportInitialize)(this.mapSplitContainer)).BeginInit();
     68      this.mapSplitContainer.Panel1.SuspendLayout();
     69      this.mapSplitContainer.SuspendLayout();
    6170      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
    62       this.instancesTabPage.SuspendLayout();
    6371      this.SuspendLayout();
    64       //
    65       // projectionLabel
    66       //
    67       this.projectionLabel.AutoSize = true;
    68       this.projectionLabel.Location = new System.Drawing.Point(6, 9);
    69       this.projectionLabel.Name = "projectionLabel";
    70       this.projectionLabel.Size = new System.Drawing.Size(57, 13);
    71       this.projectionLabel.TabIndex = 10;
    72       this.projectionLabel.Text = "Projection:";
    73       //
    74       // projectionComboBox
    75       //
    76       this.projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
    77       this.projectionComboBox.FormattingEnabled = true;
    78       this.projectionComboBox.Location = new System.Drawing.Point(69, 6);
    79       this.projectionComboBox.Name = "projectionComboBox";
    80       this.projectionComboBox.Size = new System.Drawing.Size(158, 21);
    81       this.projectionComboBox.TabIndex = 9;
    82       this.projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.ProjectionComboBoxOnSelectedIndexChanged);
    8372      //
    8473      // problemInstancesTabControl
     
    9887      // mapTabPage
    9988      //
    100       this.mapTabPage.Controls.Add(this.projectionLabel);
    101       this.mapTabPage.Controls.Add(this.instanceMapChart);
    102       this.mapTabPage.Controls.Add(this.projectionComboBox);
     89      this.mapTabPage.Controls.Add(this.mapSplitContainer);
    10390      this.mapTabPage.Location = new System.Drawing.Point(4, 22);
    10491      this.mapTabPage.Name = "mapTabPage";
     
    10895      this.mapTabPage.Text = "Map";
    10996      this.mapTabPage.UseVisualStyleBackColor = true;
     97      //
     98      // instancesTabPage
     99      //
     100      this.instancesTabPage.Controls.Add(this.problemInstancesView);
     101      this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
     102      this.instancesTabPage.Name = "instancesTabPage";
     103      this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
     104      this.instancesTabPage.Size = new System.Drawing.Size(992, 734);
     105      this.instancesTabPage.TabIndex = 0;
     106      this.instancesTabPage.Text = "Instances";
     107      this.instancesTabPage.UseVisualStyleBackColor = true;
     108      //
     109      // problemInstancesView
     110      //
     111      this.problemInstancesView.Caption = "View";
     112      this.problemInstancesView.Content = null;
     113      this.problemInstancesView.Dock = System.Windows.Forms.DockStyle.Fill;
     114      this.problemInstancesView.Enabled = false;
     115      this.problemInstancesView.Location = new System.Drawing.Point(3, 3);
     116      this.problemInstancesView.Name = "problemInstancesView";
     117      this.problemInstancesView.ReadOnly = false;
     118      this.problemInstancesView.Size = new System.Drawing.Size(986, 728);
     119      this.problemInstancesView.TabIndex = 0;
     120      this.problemInstancesView.ViewsLabelVisible = true;
     121      this.problemInstancesView.ViewType = null;
     122      //
     123      // mapSplitContainer
     124      //
     125      this.mapSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
     126      this.mapSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
     127      this.mapSplitContainer.Location = new System.Drawing.Point(3, 3);
     128      this.mapSplitContainer.Name = "mapSplitContainer";
     129      //
     130      // mapSplitContainer.Panel1
     131      //
     132      this.mapSplitContainer.Panel1.Controls.Add(this.showCharacteristicsCheckBox);
     133      this.mapSplitContainer.Panel1.Controls.Add(this.invPropCheckBox);
     134      this.mapSplitContainer.Panel1.Controls.Add(this.sizeLabel);
     135      this.mapSplitContainer.Panel1.Controls.Add(this.projectionLabel);
     136      this.mapSplitContainer.Panel1.Controls.Add(this.instanceMapChart);
     137      this.mapSplitContainer.Panel1.Controls.Add(this.sizeComboBox);
     138      this.mapSplitContainer.Panel1.Controls.Add(this.projectionComboBox);
     139      this.mapSplitContainer.Panel1.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0);
     140      this.mapSplitContainer.Size = new System.Drawing.Size(986, 728);
     141      this.mapSplitContainer.SplitterDistance = 847;
     142      this.mapSplitContainer.TabIndex = 12;
     143      //
     144      // invPropCheckBox
     145      //
     146      this.invPropCheckBox.AutoSize = true;
     147      this.invPropCheckBox.Checked = true;
     148      this.invPropCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
     149      this.invPropCheckBox.Location = new System.Drawing.Point(579, 12);
     150      this.invPropCheckBox.Name = "invPropCheckBox";
     151      this.invPropCheckBox.Size = new System.Drawing.Size(118, 17);
     152      this.invPropCheckBox.TabIndex = 17;
     153      this.invPropCheckBox.Text = "inverse proportional";
     154      this.invPropCheckBox.UseVisualStyleBackColor = true;
     155      //
     156      // sizeLabel
     157      //
     158      this.sizeLabel.AutoSize = true;
     159      this.sizeLabel.Location = new System.Drawing.Point(264, 12);
     160      this.sizeLabel.Name = "sizeLabel";
     161      this.sizeLabel.Size = new System.Drawing.Size(30, 13);
     162      this.sizeLabel.TabIndex = 15;
     163      this.sizeLabel.Text = "Size:";
     164      //
     165      // projectionLabel
     166      //
     167      this.projectionLabel.AutoSize = true;
     168      this.projectionLabel.Location = new System.Drawing.Point(2, 12);
     169      this.projectionLabel.Name = "projectionLabel";
     170      this.projectionLabel.Size = new System.Drawing.Size(57, 13);
     171      this.projectionLabel.TabIndex = 16;
     172      this.projectionLabel.Text = "Projection:";
    110173      //
    111174      // instanceMapChart
     
    140203      this.instanceMapChart.Series.Add(series1);
    141204      this.instanceMapChart.Series.Add(series2);
    142       this.instanceMapChart.Size = new System.Drawing.Size(986, 698);
    143       this.instanceMapChart.TabIndex = 0;
    144       //
    145       // instancesTabPage
    146       //
    147       this.instancesTabPage.Controls.Add(this.problemInstancesView);
    148       this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
    149       this.instancesTabPage.Name = "instancesTabPage";
    150       this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
    151       this.instancesTabPage.Size = new System.Drawing.Size(1044, 757);
    152       this.instancesTabPage.TabIndex = 0;
    153       this.instancesTabPage.Text = "Instances";
    154       this.instancesTabPage.UseVisualStyleBackColor = true;
    155       //
    156       // problemInstancesView
    157       //
    158       this.problemInstancesView.Caption = "View";
    159       this.problemInstancesView.Content = null;
    160       this.problemInstancesView.Dock = System.Windows.Forms.DockStyle.Fill;
    161       this.problemInstancesView.Enabled = false;
    162       this.problemInstancesView.Location = new System.Drawing.Point(3, 3);
    163       this.problemInstancesView.Name = "problemInstancesView";
    164       this.problemInstancesView.ReadOnly = false;
    165       this.problemInstancesView.Size = new System.Drawing.Size(1038, 751);
    166       this.problemInstancesView.TabIndex = 0;
    167       this.problemInstancesView.ViewsLabelVisible = true;
    168       this.problemInstancesView.ViewType = null;
     205      this.instanceMapChart.Size = new System.Drawing.Size(841, 692);
     206      this.instanceMapChart.TabIndex = 12;
     207      //
     208      // sizeComboBox
     209      //
     210      this.sizeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
     211      this.sizeComboBox.FormattingEnabled = true;
     212      this.sizeComboBox.Location = new System.Drawing.Point(300, 6);
     213      this.sizeComboBox.Name = "sizeComboBox";
     214      this.sizeComboBox.Size = new System.Drawing.Size(273, 21);
     215      this.sizeComboBox.TabIndex = 13;
     216      //
     217      // projectionComboBox
     218      //
     219      this.projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
     220      this.projectionComboBox.FormattingEnabled = true;
     221      this.projectionComboBox.Location = new System.Drawing.Point(65, 6);
     222      this.projectionComboBox.Name = "projectionComboBox";
     223      this.projectionComboBox.Size = new System.Drawing.Size(158, 21);
     224      this.projectionComboBox.TabIndex = 14;
     225      //
     226      // showCharacteristicsCheckBox
     227      //
     228      this.showCharacteristicsCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
     229      this.showCharacteristicsCheckBox.Appearance = System.Windows.Forms.Appearance.Button;
     230      this.showCharacteristicsCheckBox.Location = new System.Drawing.Point(818, 4);
     231      this.showCharacteristicsCheckBox.Name = "showCharacteristicsCheckBox";
     232      this.showCharacteristicsCheckBox.Size = new System.Drawing.Size(26, 23);
     233      this.showCharacteristicsCheckBox.TabIndex = 18;
     234      this.showCharacteristicsCheckBox.Text = "Detail";
     235      this.showCharacteristicsCheckBox.UseVisualStyleBackColor = true;
    169236      //
    170237      // UnderstandingProblemInstanceView
     
    175242      this.Name = "UnderstandingProblemInstanceView";
    176243      this.Size = new System.Drawing.Size(1000, 760);
    177       this.Controls.SetChildIndex(this.problemInstancesTabControl, 0);
    178244      this.problemInstancesTabControl.ResumeLayout(false);
    179245      this.mapTabPage.ResumeLayout(false);
    180       this.mapTabPage.PerformLayout();
     246      this.instancesTabPage.ResumeLayout(false);
     247      this.mapSplitContainer.Panel1.ResumeLayout(false);
     248      this.mapSplitContainer.Panel1.PerformLayout();
     249      ((System.ComponentModel.ISupportInitialize)(this.mapSplitContainer)).EndInit();
     250      this.mapSplitContainer.ResumeLayout(false);
    181251      ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
    182       this.instancesTabPage.ResumeLayout(false);
    183252      this.ResumeLayout(false);
    184253
     
    187256    #endregion
    188257
    189     private System.Windows.Forms.Label projectionLabel;
    190     private System.Windows.Forms.ComboBox projectionComboBox;
    191258    private MainForm.WindowsForms.DragOverTabControl problemInstancesTabControl;
    192259    private System.Windows.Forms.TabPage mapTabPage;
    193     private Visualization.ChartControlsExtensions.EnhancedChart instanceMapChart;
    194260    private System.Windows.Forms.TabPage instancesTabPage;
    195261    private MainForm.WindowsForms.ViewHost problemInstancesView;
     262    private System.Windows.Forms.SplitContainer mapSplitContainer;
     263    private System.Windows.Forms.CheckBox showCharacteristicsCheckBox;
     264    private System.Windows.Forms.CheckBox invPropCheckBox;
     265    private System.Windows.Forms.Label sizeLabel;
     266    private System.Windows.Forms.Label projectionLabel;
     267    private Visualization.ChartControlsExtensions.EnhancedChart instanceMapChart;
     268    private System.Windows.Forms.ComboBox sizeComboBox;
     269    private System.Windows.Forms.ComboBox projectionComboBox;
    196270  }
    197271}
  • branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingProblemInstanceView.cs

    r13722 r13751  
    2020#endregion
    2121
     22using HeuristicLab.Core;
    2223using HeuristicLab.MainForm;
    2324using HeuristicLab.OptimizationExpertSystem.Common;
     
    3132  [View("Understanding Problem Instance")]
    3233  [Content(typeof(KnowledgeCenter), IsDefaultView = false)]
    33   public partial class UnderstandingProblemInstanceView : KnowledgeCenterViewBase {
     34  public sealed partial class UnderstandingProblemInstanceView : KnowledgeCenterViewBase {
     35    private bool SuppressEvents { get; set; }
     36
    3437    public UnderstandingProblemInstanceView() {
    3538      InitializeComponent();
     
    4548        problemInstancesView.Content = Content.ProblemInstances;
    4649        UpdateProjectionComboBox();
     50        UpdateSizeComboBox();
    4751      }
    4852    }
     
    5862      if (Content.ProblemInstances.UpdateOfRunsInProgress) return;
    5963      UpdateProjectionComboBox();
     64      UpdateSizeComboBox();
     65      UpdateProjection();
     66    }
     67    #endregion
     68
     69    private void UpdateProjectionComboBox() {
     70      try {
     71        SuppressEvents = true;
     72        var selected = projectionComboBox.SelectedIndex >= 0 ? (string)projectionComboBox.SelectedItem : null;
     73        projectionComboBox.Items.Clear();
     74        foreach (var str in GetProjections()) {
     75          projectionComboBox.Items.Add(str);
     76          if (selected == str) projectionComboBox.SelectedItem = str;
     77        }
     78        if (selected == null && projectionComboBox.Items.Count > 0)
     79          projectionComboBox.SelectedIndex = 0;
     80      } finally { SuppressEvents = false; }
    6081    }
    6182
    62     protected override void OnDownloadEnded() {
    63       base.OnDownloadEnded();
    64       UpdateProjectionComboBox();
     83    private void UpdateSizeComboBox() {
     84      try {
     85        SuppressEvents = true;
     86        var selected = sizeComboBox.SelectedIndex >= 0 ? (string)sizeComboBox.SelectedItem : null;
     87        sizeComboBox.Items.Clear();
     88        sizeComboBox.Items.Add(string.Empty);
     89        foreach (var str in Content.ProblemInstances.ResultNames.Where(x => !(x.StartsWith("Projection.") && (x.EndsWith(".X") || x.EndsWith(".Y"))))) {
     90          sizeComboBox.Items.Add(str);
     91          if (selected == str) sizeComboBox.SelectedItem = str;
     92        }
     93        if (selected == null && sizeComboBox.Items.Count > 0)
     94          sizeComboBox.SelectedIndex = 0;
     95      } finally { SuppressEvents = false; }
    6596    }
    66     #endregion
    6797   
    68     public IEnumerable<string> GetProjections() {
     98    private IEnumerable<string> GetProjections() {
    6999      return Content.ProblemInstances
    70100        .SelectMany(x => x.Results.Where(y => Regex.IsMatch(y.Key, "^Projection[.].*[.][XY]$")))
     
    73103    }
    74104
    75     public void ProjectProblemInstances(Series instancesSeries, Series currentInstanceSeries, string projection) {
     105    private void UpdateProjection() {
     106      if (InvokeRequired) { Invoke((Action)UpdateProjection); return; }
     107
     108      var instancesSeries = instanceMapChart.Series["InstancesSeries"];
     109      var currentInstanceSeries = instanceMapChart.Series["CurrentInstanceSeries"];
     110
     111      if (projectionComboBox.SelectedIndex < 0) {
     112        instancesSeries.Points.Clear();
     113        currentInstanceSeries.Points.Clear();
     114        return;
     115      }
     116
     117      var projection = (string)projectionComboBox.SelectedItem;
     118      var size = sizeComboBox.SelectedIndex >= 0 ? (string)sizeComboBox.SelectedItem : string.Empty;
     119
     120      DoProjectProblemInstances(instancesSeries, currentInstanceSeries, projection, size, invPropCheckBox.Checked);
     121    }
     122
     123    private void DoProjectProblemInstances(Series instancesSeries, Series currentInstanceSeries, string projection, string size, bool invProp) {
    76124      instancesSeries.Points.Clear();
    77125      currentInstanceSeries.Points.Clear();
    78126
     127      double maxSize = 0, minSize = 0;
     128      if (!string.IsNullOrEmpty(size)) {
     129        var sizes = Content.ProblemInstances.Where(x => x.Results.ContainsKey(size)).Select(x => x.Results[size]).OfType<Data.DoubleValue>().Where(x => !double.IsNaN(x.Value)).ToList();
     130        if (sizes.Count > 0) {
     131          maxSize = sizes.Max(x => x.Value);
     132          minSize = sizes.Min(x => x.Value);
     133        }
     134      }
    79135      foreach (var run in Content.ProblemInstances) {
    80136        var xKey = "Projection." + projection + ".X";
     
    85141        var y = ((Data.DoubleValue)run.Results[yKey]).Value;
    86142        var dataPoint = new DataPoint(x, y) {
    87           Label = run.Name
     143          Label = run.Name,
    88144        };
    89         instancesSeries.Points.Add(dataPoint);
    90       }
     145        IItem item;
     146        if (maxSize > minSize && run.Results.TryGetValue(size, out item)) {
     147          var dItem = item as Data.DoubleValue;
     148          if (dItem != null) {
     149            if (double.IsNaN(dItem.Value))
     150              dataPoint.MarkerSize = 1;
     151            else {
     152              if (invProp) dataPoint.MarkerSize = (int)Math.Round(5 + 15 * (maxSize - dItem.Value) / (maxSize - minSize));
     153              else dataPoint.MarkerSize = (int)Math.Round(5 + 15 * (dItem.Value - minSize) / (maxSize - minSize));
     154            }
     155          }
     156        } else if (maxSize == minSize) {
     157          dataPoint.MarkerSize = instancesSeries.MarkerSize;
     158        } else dataPoint.MarkerSize = 1;
    91159
    92       var curPoint = Content.ProjectCurrentInstance(projection);
    93       if (curPoint != null) {
    94         var dp = new DataPoint(curPoint.Item1, curPoint.Item2) {
    95           Label = Content.Problem.Problem.Name
    96         };
    97         currentInstanceSeries.Points.Add(dp);
     160        if (Content.IsCurrentInstance(run)) currentInstanceSeries.Points.Add(dataPoint);
     161        else instancesSeries.Points.Add(dataPoint);
    98162      }
    99163    }
    100164
     165    #region Control Event Handlers
    101166    private void ProjectionComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
    102       if (InvokeRequired) { Invoke((Action<object, EventArgs>)ProjectionComboBoxOnSelectedIndexChanged, sender, e); return; }
    103       if (projectionComboBox.SelectedIndex < 0) return;
    104       var projection = (string)projectionComboBox.SelectedItem;
    105       var instancesSeries = instanceMapChart.Series["InstancesSeries"];
    106       var currentInstanceSeries = instanceMapChart.Series["CurrentInstanceSeries"];
    107 
    108       ProjectProblemInstances(instancesSeries, currentInstanceSeries, projection);
     167      UpdateProjection();
    109168    }
    110169
    111     private void UpdateProjectionComboBox() {
    112       projectionComboBox.Items.Clear();
    113       foreach (var str in GetProjections()) {
    114         projectionComboBox.Items.Add(str);
    115       }
    116       if (projectionComboBox.Items.Count > 0)
    117         projectionComboBox.SelectedIndex = 0;
     170    private void SizeComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
     171      UpdateProjection();
    118172    }
     173
     174    private void InvPropCheckBoxOnCheckedChanged(object sender, EventArgs e) {
     175      UpdateProjection();
     176    }
     177    #endregion
    119178  }
    120179}
Note: See TracChangeset for help on using the changeset viewer.