Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/15/11 02:34:08 (14 years ago)
Author:
swagner
Message:

Enabled batch runs to deal with optimizers (#1378)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs

    r5287 r5300  
    3131namespace HeuristicLab.Optimization {
    3232  /// <summary>
    33   /// A run in which an algorithm is executed a given number of times.
     33  /// A run in which an optimizer is executed a given number of times.
    3434  /// </summary>
    35   [Item("Batch Run", "A run in which an algorithm is executed a given number of times.")]
     35  [Item("Batch Run", "A run in which an optimizer is executed a given number of times.")]
    3636  [Creatable("Testing & Analysis")]
    3737  [StorableClass]
     
    6666    public TimeSpan ExecutionTime {
    6767      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;
    7070        else
    7171          return executionTime;
     
    7878
    7979    [Storable]
    80     private IAlgorithm algorithm;
    81     public IAlgorithm Algorithm {
    82       get { return algorithm; }
     80    private IOptimizer optimizer;
     81    public IOptimizer Optimizer {
     82      get { return optimizer; }
    8383      set {
    84         if (algorithm != value) {
    85           if (algorithm != null) {
    86             DeregisterAlgorithmEvents();
    87             IEnumerable<IRun> runs = algorithm.Runs;
    88             algorithm = null; //necessary to avoid removing the runs from the old algorithm
     84        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
    8989            Runs.RemoveRange(runs);
    9090          }
    91           algorithm = value;
    92           if (algorithm != null) {
    93             RegisterAlgorithmEvents();
    94             Runs.AddRange(algorithm.Runs);
     91          optimizer = value;
     92          if (optimizer != null) {
     93            RegisterOptimizerEvents();
     94            Runs.AddRange(optimizer.Runs);
    9595          }
    96           OnAlgorithmChanged();
     96          OnOptimizerChanged();
    9797          Prepare();
    9898        }
    9999      }
    100100    }
     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
    101109
    102110    [Storable]
     
    108116          repetitions = value;
    109117          OnRepetitionsChanged();
    110           if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped))
     118          if ((Optimizer != null) && (Optimizer.ExecutionState == ExecutionState.Stopped))
    111119            Prepare();
    112120        }
     
    176184      executionState = original.executionState;
    177185      executionTime = original.executionTime;
    178       algorithm = cloner.Clone(original.algorithm);
     186      optimizer = cloner.Clone(original.optimizer);
    179187      repetitions = original.repetitions;
    180188      repetitionsCounter = original.repetitionsCounter;
     
    189197
    190198    private void Initialize() {
    191       if (algorithm != null) RegisterAlgorithmEvents();
     199      if (optimizer != null) RegisterOptimizerEvents();
    192200      if (runs != null) RegisterRunsEvents();
    193201    }
     
    199207      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
    200208        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
    201       if (Algorithm != null) {
     209      if (Optimizer != null) {
    202210        repetitionsCounter = 0;
    203211        if (clearRuns) runs.Clear();
    204         Algorithm.Prepare(clearRuns);
     212        Optimizer.Prepare(clearRuns);
    205213      }
    206214    }
     
    208216      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused))
    209217        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();
    211219    }
    212220    public void Pause() {
    213221      if (ExecutionState != ExecutionState.Started)
    214222        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();
    217225    }
    218226    public void Stop() {
     
    220228        throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
    221229      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();
    225233    }
    226234
     
    236244      if (handler != null) handler(this, EventArgs.Empty);
    237245    }
    238     public event EventHandler AlgorithmChanged;
    239     private void OnAlgorithmChanged() {
    240       EventHandler handler = AlgorithmChanged;
     246    public event EventHandler OptimizerChanged;
     247    private void OnOptimizerChanged() {
     248      EventHandler handler = OptimizerChanged;
    241249      if (handler != null) handler(this, EventArgs.Empty);
    242250    }
     
    276284    }
    277285
    278     private void RegisterAlgorithmEvents() {
    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 DeregisterAlgorithmEvents() {
    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) {
    301309      OnExceptionOccurred(e.Value);
    302310    }
    303     private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
     311    private void Optimizer_ExecutionTimeChanged(object sender, EventArgs e) {
    304312      OnExecutionTimeChanged();
    305313    }
    306     private void Algorithm_Paused(object sender, EventArgs e) {
     314    private void Optimizer_Paused(object sender, EventArgs e) {
    307315      OnPaused();
    308316    }
    309     private void Algorithm_Prepared(object sender, EventArgs e) {
     317    private void Optimizer_Prepared(object sender, EventArgs e) {
    310318      if ((ExecutionState == ExecutionState.Paused) || (ExecutionState == ExecutionState.Stopped))
    311319        OnPrepared();
    312320    }
    313     private void Algorithm_Started(object sender, EventArgs e) {
     321    private void Optimizer_Started(object sender, EventArgs e) {
    314322      stopPending = false;
    315323      if (ExecutionState != ExecutionState.Started)
    316324        OnStarted();
    317325    }
    318     private void Algorithm_Stopped(object sender, EventArgs e) {
     326    private void Optimizer_Stopped(object sender, EventArgs e) {
    319327      repetitionsCounter++;
    320328
    321329      if (!stopPending && (repetitionsCounter < repetitions)) {
    322         Algorithm.Prepare();
    323         Algorithm.Start();
     330        Optimizer.Prepare();
     331        Optimizer.Start();
    324332      } else {
    325333        OnStopped();
    326334      }
    327335    }
    328     private void Algorithm_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     336    private void Optimizer_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
    329337      Runs.RemoveRange(e.OldItems);
    330338      Runs.AddRange(e.Items);
    331339    }
    332     private void Algorithm_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     340    private void Optimizer_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
    333341      Runs.AddRange(e.Items);
    334342    }
    335     private void Algorithm_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     343    private void Optimizer_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
    336344      Runs.RemoveRange(e.Items);
    337345    }
     
    355363        if (executionTime != null) ExecutionTime -= executionTime.Value;
    356364      }
    357       if (Algorithm != null) Algorithm.Runs.RemoveRange(e.OldItems);
     365      if (Optimizer != null) Optimizer.Runs.RemoveRange(e.OldItems);
    358366      foreach (IRun run in e.Items) {
    359367        IItem item;
     
    378386        if (executionTime != null) ExecutionTime -= executionTime.Value;
    379387      }
    380       if (Algorithm != null) Algorithm.Runs.RemoveRange(e.Items);
     388      if (Optimizer != null) Optimizer.Runs.RemoveRange(e.Items);
    381389    }
    382390    #endregion
Note: See TracChangeset for help on using the changeset viewer.