Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherView.cs @ 2377

Last change on this file since 2377 was 2377, checked in by gkronber, 15 years ago
  • Implemented cloning and persistence in data-modeling algorithms.
  • Fixed bugs in CEDMA controller.

#754

File size: 9.7 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Drawing;
5using System.Data;
6using System.Linq;
7using System.Text;
8using System.Windows.Forms;
9using HeuristicLab.Core;
10using System.Diagnostics;
11
12namespace HeuristicLab.CEDMA.Server {
13  public partial class DispatcherView : ViewBase {
14    private SimpleDispatcher dispatcher;
15    private ProblemSpecification selectedSpec;
16    public DispatcherView(SimpleDispatcher dispatcher)
17      : base() {
18      this.dispatcher = dispatcher;
19      InitializeComponent();
20      dispatcher.Changed += (sender, args) => UpdateControls();
21      UpdateControls();
22      this.inputVariableList.CheckOnClick = true;
23    }
24
25    protected override void UpdateControls() {
26      if (InvokeRequired) {
27        Invoke((Action)UpdateControls);
28      } else {
29        base.UpdateControls();
30        algorithmsListBox.Items.Clear();
31        targetVariableList.Items.Clear();
32        inputVariableList.Items.Clear();
33
34        foreach (string targetVar in dispatcher.TargetVariables) {
35          targetVariableList.Items.Add(targetVar, false);
36        }
37
38        foreach (string inputVar in dispatcher.Variables) {
39          inputVariableList.Items.Add(inputVar, false);
40        }
41
42        targetVariableList.ClearSelected();
43        inputVariableList.Enabled = false;
44      }
45    }
46
47    private void targetVariableList_ItemCheck(object sender, ItemCheckEventArgs e) {
48      if (e.NewValue == CheckState.Checked) {
49        dispatcher.EnableTargetVariable((string)targetVariableList.Items[e.Index]);
50      } else if (e.NewValue == CheckState.Unchecked) {
51        dispatcher.DisableTargetVariable((string)targetVariableList.Items[e.Index]);
52      }
53    }
54
55    private void inputVariableList_ItemCheck(object sender, ItemCheckEventArgs e) {
56      if (e.NewValue == CheckState.Checked) {
57        selectedSpec.AddInputVariable((string)inputVariableList.Items[e.Index]);
58      } else if (e.NewValue == CheckState.Unchecked) {
59        selectedSpec.RemoveInputVariable((string)inputVariableList.Items[e.Index]);
60      }
61    }
62
63    private void targetVariableList_SelectedValueChanged(object sender, EventArgs e) {
64      string selectedTarget = (string)targetVariableList.SelectedItem;
65      selectedSpec = dispatcher.GetProblemSpecification(selectedTarget);
66      UpdateInputVariableList();
67      UpdateAlgorithms();
68    }
69
70    private void UpdateAlgorithms() {
71      learningTaskGroupBox.Enabled = true;
72      algorithmsListBox.Enabled = true;
73      switch (selectedSpec.LearningTask) {
74        case LearningTask.Classification: {
75            classificationRadioButton.Checked = true;
76            break;
77          }
78        case LearningTask.Regression: {
79            regressionRadioButton.Checked = true;
80            break;
81          }
82        case LearningTask.TimeSeries: {
83            timeSeriesRadioButton.Checked = true;
84            break;
85          }
86        default: { break; }
87      }
88      algorithmsListBox.Items.Clear();
89      foreach (HeuristicLab.Modeling.IAlgorithm algo in dispatcher.GetAlgorithms(selectedSpec.LearningTask)) {
90        algorithmsListBox.Items.Add(algo, dispatcher.GetAllowedAlgorithms(selectedSpec.TargetVariable).Contains(algo));
91      }
92      UpdateAlgorithmConfiguration();
93    }
94
95    private void UpdateAlgorithmConfiguration() {
96      partitioningGroupBox.Enabled = true;
97      trainingSamplesStartTextBox.Text = selectedSpec.TrainingSamplesStart.ToString();
98      trainingSamplesEndTextBox.Text = selectedSpec.TrainingSamplesEnd.ToString();
99      validationSamplesStartTextBox.Text = selectedSpec.ValidationSamplesStart.ToString();
100      validationSamplesEndTextBox.Text = selectedSpec.ValidationSamplesEnd.ToString();
101      testSamplesStartTextBox.Text = selectedSpec.TestSamplesStart.ToString();
102      testSamplesEndTextBox.Text = selectedSpec.TestSamplesEnd.ToString();
103      minTimeOffsetTextBox.Text = selectedSpec.MinTimeOffset.ToString();
104      maxTimeOffsetTextBox.Text = selectedSpec.MaxTimeOffset.ToString();
105      autoregressiveCheckBox.Checked = selectedSpec.AutoRegressive;
106    }
107
108    private void UpdateInputVariableList() {
109      inputVariableList.Items.Clear();
110      var activatedInputVariables = selectedSpec.InputVariables;
111      foreach (string inputVar in dispatcher.Variables) {
112        inputVariableList.Items.Add(inputVar, activatedInputVariables.Contains(inputVar));
113      }
114      inputVariableList.Enabled = true;
115    }
116
117    private void setAllButton_Click(object sender, EventArgs e) {
118      foreach (string targetVar in dispatcher.TargetVariables) {
119        ProblemSpecification spec = dispatcher.GetProblemSpecification(targetVar);
120        for (int i = 0; i < inputVariableList.Items.Count; i++) {
121          if (inputVariableList.GetItemChecked(i)) {
122            spec.AddInputVariable((string)inputVariableList.Items[i]);
123          } else {
124            spec.RemoveInputVariable((string)inputVariableList.Items[i]);
125          }
126        }
127      }
128    }
129
130    private void algorithmsListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
131      if (e.NewValue == CheckState.Checked) {
132        dispatcher.EnableAlgorithm(selectedSpec.TargetVariable, (HeuristicLab.Modeling.IAlgorithm)algorithmsListBox.Items[e.Index]);
133      } else if (e.NewValue == CheckState.Unchecked) {
134        dispatcher.DisableAlgorithm(selectedSpec.TargetVariable, (HeuristicLab.Modeling.IAlgorithm)algorithmsListBox.Items[e.Index]);
135      }
136    }
137
138    private void radioButton_CheckedChanged(object sender, EventArgs e) {
139      minTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
140      minTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
141      maxTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
142      maxTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
143      autoregressiveCheckBox.Enabled = timeSeriesRadioButton.Checked;
144      autoregressiveLabel.Enabled = timeSeriesRadioButton.Checked;
145      if (timeSeriesRadioButton.Checked) selectedSpec.LearningTask = LearningTask.TimeSeries;
146      else if (classificationRadioButton.Checked) selectedSpec.LearningTask = LearningTask.Classification;
147      else if (regressionRadioButton.Checked) selectedSpec.LearningTask = LearningTask.Regression;
148      var allowedAlgorithms = dispatcher.GetAllowedAlgorithms(selectedSpec.TargetVariable);
149      foreach (var algo in allowedAlgorithms) {
150        dispatcher.DisableAlgorithm(selectedSpec.TargetVariable, algo);
151      }
152      UpdateAlgorithms();
153    }
154
155    private void timeOffsetTextBox_Validating(object sender, CancelEventArgs e) {
156      int min, max;
157      e.Cancel = !int.TryParse(minTimeOffsetTextBox.Text, out min);
158      e.Cancel = !int.TryParse(maxTimeOffsetTextBox.Text, out max);
159      e.Cancel = min > max;
160    }
161
162    private void timeOffsetTextBox_Validated(object sender, EventArgs e) {
163      selectedSpec.MinTimeOffset = int.Parse(minTimeOffsetTextBox.Text);
164      selectedSpec.MaxTimeOffset = int.Parse(maxTimeOffsetTextBox.Text);
165    }
166
167    private void samplesTextBox_Validated(object sender, EventArgs e) {
168      selectedSpec.TrainingSamplesStart = int.Parse(trainingSamplesStartTextBox.Text);
169      selectedSpec.TrainingSamplesEnd = int.Parse(trainingSamplesEndTextBox.Text);
170      selectedSpec.ValidationSamplesStart = int.Parse(validationSamplesStartTextBox.Text);
171      selectedSpec.ValidationSamplesEnd = int.Parse(validationSamplesEndTextBox.Text);
172      selectedSpec.TestSamplesStart = int.Parse(testSamplesStartTextBox.Text);
173      selectedSpec.TestSamplesEnd = int.Parse(testSamplesEndTextBox.Text);
174    }
175
176    private void ColorSamplesTextBoxes(Color color) {
177      trainingSamplesStartTextBox.BackColor = color;
178      trainingSamplesEndTextBox.BackColor = color;
179      validationSamplesStartTextBox.BackColor = color;
180      validationSamplesEndTextBox.BackColor = color;
181      testSamplesStartTextBox.BackColor = color;
182      testSamplesEndTextBox.BackColor = color;
183    }
184
185    private void samplesTextBox_Validating(object sender, CancelEventArgs e) {
186      try {
187        int trainingStart = int.Parse(trainingSamplesStartTextBox.Text);
188        int trainingEnd = int.Parse(trainingSamplesEndTextBox.Text);
189        int validationStart = int.Parse(validationSamplesStartTextBox.Text);
190        int validationEnd = int.Parse(validationSamplesEndTextBox.Text);
191        int testStart = int.Parse(testSamplesStartTextBox.Text);
192        int testEnd = int.Parse(testSamplesEndTextBox.Text);
193        if (trainingStart < 0 || validationStart < 0 || testStart < 0 ||
194          trainingEnd >= selectedSpec.Dataset.Rows || validationEnd >= selectedSpec.Dataset.Rows || testEnd >= selectedSpec.Dataset.Rows ||
195          trainingStart >= trainingEnd ||
196          validationStart >= validationEnd ||
197          testStart >= testEnd ||
198          IsOverlapping(trainingStart, trainingEnd, validationStart, validationEnd) ||
199          IsOverlapping(trainingStart, trainingEnd, testStart, testEnd) ||
200          IsOverlapping(validationStart, validationEnd, testStart, testEnd))
201          ColorSamplesTextBoxes(Color.Red);
202        else
203          ColorSamplesTextBoxes(Color.White);
204      }
205      catch (FormatException) {
206        ColorSamplesTextBoxes(Color.Red);
207      }
208    }
209
210    private void autoregressiveCheckBox_CheckedChanged(object sender, EventArgs e) {
211      selectedSpec.AutoRegressive = autoregressiveCheckBox.Checked;
212    }
213
214    private bool IsOverlapping(int x0, int y0, int x1, int y1) {
215      Trace.Assert(x0 <= y0 && x1 <= y1);
216      int tmp;
217      // make sure that x0,y0 is the left interval
218      if (x1 < x0) {
219        tmp = x1;
220        x1 = x0;
221        x0 = tmp;
222        tmp = y1;
223        y1 = y0;
224        y0 = tmp;
225      }
226      return y0 > x1;
227    }
228  }
229}
Note: See TracBrowser for help on using the repository browser.