- Timestamp:
- 08/17/17 15:47:54 (8 years ago)
- Location:
- branches/PerformanceComparison
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.Analysis
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Analysis (added) merged: 13401,15280-15281 /trunk/sources/HeuristicLab.Analysis merged: 15287
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Analysis.Views
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Analysis.Views (added) merged: 13401,15280-15281 /trunk/sources/HeuristicLab.Analysis.Views merged: 15287
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/HeatMapView.resx
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Analysis.Views/3.3/HeatMapView.resx (added) merged: 15281 /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeatMapView.resx merged: 15287
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Encodings.BinaryVectorEncoding
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Encodings.BinaryVectorEncoding (added) merged: 13401,15280-15281 /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding merged: 15287
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Encodings.LinearLinkageEncoding
- Property svn:mergeinfo changed (with no actual effect on merging)
-
branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Encodings.PermutationEncoding (added) merged: 13401,15280-15281 /trunk/sources/HeuristicLab.Encodings.PermutationEncoding merged: 15287
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Optimization
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Optimization (added) merged: 13349,13354,13401,15065,15215,15232,15280-15281,15284 /trunk/sources/HeuristicLab.Optimization merged: 15287,15302,15327
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Optimization.Views
- Property svn:mergeinfo changed
/branches/Async/HeuristicLab.Optimization.Views (added) merged: 13349,13401,15280-15281 /trunk/sources/HeuristicLab.Optimization.Views merged: 15287,15312
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/IOptimizerView.cs
r14600 r15330 137 137 #region Control events 138 138 protected virtual void startButton_Click(object sender, EventArgs e) { 139 Content.Start ();139 Content.StartAsync(); 140 140 } 141 141 protected virtual void pauseButton_Click(object sender, EventArgs e) { -
branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs
r14600 r15330 21 21 22 22 using System; 23 using System.Windows.Forms; 23 24 using HeuristicLab.Core; 24 25 using HeuristicLab.Core.Views; … … 58 59 } 59 60 } 61 62 protected override void Item_ToStringChanged(object sender, EventArgs e) { 63 if (InvokeRequired) { 64 Invoke(new EventHandler(Item_ToStringChanged), sender, e); 65 return; 66 } 67 68 base.Item_ToStringChanged(sender, e); 69 Application.DoEvents(); 70 } 60 71 } 61 72 } -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs
r14600 r15330 24 24 using System.Drawing; 25 25 using System.Linq; 26 using System.Threading; 27 using System.Threading.Tasks; 26 28 using HeuristicLab.Collections; 27 29 using HeuristicLab.Common; … … 203 205 } 204 206 public virtual void Start() { 207 Start(CancellationToken.None); 208 } 209 public virtual void Start(CancellationToken cancellationToken) { 205 210 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 206 211 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); 212 } 213 public virtual async Task StartAsync() { await StartAsync(CancellationToken.None); } 214 public virtual async Task StartAsync(CancellationToken cancellationToken) { 215 await AsyncHelper.DoAsync(Start, cancellationToken); 207 216 } 208 217 public virtual void Pause() { -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs
r14600 r15330 21 21 22 22 using System; 23 using System.Linq; 23 24 using System.Threading; 24 using System.Threading.Tasks;25 25 using HeuristicLab.Common; 26 26 using HeuristicLab.Core; … … 57 57 : base(original, cloner) { 58 58 results = cloner.Clone(original.Results); 59 initialized = original.initialized; 59 60 } 60 61 protected BasicAlgorithm() … … 71 72 } 72 73 73 public override void Start( ) {74 base.Start( );75 CancellationTokenSource = new CancellationTokenSource();74 public override void Start(CancellationToken cancellationToken) { 75 base.Start(cancellationToken); 76 CancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); 76 77 pausePending = false; 77 78 OnStarted(); 78 79 79 Task task = Task.Factory.StartNew(Run, CancellationTokenSource.Token, CancellationTokenSource.Token); 80 task.ContinueWith(t => { 81 try { 82 t.Wait(); 83 } 84 catch (AggregateException ex) { 85 try { 86 ex.Flatten().Handle(x => x is OperationCanceledException); 87 } 88 catch (AggregateException remaining) { 89 if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]); 90 else OnExceptionOccurred(remaining); 91 } 92 } 93 CancellationTokenSource.Dispose(); 94 CancellationTokenSource = null; 95 if (pausePending) OnPaused(); 96 else OnStopped(); 97 }); 80 try { 81 Run((object)cancellationTokenSource.Token); 82 } 83 catch (OperationCanceledException) { 84 } 85 catch (AggregateException ae) { 86 OnExceptionOccurred(ae.InnerExceptions.SingleOrDefault() ?? ae); 87 } 88 catch (Exception e) { 89 OnExceptionOccurred(e); 90 } 91 92 CancellationTokenSource.Dispose(); 93 CancellationTokenSource = null; 94 if (pausePending) OnPaused(); 95 else OnStopped(); 98 96 } 99 97 -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs
r14600 r15330 169 169 } 170 170 } 171 public override void Start( ) {172 base.Start( );173 if (engine != null) engine.Start( );171 public override void Start(System.Threading.CancellationToken cancellationToken) { 172 base.Start(cancellationToken); 173 if (engine != null) engine.Start(cancellationToken); 174 174 } 175 175 public override void Pause() { -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/MetaOptimizers/BatchRun.cs
r14600 r15330 23 23 using System.Collections.Generic; 24 24 using System.Drawing; 25 using System.Threading; 26 using System.Threading.Tasks; 25 27 using HeuristicLab.Collections; 26 28 using HeuristicLab.Common; … … 237 239 batchRunAction = BatchRunAction.Prepare; 238 240 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 239 try { Optimizer.Prepare(clearRuns); } 240 catch (InvalidOperationException) { } 241 try { Optimizer.Prepare(clearRuns); } catch (InvalidOperationException) { } 241 242 } else { 242 243 ExecutionState = ExecutionState.Stopped; … … 244 245 } 245 246 public void Start() { 247 Start(CancellationToken.None); 248 } 249 public void Start(CancellationToken cancellationToken) { 246 250 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 247 251 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); … … 249 253 batchRunAction = BatchRunAction.Start; 250 254 if (Optimizer.ExecutionState == ExecutionState.Stopped) Optimizer.Prepare(); 251 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 252 try { Optimizer.Start(); } 253 catch (InvalidOperationException) { } 255 for (int i = repetitionsCounter; i < repetitions; i++) { 256 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 257 try { Optimizer.Start(cancellationToken); } catch (InvalidOperationException) { } 258 if (ExecutionState == ExecutionState.Paused || ExecutionState == ExecutionState.Stopped) break; 259 Optimizer.Prepare(); 260 } 261 } 262 public async Task StartAsync() { await StartAsync(CancellationToken.None); } 263 public async Task StartAsync(CancellationToken cancellationToken) { 264 await AsyncHelper.DoAsync(Start, cancellationToken); 254 265 } 255 266 public void Pause() { … … 260 271 if (Optimizer.ExecutionState != ExecutionState.Started) return; 261 272 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 262 try { Optimizer.Pause(); } 263 catch (InvalidOperationException) { } 273 try { Optimizer.Pause(); } catch (InvalidOperationException) { } 264 274 } 265 275 public void Stop() { … … 273 283 } 274 284 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 275 try { Optimizer.Stop(); } 276 catch (InvalidOperationException) { } 285 try { Optimizer.Stop(); } catch (InvalidOperationException) { } 277 286 } 278 287 … … 395 404 else if (repetitionsCounter >= repetitions) OnStopped(); 396 405 else if (batchRunAction == BatchRunAction.Pause) OnPaused(); 397 else if (batchRunAction == BatchRunAction.Start) { 398 Optimizer.Prepare(); 399 Optimizer.Start(); 400 } else if (executionState == ExecutionState.Started) { 406 else if (batchRunAction == BatchRunAction.Start) return; 407 else if (executionState == ExecutionState.Started) { 401 408 // if the batch run hasn't been started but the inner optimizer was run then pause 402 409 OnPaused(); -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/MetaOptimizers/Experiment.cs
r14600 r15330 25 25 using System.Linq; 26 26 using System.Threading; 27 using System.Threading.Tasks; 27 28 using HeuristicLab.Collections; 28 29 using HeuristicLab.Common; … … 110 111 private bool experimentStarted = false; 111 112 private bool experimentStopped = false; 113 private ManualResetEventSlim allOptimizerFinished; // this indicates that all started optimizers have been paused or stopped 112 114 113 115 public Experiment() … … 181 183 foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState != ExecutionState.Started)) { 182 184 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 183 try { optimizer.Prepare(clearRuns); } 184 catch (InvalidOperationException) { } 185 try { optimizer.Prepare(clearRuns); } catch (InvalidOperationException) { } 185 186 } 186 187 } 187 188 public void Start() { 189 Start(CancellationToken.None); 190 } 191 public void Start(CancellationToken cancellationToken) { 188 192 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 189 193 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); … … 192 196 experimentStarted = true; 193 197 experimentStopped = false; 194 IOptimizer optimizer = Optimizers.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)); 195 if (optimizer != null) { 198 allOptimizerFinished = new ManualResetEventSlim(false); 199 200 IOptimizer optimizer; 201 while ((optimizer = Optimizers.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused))) != null) { 196 202 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 197 try { optimizer.Start(); } 198 catch (InvalidOperationException) { } 199 } 203 try { optimizer.Start(cancellationToken); } catch (InvalidOperationException) { } 204 if (ExecutionState == ExecutionState.Paused || ExecutionState == ExecutionState.Stopped) break; 205 } 206 207 allOptimizerFinished.Wait(); 208 } 209 public async Task StartAsync() { await StartAsync(CancellationToken.None); } 210 public async Task StartAsync(CancellationToken cancellationToken) { 211 await AsyncHelper.DoAsync(Start, cancellationToken); 200 212 } 201 213 public void Pause() { … … 208 220 foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState == ExecutionState.Started)) { 209 221 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 210 try { optimizer.Pause(); } 211 catch (InvalidOperationException) { } 222 try { optimizer.Pause(); } catch (InvalidOperationException) { } 212 223 } 213 224 } … … 222 233 foreach (var optimizer in Optimizers.Where(x => (x.ExecutionState == ExecutionState.Started) || (x.ExecutionState == ExecutionState.Paused))) { 223 234 // a race-condition may occur when the optimizer has changed the state by itself in the meantime 224 try { optimizer.Stop(); } 225 catch (InvalidOperationException) { } 235 try { optimizer.Stop(); } catch (InvalidOperationException) { } 226 236 } 227 237 } else { … … 357 367 try { 358 368 ExecutionTime = Optimizers.Aggregate(TimeSpan.Zero, (t, o) => t + o.ExecutionTime); 359 } 360 finally { 369 } finally { 361 370 Monitor.Exit(locker); 362 371 } … … 364 373 private void optimizer_Paused(object sender, EventArgs e) { 365 374 lock (locker) 366 if (Optimizers.All(x => x.ExecutionState != ExecutionState.Started)) OnPaused(); 375 if (Optimizers.All(x => x.ExecutionState != ExecutionState.Started)) { 376 OnPaused(); 377 allOptimizerFinished.Set(); 378 } 367 379 } 368 380 private void optimizer_Prepared(object sender, EventArgs e) { … … 377 389 lock (locker) { 378 390 if (experimentStopped) { 379 if (Optimizers.All(x => (x.ExecutionState == ExecutionState.Stopped) || (x.ExecutionState == ExecutionState.Prepared))) OnStopped(); 391 if (Optimizers.All(x => (x.ExecutionState == ExecutionState.Stopped) || (x.ExecutionState == ExecutionState.Prepared))) { 392 OnStopped(); 393 allOptimizerFinished.Set(); 394 } 380 395 } else { 381 if (experimentStarted && Optimizers.Any(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused))) { 382 Optimizers.First(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)).Start(); 383 } else if (Optimizers.All(x => x.ExecutionState == ExecutionState.Stopped)) OnStopped(); 384 else if (Optimizers.Any(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)) && Optimizers.All(o => o.ExecutionState != ExecutionState.Started)) OnPaused(); 396 if (experimentStarted && Optimizers.Any(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused))) return; 397 else if (Optimizers.All(x => x.ExecutionState == ExecutionState.Stopped)) { 398 OnStopped(); 399 allOptimizerFinished.Set(); 400 } else if (Optimizers.Any(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)) && Optimizers.All(o => o.ExecutionState != ExecutionState.Started)) { 401 OnPaused(); 402 allOptimizerFinished.Set(); 403 } 385 404 } 386 405 } -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/MetaOptimizers/TimeLimitRun.cs
r14600 r15330 25 25 using System.Drawing; 26 26 using System.Linq; 27 using System.Threading; 27 28 using System.Threading.Tasks; 28 29 using HeuristicLab.Collections; … … 238 239 } 239 240 public void Start() { 240 Algorithm.Start(); 241 Start(CancellationToken.None); 242 } 243 public void Start(CancellationToken cancellationToken) { 244 Algorithm.Start(cancellationToken); 245 } 246 public async Task StartAsync() { await StartAsync(CancellationToken.None); } 247 public async Task StartAsync(CancellationToken cancellationToken) { 248 await AsyncHelper.DoAsync(Start, cancellationToken); 241 249 } 242 250 public void Pause() { -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Problems/SingleObjectiveHeuristicOptimizationProblem.cs
- Property svn:mergeinfo changed
-
branches/PerformanceComparison/HeuristicLab.Problems.Instances.QAPLIB
- Property svn:mergeinfo changed (with no actual effect on merging)
Note: See TracChangeset
for help on using the changeset viewer.