Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/04/10 14:34:40 (14 years ago)
Author:
cneumuel
Message:

improved HiveExperiment GUI (HL3.3 look&feel, RunCollectionView, JobItem.ToString) (#1115)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs

    r4141 r4144  
    280280              StatusMessage = "Initial Snapshot",
    281281              Success = true
    282             }
     282            },
     283            Optimizer = optimizer
    283284          };
    284285          jobItems.Add(jobItem);
     
    348349        return optimizers;
    349350      } else {
    350         return FlatOptimizerTree(null, experiment);
     351        return FlatOptimizerTree(null, experiment, "");
    351352      }
    352353    }
     
    361362    /// </summary>
    362363    /// <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) {
    364365      IDictionary<IOptimizer, IOptimizer> optimizers = new Dictionary<IOptimizer, IOptimizer>();
    365366      if (optimizer is HeuristicLab.Optimization.Experiment) {
    366367        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        }
    367371        foreach (IOptimizer opt in experiment.Optimizers) {
    368           AddRange(optimizers, FlatOptimizerTree(experiment, opt));
     372          AddRange(optimizers, FlatOptimizerTree(experiment, opt, prepend));
    369373        }
    370374      } else if (optimizer is BatchRun) {
    371375        BatchRun batchRun = optimizer as BatchRun;
     376        prepend += "BatchRun/";
    372377        for (int i = 0; i < batchRun.Repetitions; i++) {
    373378          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);
    375382        }
    376383      } else if (optimizer is EngineAlgorithm) {
     384        optimizer.Name = prepend + optimizer.Name;
    377385        optimizers.Add(optimizer, parent);
    378386      } else {
    379387        Logger.Warn("Optimizer of type " + optimizers.GetType().ToString() + " unknown");
     388        optimizer.Name = prepend + optimizer.Name;
    380389        optimizers.Add(optimizer, parent);
    381390      }
     
    398407          BatchRun batchRun = (BatchRun)parentOptimizer;
    399408          if (newOptimizer is IAlgorithm) {
    400             batchRun.Runs.Add(new Run((IAlgorithm)newOptimizer));
     409            batchRun.Runs.Add(new Run(newOptimizer.Name, (IAlgorithm)newOptimizer) );
    401410          } else {
    402411            throw new NotSupportedException("Only IAlgorithm types supported");
     
    461470          IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
    462471          IJob restoredObject = null;
     472          IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];
    463473
    464474          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 anymore
    477               GetJobItemById(job.Id).LogMessage("Job successfully aborted");
    478               return;
    479             }
    480 
    481475            // loop while
    482476            // 1. the user doesn't request an abort
     
    484478            // 3. no result for the job is available yet (response.Obj==null)
    485479            // 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
    486505            if (response.Success && response.Obj != null && response.Obj.State == State.Finished) {
    487506              ResponseObject<SerializedJob> jobResponse = executionEngineFacade.GetLastSerializedResult(job.Id, false, false);
    488507              restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
    489508              UpdateSnapshot(jobResponse);
     509            } else {
     510              Thread.Sleep(resultPollingIntervalMs);
    490511            }
    491 
    492             Thread.Sleep(resultPollingIntervalMs);
    493512          } while (restoredObject == null || restoredObject.ExecutionState != Core.ExecutionState.Stopped);
    494513
     
    496515          GetJobItemById(job.Id).LogMessage("Job finished");
    497516          // job retrieved... replace the existing optimizers with the finished one
    498           IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];
     517         
    499518          IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
    500519         
Note: See TracChangeset for help on using the changeset viewer.