Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/04/18 22:33:26 (7 years ago)
Author:
abeham
Message:

#1614:

  • reverted r15603 by reverse merging
  • added expert system plugins from #2457
Location:
branches/1614_GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/1614_GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs

    r15719 r15721  
    6464      }
    6565    }
    66    
    67     public abstract TimeSpan ExecutionTime { get; }
     66
     67    [Storable]
     68    private TimeSpan executionTime;
     69    public TimeSpan ExecutionTime {
     70      get { return executionTime; }
     71      protected set {
     72        executionTime = value;
     73        OnExecutionTimeChanged();
     74      }
     75    }
    6876
    6977    public virtual Type ProblemType {
     
    125133      : base() {
    126134      executionState = ExecutionState.Stopped;
     135      executionTime = TimeSpan.Zero;
    127136      storeAlgorithmInEachRun = false;
    128137      runsCounter = 0;
     
    132141      : base(name) {
    133142      executionState = ExecutionState.Stopped;
     143      executionTime = TimeSpan.Zero;
    134144      storeAlgorithmInEachRun = false;
    135145      runsCounter = 0;
     
    139149      : base(name, parameters) {
    140150      executionState = ExecutionState.Stopped;
     151      executionTime = TimeSpan.Zero;
    141152      storeAlgorithmInEachRun = false;
    142153      runsCounter = 0;
     
    146157      : base(name, description) {
    147158      executionState = ExecutionState.Stopped;
     159      executionTime = TimeSpan.Zero;
    148160      storeAlgorithmInEachRun = false;
    149161      runsCounter = 0;
     
    153165      : base(name, description, parameters) {
    154166      executionState = ExecutionState.Stopped;
     167      executionTime = TimeSpan.Zero;
    155168      storeAlgorithmInEachRun = false;
    156169      runsCounter = 0;
     
    168181      if (ExecutionState == ExecutionState.Started) throw new InvalidOperationException(string.Format("Clone not allowed in execution state \"{0}\".", ExecutionState));
    169182      executionState = original.executionState;
     183      executionTime = original.executionTime;
    170184      problem = cloner.Clone(original.problem);
    171185      storeAlgorithmInEachRun = original.storeAlgorithmInEachRun;
     
    246260      if (handler != null) handler(this, EventArgs.Empty);
    247261    }
     262    public event EventHandler ExecutionTimeChanged;
     263    protected virtual void OnExecutionTimeChanged() {
     264      EventHandler handler = ExecutionTimeChanged;
     265      if (handler != null) handler(this, EventArgs.Empty);
     266    }
    248267    public event EventHandler ProblemChanged;
    249268    protected virtual void OnProblemChanged() {
     
    258277    public event EventHandler Prepared;
    259278    protected virtual void OnPrepared() {
     279      ExecutionTime = TimeSpan.Zero;
    260280      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<object>() { Runs }).OfType<IStatefulItem>()) {
    261281        statefulObject.InitializeState();
     
    328348    }
    329349    #endregion
    330 
    331     [Obsolete("Deprecate, does nothing, needs to be removed from IExecutable")]
    332     public event EventHandler ExecutionTimeChanged;
    333350  }
    334351}
  • branches/1614_GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs

    r15605 r15721  
    2121
    2222using System;
     23using System.Linq;
    2324using System.Threading;
    2425using HeuristicLab.Common;
     
    3132
    3233    private bool pausePending;
    33     private bool executionTimeActive;
     34    private DateTime lastUpdateTime;
    3435
    3536    public string Filename { get; set; }
     
    5152    }
    5253
    53     [Storable]
    54     private TimeSpan executionTime;
    55     private DateTime startDate;
    56     public override TimeSpan ExecutionTime {
    57       get { return executionTime + (executionTimeActive ? DateTime.UtcNow - startDate : TimeSpan.Zero); }
    58     }
    59 
    6054    [StorableConstructor]
    6155    protected BasicAlgorithm(bool deserializing) : base(deserializing) { }
     
    6458      results = cloner.Clone(original.Results);
    6559      initialized = original.initialized;
    66       executionTime = original.executionTime;
    6760    }
    6861    protected BasicAlgorithm()
    6962      : base() {
    7063      results = new ResultCollection();
    71       executionTime = TimeSpan.Zero;
    7264    }
    7365
    7466    public override void Prepare() {
    75       executionTime = TimeSpan.Zero;
    7667      if (Problem == null) return;
    7768      base.Prepare();
     
    8273
    8374    public override void Start(CancellationToken cancellationToken) {
    84       startDate = DateTime.UtcNow;
    85       executionTimeActive = true;
    8675      base.Start(cancellationToken);
    8776      CancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
     
    125114    private void Run(object state) {
    126115      CancellationToken cancellationToken = (CancellationToken)state;
    127       if (!initialized)
    128         Initialize(cancellationToken);
    129       initialized = true;
    130       Run(cancellationToken);
     116      lastUpdateTime = DateTime.UtcNow;
     117      System.Timers.Timer timer = new System.Timers.Timer(250);
     118      timer.AutoReset = true;
     119      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
     120      timer.Start();
     121      try {
     122        if (!initialized)
     123          Initialize(cancellationToken);
     124        initialized = true;
     125        Run(cancellationToken);
     126      }
     127      finally {
     128        timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
     129        timer.Stop();
     130        ExecutionTime += DateTime.UtcNow - lastUpdateTime;
     131      }
    131132    }
    132133
     
    134135    protected abstract void Run(CancellationToken cancellationToken);
    135136
    136     protected override void OnPaused() {
    137       executionTime += DateTime.UtcNow - startDate;
    138       executionTimeActive = false;
    139       base.OnPaused();
     137    #region Events
     138    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
     139      System.Timers.Timer timer = (System.Timers.Timer)sender;
     140      timer.Enabled = false;
     141      DateTime now = DateTime.UtcNow;
     142      ExecutionTime += now - lastUpdateTime;
     143      lastUpdateTime = now;
     144      timer.Enabled = true;
    140145    }
     146    #endregion
    141147
    142     protected override void OnStopped() {
    143       if (executionTimeActive) { // don't do if going from pause to stop
    144         executionTime += DateTime.UtcNow - startDate;
    145         executionTimeActive = false;
    146       }
    147       base.OnStopped();
    148     }
    149148  }
    150149}
  • branches/1614_GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs

    r15719 r15721  
    7171    }
    7272
    73     public override TimeSpan ExecutionTime {
    74       get { return engine.ExecutionTime; }
    75     }
    76 
    7773    public override ResultCollection Results {
    7874      get {
     
    200196    private void RegisterEngineEvents() {
    201197      Engine.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
     198      Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
    202199      Engine.Paused += new EventHandler(Engine_Paused);
    203200      Engine.Prepared += new EventHandler(Engine_Prepared);
     
    207204    private void DeregisterEngineEvents() {
    208205      Engine.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
     206      Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
    209207      Engine.Paused -= new EventHandler(Engine_Paused);
    210208      Engine.Prepared -= new EventHandler(Engine_Prepared);
     
    214212    private void Engine_ExceptionOccurred(object sender, EventArgs<Exception> e) {
    215213      OnExceptionOccurred(e.Value);
     214    }
     215    private void Engine_ExecutionTimeChanged(object sender, EventArgs e) {
     216      ExecutionTime = Engine.ExecutionTime;
    216217    }
    217218    private void Engine_Paused(object sender, EventArgs e) {
  • branches/1614_GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/HeuristicOptimizationAlgorithm.cs

    r15605 r15721  
    2121
    2222using System;
    23 using System.Threading;
    2423using HeuristicLab.Common;
    2524using HeuristicLab.Core;
     
    3837    }
    3938
    40     [Storable]
    41     private TimeSpan executionTime;
    42     private DateTime startDate;
    43     public override TimeSpan ExecutionTime {
    44       get { return executionTime + (ExecutionState == ExecutionState.Started ? DateTime.UtcNow - startDate : TimeSpan.Zero); }
    45     }
    46 
    47     protected HeuristicOptimizationAlgorithm() : base() {
    48       executionTime = TimeSpan.Zero;
    49     }
    50     protected HeuristicOptimizationAlgorithm(string name) : base(name) {
    51       executionTime = TimeSpan.Zero;
    52     }
    53     protected HeuristicOptimizationAlgorithm(string name, ParameterCollection parameters) : base(name, parameters) {
    54       executionTime = TimeSpan.Zero;
    55     }
    56     protected HeuristicOptimizationAlgorithm(string name, string description) : base(name, description) {
    57       executionTime = TimeSpan.Zero;
    58     }
    59     protected HeuristicOptimizationAlgorithm(string name, string description, ParameterCollection parameters) : base(name, description, parameters) {
    60       executionTime = TimeSpan.Zero;
    61     }
     39    protected HeuristicOptimizationAlgorithm() : base() { }
     40    protected HeuristicOptimizationAlgorithm(string name) : base(name) { }
     41    protected HeuristicOptimizationAlgorithm(string name, ParameterCollection parameters) : base(name, parameters) { }
     42    protected HeuristicOptimizationAlgorithm(string name, string description) : base(name, description) { }
     43    protected HeuristicOptimizationAlgorithm(string name, string description, ParameterCollection parameters) : base(name, description, parameters) { }
    6244
    6345    [StorableConstructor]
    6446    protected HeuristicOptimizationAlgorithm(bool deserializing) : base(deserializing) { }
    65     protected HeuristicOptimizationAlgorithm(HeuristicOptimizationAlgorithm original, Cloner cloner)
    66       : base(original, cloner) {
    67       executionTime = original.executionTime;
    68     }
    69 
    70     public override void Prepare() {
    71       executionTime = TimeSpan.Zero;
    72       base.Prepare();
    73     }
    74 
    75     public override void Start(CancellationToken cancellationToken) {
    76       startDate = DateTime.UtcNow;
    77       base.Start(cancellationToken);
    78     }
     47    protected HeuristicOptimizationAlgorithm(HeuristicOptimizationAlgorithm original, Cloner cloner) : base(original, cloner) { }
    7948
    8049    #region Events
     
    9362    protected virtual void Problem_EvaluatorChanged(object sender, EventArgs e) { }
    9463    #endregion
    95 
    96     protected override void OnPaused() {
    97       var elapsed = DateTime.UtcNow - startDate;
    98       executionTime += elapsed;
    99       base.OnPaused();
    100     }
    101 
    102     protected override void OnStopped() {
    103       if (ExecutionState == ExecutionState.Started) {
    104         var elapsed = DateTime.UtcNow - startDate;
    105         executionTime += elapsed;
    106       }
    107       base.OnStopped();
    108     }
    10964  }
    11065}
Note: See TracChangeset for help on using the changeset viewer.