Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs @ 5958

Last change on this file since 5958 was 5958, checked in by cneumuel, 13 years ago

#1233

  • initial port of HiveEngine
File size: 7.9 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 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.Drawing;
25using HeuristicLab.Common;
26using HeuristicLab.Core;
27using HeuristicLab.Hive;
28using HeuristicLab.Optimization;
29using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
30
31namespace HeuristicLab.Clients.Hive.Jobs {
32  [Item("Optimizer Job", "Represents Job which executes a IOptimizer object.")]
33  [StorableClass]
34  public class OptimizerJob : AbstractJob {
35    public override bool IsParallelizable {
36      get { return this.Optimizer is Optimization.Experiment || this.Optimizer is BatchRun; }
37    }
38
39    [Storable]
40    protected IOptimizer optimizer;
41    public IOptimizer Optimizer {
42      get { return optimizer; }
43      set {
44        if (value != optimizer) {
45          if (optimizer != null) DeregisterOptimizerEvents();
46          optimizer = value;
47          if (optimizer != null) RegisterOptimizerEvents();
48          OnOptimizerChanged();
49        }
50      }
51    }
52
53    [Storable]
54    private int indexInParentOptimizerList = -1;
55    public int IndexInParentOptimizerList {
56      get { return indexInParentOptimizerList; }
57      set { this.indexInParentOptimizerList = value; }
58    }
59
60    public OptimizerJob() : base() {
61     
62    }
63    public OptimizerJob(IOptimizer optimizer)
64      : this() {
65      this.Optimizer = optimizer;
66
67      if (optimizer is Optimization.Experiment) {
68        this.ComputeInParallel = true;
69      } else if (optimizer is Optimization.BatchRun) {
70        this.ComputeInParallel = false;
71      } else {
72        this.ComputeInParallel = false;
73      }
74    }
75    [StorableConstructor]
76    protected OptimizerJob(bool deserializing) { }
77    protected OptimizerJob(OptimizerJob original, Cloner cloner)
78      : base(original, cloner) {
79      this.Optimizer = cloner.Clone(original.Optimizer);
80      this.IndexInParentOptimizerList = original.IndexInParentOptimizerList;
81      this.CollectChildJobs = original.CollectChildJobs;
82      this.RegisterOptimizerEvents();
83    }
84    public override IDeepCloneable Clone(Cloner cloner) {
85      return new OptimizerJob(this, cloner);
86    }
87
88    [StorableHook(HookType.AfterDeserialization)]
89    protected virtual void AfterDeserialization() {
90      RegisterOptimizerEvents();
91    }
92
93    /// <summary>
94    /// Casts the Optimizer to an Experiment. Returns null if cast was not successfull.
95    /// </summary>
96    public Optimization.Experiment OptimizerAsExperiment {
97      get { return Optimizer as Optimization.Experiment; }
98    }
99
100    /// <summary>
101    /// Casts the Optimizer to an BatchRun. Returns null if cast was not successfull.
102    /// </summary>
103    public Optimization.BatchRun OptimizerAsBatchRun {
104      get { return Optimizer as Optimization.BatchRun; }
105    }
106
107    #region IJob Members
108
109    public override ExecutionState ExecutionState {
110      get { return optimizer.ExecutionState; }
111    }
112
113    public override TimeSpan ExecutionTime {
114      get { return optimizer.ExecutionTime; }
115    }
116
117    public override void Prepare() {
118      optimizer.Prepare();
119    }
120
121    public override void Start() {
122      if ((optimizer is Optimization.Experiment && OptimizerAsExperiment.Optimizers.Count == 0) || // experiment would not fire OnStopped if it has 0 optimizers
123          (optimizer is Optimization.BatchRun && OptimizerAsBatchRun.Optimizer == null)) { // batchrun would not fire OnStopped if algorithm == null
124        OnJobStopped();
125      } else {
126        optimizer.Start();
127      }
128    }
129
130    public override void Pause() {
131      optimizer.Pause();
132    }
133
134    public override void Stop() {
135      optimizer.Stop();
136    }
137
138    public override void Resume(IEnumerable<IJob> childJobs) {
139      OnJobStopped();
140    }
141    #endregion
142
143    #region Optimizer Events
144    protected virtual void RegisterOptimizerEvents() {
145      optimizer.Stopped += new EventHandler(optimizer_Stopped);
146      optimizer.Paused += new EventHandler(optimizer_Paused);
147      optimizer.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
148      optimizer.DescriptionChanged += new EventHandler(optimizer_DescriptionChanged);
149      optimizer.ItemImageChanged += new EventHandler(optimizer_ItemImageChanged);
150      optimizer.NameChanged += new EventHandler(optimizer_NameChanged);
151      optimizer.NameChanging += new EventHandler<CancelEventArgs<string>>(optimizer_NameChanging);
152      optimizer.ToStringChanged += new EventHandler(optimizer_ToStringChanged);
153    }
154
155    protected virtual void DeregisterOptimizerEvents() {
156      optimizer.Stopped -= new EventHandler(optimizer_Stopped);
157      optimizer.Paused -= new EventHandler(optimizer_Paused);
158      optimizer.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
159      optimizer.DescriptionChanged -= new EventHandler(optimizer_DescriptionChanged);
160      optimizer.ItemImageChanged -= new EventHandler(optimizer_ItemImageChanged);
161      optimizer.NameChanged -= new EventHandler(optimizer_NameChanged);
162      optimizer.NameChanging -= new EventHandler<CancelEventArgs<string>>(optimizer_NameChanging);
163      optimizer.ToStringChanged -= new EventHandler(optimizer_ToStringChanged);
164    }
165
166    protected void optimizer_ToStringChanged(object sender, EventArgs e) {
167      this.OnToStringChanged();
168    }
169
170    protected void optimizer_NameChanging(object sender, CancelEventArgs<string> e) {
171      this.OnNameChanging(e.Value, e.Cancel);
172    }
173
174    protected void optimizer_NameChanged(object sender, EventArgs e) {
175      this.OnNameChanged();
176    }
177
178    protected void optimizer_ItemImageChanged(object sender, EventArgs e) {
179      this.OnItemImageChanged();
180    }
181
182    protected void optimizer_DescriptionChanged(object sender, EventArgs e) {
183      this.OnDescriptionChanged();
184    }
185
186    protected virtual void optimizer_ExceptionOccurred(object sender, EventArgs<Exception> e) {
187      OnJobFailed(e);
188    }
189
190    protected virtual void optimizer_Stopped(object sender, EventArgs e) {
191      OnJobStopped();
192    }
193
194    protected virtual void optimizer_Paused(object sender, EventArgs e) {
195      OnJobPaused();
196    }
197    #endregion
198
199    #region INamedItem Members
200
201    public override bool CanChangeDescription {
202      get { return optimizer.CanChangeDescription; }
203    }
204
205    public override bool CanChangeName {
206      get { return optimizer.CanChangeName; }
207    }
208
209    public override string Description {
210      get { return optimizer.Description; }
211      set { optimizer.Description = value; }
212    }
213
214    public override string Name {
215      get { return optimizer.Name; }
216      set { optimizer.Name = value; }
217    }
218    #endregion
219   
220    #region IItem Members
221
222    public override string ItemDescription {
223      get { return optimizer.ItemDescription; }
224    }
225
226    public override Image ItemImage {
227      get { return optimizer.ItemImage; }
228    }
229
230    public override string ItemName {
231      get { return optimizer.ItemName; }
232    }
233
234    public override Version ItemVersion {
235      get { return optimizer.ItemVersion; }
236    }
237    #endregion
238  }
239}
Note: See TracBrowser for help on using the repository browser.