- Timestamp:
- 09/15/11 14:15:43 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs
r6534 r6767 104 104 } 105 105 106 private bool stopPending; 106 private bool experimentStarted = false; 107 private bool experimentStopped = false; 107 108 108 109 public Experiment() … … 114 115 optimizers = new OptimizerList(); 115 116 Runs = new RunCollection(); 116 stopPending = false;117 117 Initialize(); 118 118 } … … 124 124 optimizers = new OptimizerList(); 125 125 Runs = new RunCollection(); 126 stopPending = false;127 126 Initialize(); 128 127 } … … 133 132 optimizers = new OptimizerList(); 134 133 Runs = new RunCollection(); 135 stopPending = false;136 134 Initialize(); 137 135 } 138 136 [StorableConstructor] 139 private Experiment(bool deserializing) 140 : base(deserializing) { 141 stopPending = false; 142 } 137 private Experiment(bool deserializing) : base(deserializing) { } 143 138 [StorableHook(HookType.AfterDeserialization)] 144 139 private void AfterDeserialization() { … … 151 146 optimizers = cloner.Clone(original.optimizers); 152 147 runs = cloner.Clone(original.runs); 153 stopPending = original.stopPending; 148 149 experimentStarted = original.experimentStarted; 150 experimentStopped = original.experimentStopped; 154 151 Initialize(); 155 152 } … … 172 169 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped)) 173 170 throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState)); 174 if (Optimizers.Count > 0) { 175 if (clearRuns) runs.Clear(); 176 foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState != ExecutionState.Started)) 171 if (Optimizers.Count == 0) return; 172 173 if (clearRuns) runs.Clear(); 174 foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState != ExecutionState.Started)) 175 if (clearRuns || optimizer.ExecutionState != ExecutionState.Prepared) 177 176 optimizer.Prepare(clearRuns); 178 }179 177 } 180 178 public void Start() { 181 179 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 182 180 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); 183 stopPending = false; 184 if (Optimizers.Count > 0) { 185 IOptimizer optimizer = Optimizers.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)); 186 if (optimizer != null) optimizer.Start(); 187 } 181 if (Optimizers.Count == 0) return; 182 183 experimentStarted = true; 184 experimentStopped = false; 185 IOptimizer optimizer = Optimizers.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)); 186 if (optimizer != null) optimizer.Start(); 188 187 } 189 188 public void Pause() { 190 189 if (ExecutionState != ExecutionState.Started) 191 190 throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState)); 192 if (Optimizers.Count > 0) { 193 foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState == ExecutionState.Started)) 194 optimizer.Pause(); 195 } 191 if (Optimizers.Count == 0) return; 192 193 experimentStarted = false; 194 experimentStopped = false; 195 foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState == ExecutionState.Started)) 196 optimizer.Pause(); 196 197 } 197 198 public void Stop() { 198 199 if ((ExecutionState != ExecutionState.Started) && (ExecutionState != ExecutionState.Paused)) 199 200 throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState)); 200 stopPending = true; 201 if (Optimizers.Count > 0) { 202 foreach (IOptimizer optimizer in Optimizers.Where(x => (x.ExecutionState == ExecutionState.Started) || (x.ExecutionState == ExecutionState.Paused))) 203 optimizer.Stop(); 204 } 201 if (Optimizers.Count == 0) return; 202 203 experimentStarted = false; 204 experimentStopped = true; 205 foreach (IOptimizer optimizer in Optimizers.Where(x => (x.ExecutionState == ExecutionState.Started) || (x.ExecutionState == ExecutionState.Paused))) 206 optimizer.Stop(); 205 207 } 206 208 … … 333 335 } 334 336 private void optimizer_Stopped(object sender, EventArgs e) { 335 if (!stopPending && Optimizers.Any(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused))) { 337 if (experimentStopped && Optimizers.All(o => o.ExecutionState == ExecutionState.Stopped || o.ExecutionState == ExecutionState.Prepared)) OnStopped(); 338 else if (Optimizers.All(o => o.ExecutionState == ExecutionState.Stopped)) OnStopped(); 339 else if (Optimizers.Any(o => o.ExecutionState == ExecutionState.Paused) && Optimizers.All(o => o.ExecutionState != ExecutionState.Started)) OnPaused(); 340 else if (experimentStarted && !experimentStopped && Optimizers.Any(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused))) { 336 341 Optimizers.First(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused)).Start(); 337 } else {338 if (Optimizers.All(x => (x.ExecutionState != ExecutionState.Started) && (x.ExecutionState != ExecutionState.Paused))) {339 stopPending = false;340 OnStopped();341 }342 342 } 343 343 }
Note: See TracChangeset
for help on using the changeset viewer.