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)

Location:
branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3
Files:
2 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         
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs

    r4135 r4144  
    1010using HeuristicLab.Common;
    1111using System.Diagnostics;
     12using HeuristicLab.Optimization;
    1213
    1314namespace HeuristicLab.Hive.Experiment {
     
    1920      get {
    2021        if (jobDto.State == State.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
    21         else if (jobDto.State == State.Idle) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
     22        else if (jobDto.State == State.Idle) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
    2223        else if (jobDto.State == State.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
    23         else if (jobDto.State == State.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
    2424        else if (jobDto.State == State.Abort) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
     25        else if (jobDto.State == State.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
     26        else if (jobDto.State == State.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
    2527        else return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
    2628      }
     
    6567      get { return log; }
    6668    }
     69
     70    [Storable]
     71    private IOptimizer optimizer;
     72    public IOptimizer Optimizer {
     73      get { return optimizer; }
     74      set { this.optimizer = value; }
     75    }
    6776   
    6877    public JobItem() {
     
    7281    public override string ToString() {
    7382      if (jobDto != null) {
    74         return base.ToString() + " - " + jobDto.Id.ToString();
     83        return optimizer.Name;
    7584      } else {
    7685        return base.ToString();
     
    105114      clone.latestSnapshot = (ResponseObject<SerializedJob>)cloner.Clone(this.latestSnapshot);
    106115      clone.log = (ILog)cloner.Clone(this.log);
     116      clone.optimizer = (IOptimizer)cloner.Clone(this.optimizer);
    107117      return clone;
    108118    }
Note: See TracChangeset for help on using the changeset viewer.