Changeset 5300 for trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
- Timestamp:
- 01/15/11 02:34:08 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
r5287 r5300 31 31 namespace HeuristicLab.Optimization { 32 32 /// <summary> 33 /// A run in which an algorithmis executed a given number of times.33 /// A run in which an optimizer is executed a given number of times. 34 34 /// </summary> 35 [Item("Batch Run", "A run in which an algorithmis executed a given number of times.")]35 [Item("Batch Run", "A run in which an optimizer is executed a given number of times.")] 36 36 [Creatable("Testing & Analysis")] 37 37 [StorableClass] … … 66 66 public TimeSpan ExecutionTime { 67 67 get { 68 if (( Algorithm != null) && (Algorithm.ExecutionState != ExecutionState.Stopped))69 return executionTime + Algorithm.ExecutionTime;68 if ((Optimizer != null) && (Optimizer.ExecutionState != ExecutionState.Stopped)) 69 return executionTime + Optimizer.ExecutionTime; 70 70 else 71 71 return executionTime; … … 78 78 79 79 [Storable] 80 private I Algorithm algorithm;81 public I Algorithm Algorithm{82 get { return algorithm; }80 private IOptimizer optimizer; 81 public IOptimizer Optimizer { 82 get { return optimizer; } 83 83 set { 84 if ( algorithm!= value) {85 if ( algorithm!= null) {86 Deregister AlgorithmEvents();87 IEnumerable<IRun> runs = algorithm.Runs;88 algorithm = null; //necessary to avoid removing the runs from the old algorithm84 if (optimizer != value) { 85 if (optimizer != null) { 86 DeregisterOptimizerEvents(); 87 IEnumerable<IRun> runs = optimizer.Runs; 88 optimizer = null; //necessary to avoid removing the runs from the old optimizer 89 89 Runs.RemoveRange(runs); 90 90 } 91 algorithm= value;92 if ( algorithm!= null) {93 Register AlgorithmEvents();94 Runs.AddRange( algorithm.Runs);91 optimizer = value; 92 if (optimizer != null) { 93 RegisterOptimizerEvents(); 94 Runs.AddRange(optimizer.Runs); 95 95 } 96 On AlgorithmChanged();96 OnOptimizerChanged(); 97 97 Prepare(); 98 98 } 99 99 } 100 100 } 101 // BackwardsCompatibility3.3 102 #region Backwards compatible code (remove with 3.4) 103 [Storable] 104 private IAlgorithm algorithm { 105 get { return null; } 106 set { optimizer = value; } 107 } 108 #endregion 101 109 102 110 [Storable] … … 108 116 repetitions = value; 109 117 OnRepetitionsChanged(); 110 if (( Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped))118 if ((Optimizer != null) && (Optimizer.ExecutionState == ExecutionState.Stopped)) 111 119 Prepare(); 112 120 } … … 176 184 executionState = original.executionState; 177 185 executionTime = original.executionTime; 178 algorithm = cloner.Clone(original.algorithm);186 optimizer = cloner.Clone(original.optimizer); 179 187 repetitions = original.repetitions; 180 188 repetitionsCounter = original.repetitionsCounter; … … 189 197 190 198 private void Initialize() { 191 if ( algorithm != null) RegisterAlgorithmEvents();199 if (optimizer != null) RegisterOptimizerEvents(); 192 200 if (runs != null) RegisterRunsEvents(); 193 201 } … … 199 207 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped)) 200 208 throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState)); 201 if ( Algorithm!= null) {209 if (Optimizer != null) { 202 210 repetitionsCounter = 0; 203 211 if (clearRuns) runs.Clear(); 204 Algorithm.Prepare(clearRuns);212 Optimizer.Prepare(clearRuns); 205 213 } 206 214 } … … 208 216 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 209 217 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); 210 if ( Algorithm != null) Algorithm.Start();218 if (Optimizer != null) Optimizer.Start(); 211 219 } 212 220 public void Pause() { 213 221 if (ExecutionState != ExecutionState.Started) 214 222 throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState)); 215 if (( Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Started))216 Algorithm.Pause();223 if ((Optimizer != null) && (Optimizer.ExecutionState == ExecutionState.Started)) 224 Optimizer.Pause(); 217 225 } 218 226 public void Stop() { … … 220 228 throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState)); 221 229 stopPending = true; 222 if (( Algorithm!= null) &&223 (( Algorithm.ExecutionState == ExecutionState.Started) || (Algorithm.ExecutionState == ExecutionState.Paused)))224 Algorithm.Stop();230 if ((Optimizer != null) && 231 ((Optimizer.ExecutionState == ExecutionState.Started) || (Optimizer.ExecutionState == ExecutionState.Paused))) 232 Optimizer.Stop(); 225 233 } 226 234 … … 236 244 if (handler != null) handler(this, EventArgs.Empty); 237 245 } 238 public event EventHandler AlgorithmChanged;239 private void On AlgorithmChanged() {240 EventHandler handler = AlgorithmChanged;246 public event EventHandler OptimizerChanged; 247 private void OnOptimizerChanged() { 248 EventHandler handler = OptimizerChanged; 241 249 if (handler != null) handler(this, EventArgs.Empty); 242 250 } … … 276 284 } 277 285 278 private void Register AlgorithmEvents() {279 algorithm.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);280 algorithm.ExecutionTimeChanged += new EventHandler(Algorithm_ExecutionTimeChanged);281 algorithm.Paused += new EventHandler(Algorithm_Paused);282 algorithm.Prepared += new EventHandler(Algorithm_Prepared);283 algorithm.Started += new EventHandler(Algorithm_Started);284 algorithm.Stopped += new EventHandler(Algorithm_Stopped);285 algorithm.Runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_CollectionReset);286 algorithm.Runs.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);287 algorithm.Runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsRemoved);288 } 289 private void Deregister AlgorithmEvents() {290 algorithm.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);291 algorithm.ExecutionTimeChanged -= new EventHandler(Algorithm_ExecutionTimeChanged);292 algorithm.Paused -= new EventHandler(Algorithm_Paused);293 algorithm.Prepared -= new EventHandler(Algorithm_Prepared);294 algorithm.Started -= new EventHandler(Algorithm_Started);295 algorithm.Stopped -= new EventHandler(Algorithm_Stopped);296 algorithm.Runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_CollectionReset);297 algorithm.Runs.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);298 algorithm.Runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsRemoved);299 } 300 private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {286 private void RegisterOptimizerEvents() { 287 optimizer.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Optimizer_ExceptionOccurred); 288 optimizer.ExecutionTimeChanged += new EventHandler(Optimizer_ExecutionTimeChanged); 289 optimizer.Paused += new EventHandler(Optimizer_Paused); 290 optimizer.Prepared += new EventHandler(Optimizer_Prepared); 291 optimizer.Started += new EventHandler(Optimizer_Started); 292 optimizer.Stopped += new EventHandler(Optimizer_Stopped); 293 optimizer.Runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_CollectionReset); 294 optimizer.Runs.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsAdded); 295 optimizer.Runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsRemoved); 296 } 297 private void DeregisterOptimizerEvents() { 298 optimizer.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Optimizer_ExceptionOccurred); 299 optimizer.ExecutionTimeChanged -= new EventHandler(Optimizer_ExecutionTimeChanged); 300 optimizer.Paused -= new EventHandler(Optimizer_Paused); 301 optimizer.Prepared -= new EventHandler(Optimizer_Prepared); 302 optimizer.Started -= new EventHandler(Optimizer_Started); 303 optimizer.Stopped -= new EventHandler(Optimizer_Stopped); 304 optimizer.Runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_CollectionReset); 305 optimizer.Runs.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsAdded); 306 optimizer.Runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsRemoved); 307 } 308 private void Optimizer_ExceptionOccurred(object sender, EventArgs<Exception> e) { 301 309 OnExceptionOccurred(e.Value); 302 310 } 303 private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {311 private void Optimizer_ExecutionTimeChanged(object sender, EventArgs e) { 304 312 OnExecutionTimeChanged(); 305 313 } 306 private void Algorithm_Paused(object sender, EventArgs e) {314 private void Optimizer_Paused(object sender, EventArgs e) { 307 315 OnPaused(); 308 316 } 309 private void Algorithm_Prepared(object sender, EventArgs e) {317 private void Optimizer_Prepared(object sender, EventArgs e) { 310 318 if ((ExecutionState == ExecutionState.Paused) || (ExecutionState == ExecutionState.Stopped)) 311 319 OnPrepared(); 312 320 } 313 private void Algorithm_Started(object sender, EventArgs e) {321 private void Optimizer_Started(object sender, EventArgs e) { 314 322 stopPending = false; 315 323 if (ExecutionState != ExecutionState.Started) 316 324 OnStarted(); 317 325 } 318 private void Algorithm_Stopped(object sender, EventArgs e) {326 private void Optimizer_Stopped(object sender, EventArgs e) { 319 327 repetitionsCounter++; 320 328 321 329 if (!stopPending && (repetitionsCounter < repetitions)) { 322 Algorithm.Prepare();323 Algorithm.Start();330 Optimizer.Prepare(); 331 Optimizer.Start(); 324 332 } else { 325 333 OnStopped(); 326 334 } 327 335 } 328 private void Algorithm_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {336 private void Optimizer_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) { 329 337 Runs.RemoveRange(e.OldItems); 330 338 Runs.AddRange(e.Items); 331 339 } 332 private void Algorithm_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {340 private void Optimizer_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) { 333 341 Runs.AddRange(e.Items); 334 342 } 335 private void Algorithm_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {343 private void Optimizer_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) { 336 344 Runs.RemoveRange(e.Items); 337 345 } … … 355 363 if (executionTime != null) ExecutionTime -= executionTime.Value; 356 364 } 357 if ( Algorithm != null) Algorithm.Runs.RemoveRange(e.OldItems);365 if (Optimizer != null) Optimizer.Runs.RemoveRange(e.OldItems); 358 366 foreach (IRun run in e.Items) { 359 367 IItem item; … … 378 386 if (executionTime != null) ExecutionTime -= executionTime.Value; 379 387 } 380 if ( Algorithm != null) Algorithm.Runs.RemoveRange(e.Items);388 if (Optimizer != null) Optimizer.Runs.RemoveRange(e.Items); 381 389 } 382 390 #endregion
Note: See TracChangeset
for help on using the changeset viewer.