- Timestamp:
- 08/13/15 16:05:08 (9 years ago)
- Location:
- branches/PerformanceComparison
- Files:
-
- 2 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs
r12847 r12860 21 21 22 22 namespace HeuristicLab.OptimizationExpertSystem.Views { 23 partial class ExpertSystem OptimizerView {23 partial class ExpertSystemView { 24 24 /// <summary> 25 25 /// Required designer variable. … … 48 48 this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView(); 49 49 this.okbTabPage = new System.Windows.Forms.TabPage(); 50 this.okbRunCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();51 50 this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); 51 this.algorithmInstancesViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 52 52 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 53 53 this.tabControl.SuspendLayout(); … … 58 58 this.SuspendLayout(); 59 59 // 60 // startButton61 //62 this.startButton.Location = new System.Drawing.Point(0, 440);63 this.startButton.TabIndex = 18;64 this.toolTip.SetToolTip(this.startButton, "Start/Resume Optimizer");65 //66 // executionTimeTextBox67 //68 this.executionTimeTextBox.Location = new System.Drawing.Point(412, 444);69 this.executionTimeTextBox.TabIndex = 23;70 //71 // executionTimeLabel72 //73 this.executionTimeLabel.Location = new System.Drawing.Point(323, 447);74 this.executionTimeLabel.TabIndex = 22;75 //76 // pauseButton77 //78 this.pauseButton.Location = new System.Drawing.Point(30, 440);79 this.pauseButton.TabIndex = 19;80 this.toolTip.SetToolTip(this.pauseButton, "Pause Optimizer");81 //82 // stopButton83 //84 this.stopButton.Location = new System.Drawing.Point(60, 440);85 this.stopButton.TabIndex = 20;86 this.toolTip.SetToolTip(this.stopButton, "Stop Optimizer");87 //88 // resetButton89 //90 this.resetButton.Location = new System.Drawing.Point(90, 440);91 this.resetButton.TabIndex = 21;92 this.toolTip.SetToolTip(this.resetButton, "Reset Optimizer");93 //94 60 // nameTextBox 95 61 // … … 135 101 this.tabControl.Name = "tabControl"; 136 102 this.tabControl.SelectedIndex = 0; 137 this.tabControl.Size = new System.Drawing.Size(546, 3 82);103 this.tabControl.Size = new System.Drawing.Size(546, 361); 138 104 this.tabControl.TabIndex = 17; 139 105 // … … 147 113 this.problemTabPage.Name = "problemTabPage"; 148 114 this.problemTabPage.Padding = new System.Windows.Forms.Padding(3); 149 this.problemTabPage.Size = new System.Drawing.Size(538, 3 56);115 this.problemTabPage.Size = new System.Drawing.Size(538, 335); 150 116 this.problemTabPage.TabIndex = 1; 151 117 this.problemTabPage.Text = "Problem"; … … 166 132 this.problemViewHost.Name = "problemViewHost"; 167 133 this.problemViewHost.ReadOnly = false; 168 this.problemViewHost.Size = new System.Drawing.Size(526, 314);134 this.problemViewHost.Size = new System.Drawing.Size(526, 293); 169 135 this.problemViewHost.TabIndex = 2; 170 136 this.problemViewHost.ViewsLabelVisible = true; … … 201 167 this.algorithmTabPage.Name = "algorithmTabPage"; 202 168 this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3); 203 this.algorithmTabPage.Size = new System.Drawing.Size(538, 3 56);169 this.algorithmTabPage.Size = new System.Drawing.Size(538, 335); 204 170 this.algorithmTabPage.TabIndex = 4; 205 171 this.algorithmTabPage.Text = "Algorithm"; … … 217 183 this.algorithmViewHost.Name = "algorithmViewHost"; 218 184 this.algorithmViewHost.ReadOnly = false; 219 this.algorithmViewHost.Size = new System.Drawing.Size(526, 314);185 this.algorithmViewHost.Size = new System.Drawing.Size(526, 293); 220 186 this.algorithmViewHost.TabIndex = 2; 221 187 this.algorithmViewHost.ViewsLabelVisible = true; … … 249 215 this.runsTabPage.Name = "runsTabPage"; 250 216 this.runsTabPage.Padding = new System.Windows.Forms.Padding(3); 251 this.runsTabPage.Size = new System.Drawing.Size(538, 3 56);217 this.runsTabPage.Size = new System.Drawing.Size(538, 335); 252 218 this.runsTabPage.TabIndex = 3; 253 219 this.runsTabPage.Text = "Runs"; … … 262 228 this.runsView.Name = "runsView"; 263 229 this.runsView.ReadOnly = false; 264 this.runsView.Size = new System.Drawing.Size(532, 3 50);230 this.runsView.Size = new System.Drawing.Size(532, 329); 265 231 this.runsView.TabIndex = 1; 266 232 // 267 233 // okbTabPage 268 234 // 269 this.okbTabPage.Controls.Add(this. okbRunCollectionView);235 this.okbTabPage.Controls.Add(this.algorithmInstancesViewHost); 270 236 this.okbTabPage.Location = new System.Drawing.Point(4, 22); 271 237 this.okbTabPage.Name = "okbTabPage"; 272 238 this.okbTabPage.Padding = new System.Windows.Forms.Padding(3); 273 this.okbTabPage.Size = new System.Drawing.Size(538, 3 56);239 this.okbTabPage.Size = new System.Drawing.Size(538, 335); 274 240 this.okbTabPage.TabIndex = 5; 275 241 this.okbTabPage.Text = "Knowledge Base"; 276 242 this.okbTabPage.UseVisualStyleBackColor = true; 277 //278 // okbRunCollectionView279 //280 this.okbRunCollectionView.Caption = "RunCollection View";281 this.okbRunCollectionView.Content = null;282 this.okbRunCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;283 this.okbRunCollectionView.Location = new System.Drawing.Point(3, 3);284 this.okbRunCollectionView.Name = "okbRunCollectionView";285 this.okbRunCollectionView.ReadOnly = false;286 this.okbRunCollectionView.Size = new System.Drawing.Size(532, 350);287 this.okbRunCollectionView.TabIndex = 0;288 243 // 289 244 // openFileDialog … … 293 248 this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*"; 294 249 this.openFileDialog.Title = "Open Optimizer"; 250 // 251 // algorithmInstancesViewHost 252 // 253 this.algorithmInstancesViewHost.Caption = "View"; 254 this.algorithmInstancesViewHost.Content = null; 255 this.algorithmInstancesViewHost.Dock = System.Windows.Forms.DockStyle.Fill; 256 this.algorithmInstancesViewHost.Enabled = false; 257 this.algorithmInstancesViewHost.Location = new System.Drawing.Point(3, 3); 258 this.algorithmInstancesViewHost.Name = "algorithmInstancesViewHost"; 259 this.algorithmInstancesViewHost.ReadOnly = false; 260 this.algorithmInstancesViewHost.Size = new System.Drawing.Size(532, 329); 261 this.algorithmInstancesViewHost.TabIndex = 0; 262 this.algorithmInstancesViewHost.ViewsLabelVisible = true; 263 this.algorithmInstancesViewHost.ViewType = null; 295 264 // 296 265 // ExpertSystemOptimizerView … … 301 270 this.Controls.Add(this.maxEvaluationsTextBox); 302 271 this.Name = "ExpertSystemOptimizerView"; 303 this.Size = new System.Drawing.Size(549, 4 64);272 this.Size = new System.Drawing.Size(549, 413); 304 273 this.Controls.SetChildIndex(this.maxEvaluationsTextBox, 0); 305 274 this.Controls.SetChildIndex(this.evaluationsLimitabel, 0); … … 308 277 this.Controls.SetChildIndex(this.nameTextBox, 0); 309 278 this.Controls.SetChildIndex(this.infoLabel, 0); 310 this.Controls.SetChildIndex(this.resetButton, 0);311 this.Controls.SetChildIndex(this.stopButton, 0);312 this.Controls.SetChildIndex(this.pauseButton, 0);313 this.Controls.SetChildIndex(this.executionTimeLabel, 0);314 this.Controls.SetChildIndex(this.executionTimeTextBox, 0);315 this.Controls.SetChildIndex(this.startButton, 0);316 279 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 317 280 this.tabControl.ResumeLayout(false); … … 343 306 private System.Windows.Forms.ComboBox suggestedInstancesComboBox; 344 307 private System.Windows.Forms.TabPage okbTabPage; 345 private Optimization.Views.RunCollectionView okbRunCollectionView;308 private MainForm.WindowsForms.ViewHost algorithmInstancesViewHost; 346 309 } 347 310 } -
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs
r12847 r12860 22 22 using System; 23 23 using System.ComponentModel; 24 using System.Globalization;25 using System.Linq;26 24 using System.Windows.Forms; 27 using HeuristicLab.Analysis;28 25 using HeuristicLab.Common; 29 using HeuristicLab.Core;30 26 using HeuristicLab.Core.Views; 31 27 using HeuristicLab.MainForm; 32 28 using HeuristicLab.Optimization; 33 using HeuristicLab.Optimization.Views;34 29 using HeuristicLab.PluginInfrastructure; 35 30 36 31 namespace HeuristicLab.OptimizationExpertSystem.Views { 37 32 [View("Expert-system Optimizer View")] 38 [Content(typeof(ExpertSystem Optimizer), IsDefaultView = true)]39 public partial class ExpertSystem OptimizerView : IOptimizerView {33 [Content(typeof(ExpertSystem), IsDefaultView = true)] 34 public partial class ExpertSystemView : NamedItemView { 40 35 protected TypeSelectorDialog problemTypeSelectorDialog; 41 36 protected virtual bool SuppressEvents { get; set; } 42 37 43 public new ExpertSystem OptimizerContent {44 get { return (ExpertSystem Optimizer)base.Content; }38 public new ExpertSystem Content { 39 get { return (ExpertSystem)base.Content; } 45 40 set { base.Content = value; } 46 41 } 47 42 48 public ExpertSystem OptimizerView() {43 public ExpertSystemView() { 49 44 InitializeComponent(); 50 45 } … … 87 82 algorithmViewHost.Content = null; 88 83 runsView.Content = null; 89 okbRunCollectionView.Content = null;84 algorithmInstancesViewHost.Content = null; 90 85 } else { 91 86 maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); 92 87 problemViewHost.Content = Content.Problem; 93 88 runsView.Content = Content.Runs; 94 okbRunCollectionView.Content = Content.KnowledgeBase;89 algorithmInstancesViewHost.Content = Content.AlgorithmInstances; 95 90 } 96 UpdateSuggestedInstancesCombobox();97 91 } finally { SuppressEvents = false; } 92 UpdateSuggestedInstancesCombobox(); 98 93 } 99 94 … … 107 102 algorithmViewHost.Enabled = Content != null && !ReadOnly && !Locked; 108 103 runsView.Enabled = Content != null; 109 okbRunCollectionView.Enabled = Content != null; 110 } 111 112 protected override void OnClosed(FormClosedEventArgs e) { 113 if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) { 114 //The content must be stopped if no other view showing the content is available 115 var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IOptimizer>(); 116 if (!optimizers.Contains(Content)) { 117 var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers); 118 if (!nestedOptimizers.Contains(Content)) Content.Stop(); 119 } 120 } 121 base.OnClosed(e); 104 algorithmInstancesViewHost.Enabled = Content != null; 122 105 } 123 106 124 107 private void UpdateSuggestedInstancesCombobox() { 125 SuspendRepaint(); 126 try { 127 var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem; 128 var prevNewIndex = -1; 129 suggestedInstancesComboBox.Items.Clear(); 130 if (Content == null) return; 131 132 for (var i = 0; i < Content.SuggestedInstances.Count; i++) { 133 suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]); 134 if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name) 135 prevNewIndex = prevSelection == null ? 0 : i; 136 } 137 if (prevNewIndex >= 0) { 138 suggestedInstancesComboBox.SelectedIndex = prevNewIndex; 139 } 140 } finally { ResumeRepaint(true); } 108 var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem; 109 var prevNewIndex = -1; 110 suggestedInstancesComboBox.Items.Clear(); 111 if (Content == null) return; 112 113 for (var i = 0; i < Content.SuggestedInstances.Count; i++) { 114 suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]); 115 if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name) 116 prevNewIndex = prevSelection == null ? 0 : i; 117 } 118 if (prevNewIndex >= 0) { 119 suggestedInstancesComboBox.SelectedIndex = prevNewIndex; 120 } 141 121 } 142 122 … … 152 132 switch (e.PropertyName) { 153 133 case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break; 154 case "Runs": runsView.Content = Content.Runs; break;155 case "KnowledgeBase": okbRunCollectionView.Content = Content.KnowledgeBase; break;156 134 case "Problem": problemViewHost.Content = Content.Problem; break; 157 135 } … … 160 138 161 139 private void SuggestedInstancesOnChanged(object sender, EventArgs e) { 162 SuppressEvents = true; 163 try { 164 UpdateSuggestedInstancesCombobox(); 165 } finally { SuppressEvents = false; } 140 UpdateSuggestedInstancesCombobox(); 166 141 } 167 142 #endregion … … 189 164 problemTypeSelectorDialog = new TypeSelectorDialog { Caption = "Select Problem" }; 190 165 problemTypeSelectorDialog.TypeSelector.Caption = "Available Problems"; 191 problemTypeSelectorDialog.TypeSelector.Configure(typeof(I Problem)166 problemTypeSelectorDialog.TypeSelector.Configure(typeof(ISingleObjectiveHeuristicOptimizationProblem) 192 167 , showNotInstantiableTypes: false, showGenericTypes: false); 193 168 } 194 169 if (problemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) { 195 170 try { 196 Content.Problem = (I Problem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();171 Content.Problem = (ISingleObjectiveHeuristicOptimizationProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType(); 197 172 } catch (Exception ex) { 198 173 ErrorHandling.ShowErrorDialog(this, ex); … … 210 185 try { 211 186 if (error != null) throw error; 212 var problem = content as I Problem;187 var problem = content as ISingleObjectiveHeuristicOptimizationProblem; 213 188 if (problem == null) { 214 189 var algorithm = content as IAlgorithm; 215 if (algorithm == null || algorithm.Problem == null)190 if (algorithm == null || !(algorithm.Problem is ISingleObjectiveHeuristicOptimizationProblem)) 216 191 MessageBox.Show(this, "The selected file is not a problem, nor an algorithm with a problem.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error); 217 else Content.Problem = algorithm.Problem;192 else Content.Problem = (ISingleObjectiveHeuristicOptimizationProblem)algorithm.Problem; 218 193 } else 219 194 Content.Problem = problem; … … 232 207 private void problemTabPage_DragEnterOver(object sender, DragEventArgs e) { 233 208 e.Effect = DragDropEffects.None; 234 var prob = e.Data.GetData(Constants.DragDropDataFormat) as I Problem;209 var prob = e.Data.GetData(Constants.DragDropDataFormat) as ISingleObjectiveHeuristicOptimizationProblem; 235 210 if (!ReadOnly && prob != null) { 236 211 if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link; // ALT key … … 244 219 private void problemTabPage_DragDrop(object sender, DragEventArgs e) { 245 220 if (e.Effect != DragDropEffects.None) { 246 var prob = e.Data.GetData(Constants.DragDropDataFormat) as I Problem;247 if (e.Effect.HasFlag(DragDropEffects.Copy)) prob = (I Problem)prob.Clone();221 var prob = e.Data.GetData(Constants.DragDropDataFormat) as ISingleObjectiveHeuristicOptimizationProblem; 222 if (e.Effect.HasFlag(DragDropEffects.Copy)) prob = (ISingleObjectiveHeuristicOptimizationProblem)prob.Clone(); 248 223 Content.Problem = prob; 249 224 } -
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj
r12847 r12860 134 134 </ItemGroup> 135 135 <ItemGroup> 136 <Compile Include="ExpertSystem OptimizerView.cs">136 <Compile Include="ExpertSystemView.cs"> 137 137 <SubType>UserControl</SubType> 138 138 </Compile> 139 <Compile Include="ExpertSystem OptimizerView.Designer.cs">140 <DependentUpon>ExpertSystem OptimizerView.cs</DependentUpon>139 <Compile Include="ExpertSystemView.Designer.cs"> 140 <DependentUpon>ExpertSystemView.cs</DependentUpon> 141 141 </Compile> 142 142 <Compile Include="Plugin.cs" /> -
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs
r12847 r12860 24 24 using System.Collections.Generic; 25 25 using System.Drawing; 26 26 using System.Linq; 27 using HeuristicLab.Analysis; 27 28 using HeuristicLab.Core; 28 29 using HeuristicLab.Optimization; … … 30 31 using HeuristicLab.Common; 31 32 using HeuristicLab.Common.Resources; 33 using HeuristicLab.Data; 32 34 33 35 namespace HeuristicLab.OptimizationExpertSystem { 34 [Item("Expert-System Optimizer", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")]36 [Item("Expert-System", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")] 35 37 [StorableClass] 36 [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 11 8)]37 public sealed class ExpertSystem Optimizer : ParameterizedNamedItem, IOptimizer, IStorableContent, INotifyPropertyChanged {38 [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 119)] 39 public sealed class ExpertSystem : NamedItem, IStorableContent, INotifyPropertyChanged { 38 40 39 41 public string Filename { get; set; } … … 51 53 maximumEvaluations = value; 52 54 OnPropertyChanged("MaximumEvaluations"); 55 UpdateSuggestions(); 53 56 } 54 57 } … … 58 61 public RunCollection Runs { 59 62 get { return runs; } 60 private set {61 if (value == null) throw new ArgumentNullException("value");62 if (runs == value) return;63 runs = value;64 OnPropertyChanged("Runs");65 }66 63 } 67 64 68 65 [Storable] 69 private ExecutionState executionState; 70 public ExecutionState ExecutionState { 71 get { return executionState; } 72 private set { 73 if (executionState != value) { 74 executionState = value; 75 OnPropertyChanged("ExecutionState"); 76 OnExecutionStateChanged(); 77 OnItemImageChanged(); 78 } 79 } 66 private ItemList<IAlgorithm> algorithmInstances; 67 public ItemList<IAlgorithm> AlgorithmInstances { 68 get { return algorithmInstances; } 80 69 } 81 70 82 71 [Storable] 83 private TimeSpan executionTime; 84 public TimeSpan ExecutionTime { 85 get { return executionTime; } 86 private set { 87 if (executionTime == value) return; 88 executionTime = value; 89 OnPropertyChanged("ExecutionTime"); 90 OnExecutionTimeChanged(); 91 } 92 } 93 94 [Storable] 95 private RunCollection knowledgeBase; 96 public RunCollection KnowledgeBase { 97 get { return knowledgeBase; } 98 private set { 99 if (value == null) throw new ArgumentNullException("value"); 100 if (knowledgeBase == value) return; 101 knowledgeBase = value; 102 OnPropertyChanged("KnowledgeBase"); 103 } 104 } 105 106 [Storable] 107 private IProblem problem; 108 public IProblem Problem { 72 private ISingleObjectiveHeuristicOptimizationProblem problem; 73 public ISingleObjectiveHeuristicOptimizationProblem Problem { 109 74 get { return problem; } 110 75 set { … … 112 77 problem = value; 113 78 OnPropertyChanged("Problem"); 79 UpdateSuggestions(); 114 80 } 115 81 } … … 122 88 } 123 89 124 p ublic IEnumerable<IOptimizer> NestedOptimizers{125 get { return SuggestedInstances; }90 private bool Maximization { 91 get { return Problem != null && ((IValueParameter<BoolValue>)Problem.MaximizationParameter).Value.Value; } 126 92 } 127 93 128 94 [StorableConstructor] 129 private ExpertSystem Optimizer(bool deserializing) : base(deserializing) { }130 private ExpertSystem Optimizer(ExpertSystemOptimizeroriginal, Cloner cloner)95 private ExpertSystem(bool deserializing) : base(deserializing) { } 96 private ExpertSystem(ExpertSystem original, Cloner cloner) 131 97 : base(original, cloner) { 132 98 runs = cloner.Clone(original.runs); 133 executionState = original.executionState; 134 executionTime = original.executionTime; 135 knowledgeBase = cloner.Clone(original.knowledgeBase); 99 algorithmInstances = cloner.Clone(original.algorithmInstances); 136 100 problem = cloner.Clone(original.problem); 137 101 suggestedInstances = cloner.Clone(original.suggestedInstances); 138 102 readOnlySuggestedInstances = suggestedInstances.AsReadOnly(); 103 RegisterEventHandlers(); 139 104 } 140 public ExpertSystemOptimizer() { 141 Runs = new RunCollection(); 142 KnowledgeBase = new RunCollection(); 105 public ExpertSystem() { 106 Name = ItemName; 107 Description = ItemDescription; 108 runs = new RunCollection(); 109 algorithmInstances = new ItemList<IAlgorithm>(); 143 110 suggestedInstances = new ItemList<IAlgorithm>(); 144 111 readOnlySuggestedInstances = suggestedInstances.AsReadOnly(); 145 ExecutionState = ExecutionState.Stopped; 146 ExecutionTime = TimeSpan.Zero; 112 RegisterEventHandlers(); 147 113 } 148 114 149 115 public override IDeepCloneable Clone(Cloner cloner) { 150 return new ExpertSystem Optimizer(this, cloner);116 return new ExpertSystem(this, cloner); 151 117 } 152 118 … … 154 120 private void AfterDeserialization() { 155 121 readOnlySuggestedInstances = suggestedInstances.AsReadOnly(); 122 RegisterEventHandlers(); 156 123 } 157 124 158 public void Prepare() { 159 Prepare(false); 125 private void RegisterEventHandlers() { 126 runs.CollectionReset += InformationChanged; 127 runs.ItemsAdded += InformationChanged; 128 runs.ItemsRemoved += InformationChanged; 129 runs.Reset += InformationChanged; 130 runs.UpdateOfRunsInProgressChanged += InformationChanged; 131 algorithmInstances.CollectionReset += InformationChanged; 132 algorithmInstances.ItemsAdded += InformationChanged; 133 algorithmInstances.ItemsRemoved += InformationChanged; 160 134 } 161 135 162 public void Prepare(bool clearRuns) { 163 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped)) 164 throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState)); 165 if (clearRuns) Runs.Clear(); 166 ExecutionTime = TimeSpan.Zero; 167 ExecutionState = ExecutionState.Prepared; 168 OnPrepared(); 136 private void InformationChanged(object sender, EventArgs e) { 137 var runCollection = sender as RunCollection; 138 if (runCollection != null && runCollection.UpdateOfRunsInProgress) return; 139 UpdateSuggestions(); 169 140 } 170 141 171 public void Start() { 172 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 173 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); 174 ExecutionState = ExecutionState.Started; 175 OnStarted(); 176 } 142 private void UpdateSuggestions() { 143 if (Problem == null) return; 144 var instances = new SortedList<double, IAlgorithm>(); 145 foreach (var instance in algorithmInstances) { 146 var relevantRuns = instance.Runs.Where(x => ((StringValue)x.Parameters["Problem Type"]).Value == Problem.GetType().Name); 147 var avgQuality = 0.0; 148 var counter = 0; 149 foreach (var run in relevantRuns) { 150 var performanceGraph = ((IndexedDataTable<double>)run.Results["QualityPerEvaluations"]); 151 try { 152 avgQuality += performanceGraph.Rows.First().Values.TakeWhile(x => x.Item1 < MaximumEvaluations).Last().Item2; 153 counter++; 154 } catch { continue; } 155 } 156 avgQuality /= counter; 157 instances.Add(avgQuality, instance); 158 } 177 159 178 public void Pause() { 179 if (ExecutionState != ExecutionState.Started) 180 throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState)); 181 ExecutionState = ExecutionState.Paused; 182 OnPaused(); 183 } 184 185 186 public void Stop() { 187 if ((ExecutionState != ExecutionState.Started) && (ExecutionState != ExecutionState.Paused)) 188 throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState)); 189 ExecutionState = ExecutionState.Stopped; 190 OnStopped(); 191 } 192 193 public event EventHandler Prepared; 194 private void OnPrepared() { 195 var handler = Prepared; 196 if (handler != null) handler(this, EventArgs.Empty); 197 } 198 199 public event EventHandler Started; 200 private void OnStarted() { 201 var handler = Started; 202 if (handler != null) handler(this, EventArgs.Empty); 203 } 204 205 public event EventHandler Paused; 206 private void OnPaused() { 207 var handler = Paused; 208 if (handler != null) handler(this, EventArgs.Empty); 209 } 210 211 public event EventHandler Stopped; 212 private void OnStopped() { 213 var handler = Stopped; 214 if (handler != null) handler(this, EventArgs.Empty); 215 } 216 217 public event EventHandler<EventArgs<Exception>> ExceptionOccurred; 218 private void OnExceptionOccurred(Exception e) { 219 var handler = ExceptionOccurred; 220 if (handler != null) handler(this, new EventArgs<Exception>(e)); 221 } 222 223 public event EventHandler ExecutionStateChanged; 224 private void OnExecutionStateChanged() { 225 var handler = ExecutionStateChanged; 226 if (handler != null) handler(this, EventArgs.Empty); 227 } 228 229 public event EventHandler ExecutionTimeChanged; 230 private void OnExecutionTimeChanged() { 231 var handler = ExecutionTimeChanged; 232 if (handler != null) handler(this, EventArgs.Empty); 160 suggestedInstances.Clear(); 161 var instanceLadder = instances.Select(x => x.Value); 162 suggestedInstances.AddRange(Maximization ? instanceLadder.Reverse() : instanceLadder); 233 163 } 234 164 -
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj
r12842 r12860 112 112 </ItemGroup> 113 113 <ItemGroup> 114 <Compile Include="ExpertSystem Optimizer.cs" />114 <Compile Include="ExpertSystem.cs" /> 115 115 <Compile Include="Plugin.cs" /> 116 116 <None Include="Properties\AssemblyInfo.cs.frame" />
Note: See TracChangeset
for help on using the changeset viewer.