Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.ES/ESEditor.cs @ 1405

Last change on this file since 1405 was 1222, checked in by abeham, 16 years ago

Updated ES to uniformly distributed initialization of strategy vector #495
Fixed Plus/Comma display bug on load #491
Removed some unnecessary references
Added necessary reference to RealVector

File size: 10.5 KB
RevLine 
[71]1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.ComponentModel;
25using System.Drawing;
26using System.Data;
27using System.Text;
28using System.Windows.Forms;
29using HeuristicLab.PluginInfrastructure;
30using HeuristicLab.Core;
31
32namespace HeuristicLab.ES {
[896]33  /// <summary>
34  /// Class for visual representation of an <see cref="ES"/>.
35  /// </summary>
[71]36  public partial class ESEditor : EditorBase {
37    private ChooseOperatorDialog chooseOperatorDialog;
38
[896]39    /// <summary>
40    /// Gets or sets the evolution strategy to display.
41    /// </summary>
42    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.
43    /// No own data storage present.</remarks>
[71]44    public ES ES {
45      get { return (ES)Item; }
46      set { base.Item = value; }
47    }
48
[896]49    /// <summary>
50    /// Initializes a new instance of <see cref="ESEditor"/>.
51    /// </summary>
[71]52    public ESEditor() {
53      InitializeComponent();
54    }
[896]55    /// <summary>
56    /// Initializes a new instance of <see cref="ESEditor"/> with the given <paramref name="es"/>.
57    /// </summary>
58    /// <param name="es">The evolution strategy to display.</param>
[71]59    public ESEditor(ES es)
60      : this() {
61      ES = es;
62    }
63
[896]64    /// <summary>
65    /// Removes all event handlers from the underlying <see cref="ES"/>.
66    /// </summary>
67    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="EditorBase"/>.</remarks>
[71]68    protected override void RemoveItemEvents() {
69      ES.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
70      ES.Engine.Finished -= new EventHandler(Engine_Finished);
[78]71      ES.Changed -= new EventHandler(ES_Changed);
[71]72      scopeView.Scope = null;
73      base.RemoveItemEvents();
74    }
[896]75    /// <summary>
76    /// Adds event handlers to the underlying <see cref="ES"/>.
77    /// </summary>
78    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="EditorBase"/>.</remarks>
[71]79    protected override void AddItemEvents() {
80      base.AddItemEvents();
81      ES.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
82      ES.Engine.Finished += new EventHandler(Engine_Finished);
[78]83      ES.Changed += new EventHandler(ES_Changed);
[71]84      SetDataBinding();
85      scopeView.Scope = ES.Engine.GlobalScope;
86    }
87
[78]88    void ES_Changed(object sender, EventArgs e) {
89      // neither Refresh() nor Update() work
[98]90      randomSeedTextBox.Text = ES.Seed.ToString();
[78]91      muTextBox.Text = ES.Mu.ToString();
[86]92      rhoTextBox.Text = ES.Rho.ToString();
[78]93      lambdaTextBox.Text = ES.Lambda.ToString();
[97]94      learningRateTextBox.Text = ES.LearningRate.ToString();
[1091]95      generalLearningRateTextBox.Text = ES.GeneralLearningRate.ToString();
[78]96    }
97
[896]98    /// <summary>
99    /// Updates all controls with the latest data of the model.
100    /// </summary>
101    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
[71]102    protected override void UpdateControls() {
103      base.UpdateControls();
104      if (ES == null) {
105        tabControl.Enabled = false;
106      } else {
107        tabControl.Enabled = true;
108        problemInitializationTextBox.Text = ES.ProblemInjector.GetType().Name;
109        solutionGenerationTextBox.Text = ES.SolutionGenerator.GetType().Name;
110        mutationTextBox.Text = ES.Mutator.GetType().Name;
111        evaluationTextBox.Text = ES.Evaluator.GetType().Name;
[86]112        recombinationTextBox.Text = ES.Recombinator.GetType().Name;
[1222]113        plusRadioButton.Checked = ES.PlusNotation;
114        commaRadioButton.Checked = !ES.PlusNotation;
[71]115      }
116    }
117
118    private void SetDataBinding() {
119      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", ES, "SetSeedRandomly");
120      randomSeedTextBox.DataBindings.Add("Text", ES, "Seed");
121      muTextBox.DataBindings.Add("Text", ES, "Mu");
[86]122      rhoTextBox.DataBindings.Add("Text", ES, "Rho");
[71]123      lambdaTextBox.DataBindings.Add("Text", ES, "Lambda");
124      maximumGenerationsTextBox.DataBindings.Add("Text", ES, "MaximumGenerations");
[1222]125      shakingFactorsLowerBoundTextBox.DataBindings.Add("Text", ES, "ShakingFactorsMin");
126      shakingFactorsUpperBoundTextBox.DataBindings.Add("Text", ES, "ShakingFactorsMax");
127      problemDimensionTextBox.DataBindings.Add("Text", ES, "ProblemDimension");
[1091]128      generalLearningRateTextBox.DataBindings.Add("Text", ES, "GeneralLearningRate");
[97]129      learningRateTextBox.DataBindings.Add("Text", ES, "LearningRate");
[71]130    }
131
132    #region Button Events
133    private void viewProblemInitializationButton_Click(object sender, EventArgs e) {
134      IView view = ES.ProblemInjector.CreateView();
135      if (view != null)
136        PluginManager.ControlManager.ShowControl(view);
137    }
138    private void viewSolutionGenerationButton_Click(object sender, EventArgs e) {
139      IView view = ES.SolutionGenerator.CreateView();
140      if (view != null)
141        PluginManager.ControlManager.ShowControl(view);
142    }
143    private void viewMutationButton_Click(object sender, EventArgs e) {
144      IView view = ES.Mutator.CreateView();
145      if (view != null)
146        PluginManager.ControlManager.ShowControl(view);
147    }
148    private void viewEvaluationButton_Click(object sender, EventArgs e) {
149      IView view = ES.Evaluator.CreateView();
150      if (view != null)
151        PluginManager.ControlManager.ShowControl(view);
152    }
[86]153    private void viewRecombinationButton_Click(object sender, EventArgs e) {
154      IView view = ES.Recombinator.CreateView();
155      if (view != null)
156        PluginManager.ControlManager.ShowControl(view);
157    }
[71]158    private void setProblemInitializationButton_Click(object sender, EventArgs e) {
159      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
160      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
161        ES.ProblemInjector = chooseOperatorDialog.Operator;
162        problemInitializationTextBox.Text = ES.ProblemInjector.GetType().Name;
163      }
164    }
165    private void setSolutionGenerationButton_Click(object sender, EventArgs e) {
166      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
167      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
168        ES.SolutionGenerator= chooseOperatorDialog.Operator;
169        solutionGenerationTextBox.Text = ES.SolutionGenerator.GetType().Name;
170      }
171    }
172    private void setMutationButton_Click(object sender, EventArgs e) {
173      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
174      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
175        ES.Mutator = chooseOperatorDialog.Operator;
176        mutationTextBox.Text = ES.Mutator.GetType().Name;
177      }
178    }
179    private void setEvaluationButton_Click(object sender, EventArgs e) {
180      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
181      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
182        ES.Evaluator = chooseOperatorDialog.Operator;
183        evaluationTextBox.Text = ES.Evaluator.GetType().Name;
184      }
185    }
[86]186    private void setRecombinationButton_Click(object sender, EventArgs e) {
187      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
188      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
189        ES.Recombinator = chooseOperatorDialog.Operator;
190        recombinationTextBox.Text = ES.Recombinator.GetType().Name;
191      }
192    }
[71]193    private void executeButton_Click(object sender, EventArgs e) {
194      executeButton.Enabled = false;
195      abortButton.Enabled = true;
196      ES.Engine.Execute();
197    }
198    private void abortButton_Click(object sender, EventArgs e) {
199      ES.Engine.Abort();
200    }
201    private void resetButton_Click(object sender, EventArgs e) {
202      ES.Engine.Reset();
203    }
204    private void cloneEngineButton_Click(object sender, EventArgs e) {
205      IEngine clone = (IEngine)ES.Engine.Clone();
206      IEditor editor = ((IEditable)clone).CreateEditor();
207      PluginManager.ControlManager.ShowControl(editor);
208    }
209    #endregion
210
211    #region Engine Events
212    private delegate void OnExceptionEventDelegate(object sender, ExceptionEventArgs e);
213    private void Engine_ExceptionOccurred(object sender, ExceptionEventArgs e) {
214      if (InvokeRequired)
215        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
216      else
217        Auxiliary.ShowErrorMessageBox(e.Exception);
218    }
219    private void Engine_Finished(object sender, EventArgs e) {
220      scopeView.Refresh();
[81]221      if (executeButton.InvokeRequired) {
222        executeButton.Invoke(new MethodInvoker(EnableExecute));
223      } else {
224        executeButton.Enabled = true;
225        abortButton.Enabled = false;
226      }
227    }
228    private void EnableExecute() {
[71]229      executeButton.Enabled = true;
230      abortButton.Enabled = false;
231    }
232    #endregion
[81]233
[87]234    #region RadioButton Events
235    private void plusRadioButton_CheckedChanged(object sender, EventArgs e) {
236      if (plusRadioButton.Checked) ES.PlusNotation = true;
237    }
238
239    private void commaRadioButton_CheckedChanged(object sender, EventArgs e) {
240      if (commaRadioButton.Checked) ES.PlusNotation = false;
241    }
242    #endregion
[1091]243
[1222]244    private void problemDimensionTextBox_Validated(object sender, EventArgs e) {
245      UpdateLearningRates();
[1091]246      Refresh();
247    }
248
[1112]249    private void UpdateLearningRates() {
250      if (ES != null) {
251        int dimension = int.Parse(problemDimensionTextBox.Text);
252        ES.GeneralLearningRate = 1 / Math.Sqrt(2 * dimension);
253        ES.LearningRate = 1 / Math.Sqrt(2 * Math.Sqrt(dimension));
254      }
255    }
[71]256  }
257}
Note: See TracBrowser for help on using the repository browser.