#region License Information
/* HeuristicLab
* Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
*
* This file is part of HeuristicLab.
*
* HeuristicLab is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeuristicLab is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HeuristicLab. If not, see .
*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using HeuristicLab.Algorithms.DataAnalysis;
using HeuristicLab.Common;
using HeuristicLab.MainForm;
using HeuristicLab.Optimization;
namespace HeuristicLab.Problems.DataAnalysis.Views {
[View("Error Characteristics Curve")]
[Content(typeof(IRegressionSolution))]
public partial class RegressionSolutionErrorCharacteristicsCurveView : DataAnalysisSolutionEvaluationView {
protected const string TrainingSamples = "Training";
protected const string TestSamples = "Test";
protected const string AllSamples = "All Samples";
public RegressionSolutionErrorCharacteristicsCurveView()
: base() {
InitializeComponent();
cmbSamples.Items.Add(TrainingSamples);
cmbSamples.Items.Add(TestSamples);
cmbSamples.Items.Add(AllSamples);
cmbSamples.SelectedIndex = 0;
residualComboBox.SelectedIndex = 0;
chart.CustomizeAllChartAreas();
chart.ChartAreas[0].AxisX.Title = residualComboBox.SelectedItem.ToString();
chart.ChartAreas[0].AxisX.Minimum = 0.0;
chart.ChartAreas[0].AxisX.Maximum = 0.0;
chart.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
chart.ChartAreas[0].CursorX.Interval = 0.01;
chart.ChartAreas[0].AxisY.Title = "Ratio of Residuals";
chart.ChartAreas[0].AxisY.Minimum = 0.0;
chart.ChartAreas[0].AxisY.Maximum = 1.0;
chart.ChartAreas[0].AxisY.MajorGrid.Interval = 0.2;
chart.ChartAreas[0].CursorY.Interval = 0.01;
}
// the view holds one regression solution as content but also contains several other regression solutions for comparison
// the following invariants must hold
// (Solutions.IsEmpty && Content == null) ||
// (Solutions[0] == Content && Solutions.All(s => s.ProblemData.TargetVariable == Content.TargetVariable))
public new IRegressionSolution Content {
get { return (IRegressionSolution)base.Content; }
set { base.Content = value; }
}
private readonly IList solutions = new List();
public IEnumerable Solutions {
get { return solutions.AsEnumerable(); }
}
public IRegressionProblemData ProblemData {
get {
if (Content == null) return null;
return Content.ProblemData;
}
}
protected override void RegisterContentEvents() {
base.RegisterContentEvents();
Content.ModelChanged += new EventHandler(Content_ModelChanged);
Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
}
protected override void DeregisterContentEvents() {
base.DeregisterContentEvents();
Content.ModelChanged -= new EventHandler(Content_ModelChanged);
Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
}
protected virtual void Content_ModelChanged(object sender, EventArgs e) {
if (InvokeRequired) Invoke((Action