예제 #1
0
        /// <summary>
        /// replace the child-optimizer in the experiment
        /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
        /// </summary>
        private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerTask optimizerTask)
        {
            itemTaskLock.EnterWriteLock();
            try {
                if (optimizerTask.IndexInParentOptimizerList < 0)
                {
                    throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Task is invalid and the optimizer-tree cannot be reassembled.");
                }

                while (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList)
                {
                    experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerTask at the correct position
                }
                if (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList + 1)
                {
                    experiment.Optimizers.Add(optimizerTask.Item);
                }
                else
                {
                    // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder)
                    // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted
                    if (!optimizerTask.ComputeInParallel || experiment.Optimizers[optimizerTask.IndexInParentOptimizerList].Name == "Placeholder")
                    {
                        experiment.Optimizers[optimizerTask.IndexInParentOptimizerList] = optimizerTask.Item;
                    }
                }
            }
            finally {
                itemTaskLock.ExitWriteLock();
            }
        }
예제 #2
0
 /// <summary>
 /// if this.Optimizer is an experiment
 ///   Uses the child-optimizers of this.HiveTask and creates HiveTask-childs
 /// if this.Optimizer is a batchrun
 ///   Creates a number of child-jobs according to repetitions
 /// </summary>
 protected override void UpdateChildHiveTasks()
 {
     base.UpdateChildHiveTasks();
     childHiveTasksLock.EnterWriteLock();
     try {
         if (Task != null && syncTasksWithOptimizers)
         {
             if (!ItemTask.ComputeInParallel)
             {
                 this.childHiveTasks.Clear();
             }
             else
             {
                 if (ItemTask.Item is Optimization.Experiment)
                 {
                     Optimization.Experiment experiment = (Optimization.Experiment)ItemTask.Item;
                     foreach (IOptimizer childOpt in experiment.Optimizers)
                     {
                         var optimizerHiveTask = new OptimizerHiveTask(childOpt);
                         optimizerHiveTask.Task.Priority = Task.Priority; //inherit priority from parent
                         this.childHiveTasks.Add(optimizerHiveTask);
                     }
                 }
                 else if (ItemTask.Item is Optimization.BatchRun)
                 {
                     Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
                     if (batchRun.Optimizer != null)
                     {
                         while (this.childHiveTasks.Count < batchRun.Repetitions)
                         {
                             var optimizerHiveTask = new OptimizerHiveTask(batchRun.Optimizer);
                             optimizerHiveTask.Task.Priority = Task.Priority;
                             this.childHiveTasks.Add(optimizerHiveTask);
                         }
                         while (this.childHiveTasks.Count > batchRun.Repetitions)
                         {
                             this.childHiveTasks.Remove(this.childHiveTasks.Last());
                         }
                     }
                 }
             }
         }
     }
     finally {
         childHiveTasksLock.ExitWriteLock();
     }
 }
예제 #3
0
 protected override void DeregisterItemTaskEvents()
 {
     base.DeregisterItemTaskEvents();
     if (ItemTask != null)
     {
         if (ItemTask.Item is Optimization.Experiment)
         {
             Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment;
             experiment.Optimizers.ItemsAdded      -= new CollectionItemsChangedEventHandler <IndexedItem <IOptimizer> >(Optimizers_ItemsAdded);
             experiment.Optimizers.ItemsReplaced   -= new CollectionItemsChangedEventHandler <IndexedItem <IOptimizer> >(Optimizers_ItemsReplaced);
             experiment.Optimizers.ItemsRemoved    -= new CollectionItemsChangedEventHandler <IndexedItem <IOptimizer> >(Optimizers_ItemsRemoved);
             experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler <IndexedItem <IOptimizer> >(Optimizers_CollectionReset);
         }
         else if (ItemTask.Item is Optimization.BatchRun)
         {
             Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
             batchRun.RepetitionsChanged -= new EventHandler(batchRun_RepetitionsChanged);
             batchRun.OptimizerChanged   -= new EventHandler(batchRun_OptimizerChanged);
         }
     }
 }