Changeset 4144 for branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
- Timestamp:
- 08/04/10 14:34:40 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
r4141 r4144 280 280 StatusMessage = "Initial Snapshot", 281 281 Success = true 282 } 282 }, 283 Optimizer = optimizer 283 284 }; 284 285 jobItems.Add(jobItem); … … 348 349 return optimizers; 349 350 } else { 350 return FlatOptimizerTree(null, experiment );351 return FlatOptimizerTree(null, experiment, ""); 351 352 } 352 353 } … … 361 362 /// </summary> 362 363 /// <returns>a dictionary mapping from the parent optimizer to the child optimizer</returns> 363 private IDictionary<IOptimizer, IOptimizer> FlatOptimizerTree(IOptimizer parent, IOptimizer optimizer ) {364 private IDictionary<IOptimizer, IOptimizer> FlatOptimizerTree(IOptimizer parent, IOptimizer optimizer, string prepend) { 364 365 IDictionary<IOptimizer, IOptimizer> optimizers = new Dictionary<IOptimizer, IOptimizer>(); 365 366 if (optimizer is HeuristicLab.Optimization.Experiment) { 366 367 HeuristicLab.Optimization.Experiment experiment = optimizer as HeuristicLab.Optimization.Experiment; 368 if (this.experiment != experiment) { 369 prepend += "Experiment/"; // don't prepend for top-level optimizers 370 } 367 371 foreach (IOptimizer opt in experiment.Optimizers) { 368 AddRange(optimizers, FlatOptimizerTree(experiment, opt ));372 AddRange(optimizers, FlatOptimizerTree(experiment, opt, prepend)); 369 373 } 370 374 } else if (optimizer is BatchRun) { 371 375 BatchRun batchRun = optimizer as BatchRun; 376 prepend += "BatchRun/"; 372 377 for (int i = 0; i < batchRun.Repetitions; i++) { 373 378 IOptimizer opt = (IOptimizer)batchRun.Algorithm.Clone(); 374 AddRange(optimizers, FlatOptimizerTree(batchRun, opt)); 379 opt.Name += " [" + i + "]"; 380 IDictionary<IOptimizer, IOptimizer> batchOptimizers = FlatOptimizerTree(batchRun, opt, prepend); 381 AddRange(optimizers, batchOptimizers); 375 382 } 376 383 } else if (optimizer is EngineAlgorithm) { 384 optimizer.Name = prepend + optimizer.Name; 377 385 optimizers.Add(optimizer, parent); 378 386 } else { 379 387 Logger.Warn("Optimizer of type " + optimizers.GetType().ToString() + " unknown"); 388 optimizer.Name = prepend + optimizer.Name; 380 389 optimizers.Add(optimizer, parent); 381 390 } … … 398 407 BatchRun batchRun = (BatchRun)parentOptimizer; 399 408 if (newOptimizer is IAlgorithm) { 400 batchRun.Runs.Add(new Run( (IAlgorithm)newOptimizer));409 batchRun.Runs.Add(new Run(newOptimizer.Name, (IAlgorithm)newOptimizer) ); 401 410 } else { 402 411 throw new NotSupportedException("Only IAlgorithm types supported"); … … 461 470 IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade(); 462 471 IJob restoredObject = null; 472 IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id]; 463 473 464 474 do { 465 if (stopPending || !this.IsPollingResults) {466 return;467 }468 469 ResponseObject<JobDto> response = executionEngineFacade.GetJobById(job.Id);470 LogMessage("Response: " + response.StatusMessage + " (jobId: " + job.Id + ")");471 GetJobItemById(job.Id).LogMessage("Response: " + response.StatusMessage);472 473 UpdateJobItem(response.Obj);474 475 if (response.Obj.State == State.Abort) {476 // job is aborted, don't poll for results anymore477 GetJobItemById(job.Id).LogMessage("Job successfully aborted");478 return;479 }480 481 475 // loop while 482 476 // 1. the user doesn't request an abort … … 484 478 // 3. no result for the job is available yet (response.Obj==null) 485 479 // 4. the result that we get from the server is a snapshot and not the final result 480 481 if (stopPending || !this.IsPollingResults) { 482 return; 483 } 484 485 ResponseObject<JobDto> response = executionEngineFacade.GetJobById(job.Id); 486 LogMessage("Response: " + response.StatusMessage + " (jobId: " + job.Id + ")"); 487 GetJobItemById(job.Id).LogMessage("Response: " + response.StatusMessage); 488 489 UpdateJobItem(response.Obj); 490 491 if (response.Obj.State == State.Abort) { 492 pendingOptimizersByJobId.Remove(job.Id); 493 parentOptimizersByPendingOptimizer.Remove(originalOptimizer); 494 GetJobItemById(job.Id).LogMessage("Job successfully aborted"); 495 return; 496 } 497 498 if (response.Obj.State == State.Failed) { 499 pendingOptimizersByJobId.Remove(job.Id); 500 parentOptimizersByPendingOptimizer.Remove(originalOptimizer); 501 GetJobItemById(job.Id).LogMessage("Job failed with exception: " + response.Obj.Exception); 502 return; 503 } 504 486 505 if (response.Success && response.Obj != null && response.Obj.State == State.Finished) { 487 506 ResponseObject<SerializedJob> jobResponse = executionEngineFacade.GetLastSerializedResult(job.Id, false, false); 488 507 restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData)); 489 508 UpdateSnapshot(jobResponse); 509 } else { 510 Thread.Sleep(resultPollingIntervalMs); 490 511 } 491 492 Thread.Sleep(resultPollingIntervalMs);493 512 } while (restoredObject == null || restoredObject.ExecutionState != Core.ExecutionState.Stopped); 494 513 … … 496 515 GetJobItemById(job.Id).LogMessage("Job finished"); 497 516 // job retrieved... replace the existing optimizers with the finished one 498 IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];517 499 518 IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer; 500 519
Note: See TracChangeset
for help on using the changeset viewer.