Changeset 3716 for trunk/sources/HeuristicLab.Optimization
- Timestamp:
- 05/08/10 04:28:19 (15 years ago)
- Location:
- trunk/sources/HeuristicLab.Optimization/3.3
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs
r3694 r3716 23 23 using System.Collections.Generic; 24 24 using System.Drawing; 25 using HeuristicLab.Collections; 25 26 using HeuristicLab.Common; 26 27 using HeuristicLab.Core; … … 97 98 public RunCollection Runs { 98 99 get { return runs; } 100 protected set { 101 if (value == null) throw new ArgumentNullException(); 102 if (runs != value) { 103 if (runs != null) DeregisterRunsEvents(); 104 runs = value; 105 if (runs != null) RegisterRunsEvents(); 106 } 107 } 99 108 } 100 109 … … 104 113 executionTime = TimeSpan.Zero; 105 114 runsCounter = 0; 106 runs = new RunCollection();115 Runs = new RunCollection(); 107 116 } 108 117 protected Algorithm(string name) … … 111 120 executionTime = TimeSpan.Zero; 112 121 runsCounter = 0; 113 runs = new RunCollection();122 Runs = new RunCollection(); 114 123 } 115 124 protected Algorithm(string name, ParameterCollection parameters) … … 118 127 executionTime = TimeSpan.Zero; 119 128 runsCounter = 0; 120 runs = new RunCollection();129 Runs = new RunCollection(); 121 130 } 122 131 protected Algorithm(string name, string description) … … 125 134 executionTime = TimeSpan.Zero; 126 135 runsCounter = 0; 127 runs = new RunCollection();136 Runs = new RunCollection(); 128 137 } 129 138 protected Algorithm(string name, string description, ParameterCollection parameters) … … 132 141 executionTime = TimeSpan.Zero; 133 142 runsCounter = 0; 134 runs = new RunCollection();143 Runs = new RunCollection(); 135 144 } 136 145 [StorableConstructor] … … 140 149 private void Initialize() { 141 150 if (problem != null) RegisterProblemEvents(); 151 if (runs != null) RegisterRunsEvents(); 142 152 } 143 153 … … 176 186 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped)) 177 187 throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState)); 178 if (clearRuns) { 179 runsCounter = 0; 180 runs.Clear(); 181 } 188 if (clearRuns) runs.Clear(); 182 189 Prepare(); 183 190 } … … 264 271 problem.OperatorsChanged += new EventHandler(Problem_OperatorsChanged); 265 272 } 266 267 273 protected virtual void Problem_SolutionCreatorChanged(object sender, EventArgs e) { } 268 274 protected virtual void Problem_EvaluatorChanged(object sender, EventArgs e) { } 269 275 protected virtual void Problem_OperatorsChanged(object sender, EventArgs e) { } 276 277 protected virtual void DeregisterRunsEvents() { 278 runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset); 279 } 280 protected virtual void RegisterRunsEvents() { 281 runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset); 282 } 283 protected virtual void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) { 284 runsCounter = runs.Count; 285 } 270 286 #endregion 271 287 } -
trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
r3372 r3716 22 22 using System; 23 23 using System.Drawing; 24 using HeuristicLab.Collections; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Core; 27 using HeuristicLab.Data; 26 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 using HeuristicLab.Collections;28 29 29 30 namespace HeuristicLab.Optimization { … … 83 84 if (algorithm != null) RegisterAlgorithmEvents(); 84 85 OnAlgorithmChanged(); 85 Prepare( true);86 Prepare(); 86 87 } 87 88 } … … 96 97 repetitions = value; 97 98 OnRepetitionsChanged(); 98 if (( runs.Count < repetitions) && (Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped))99 if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped)) 99 100 Prepare(); 100 101 } 101 102 } 102 103 } 104 [Storable] 105 private int repetitionsCounter; 103 106 104 107 [Storable] … … 106 109 public RunCollection Runs { 107 110 get { return runs; } 111 private set { 112 if (value == null) throw new ArgumentNullException(); 113 if (runs != value) { 114 if (runs != null) DeregisterRunsEvents(); 115 runs = value; 116 if (runs != null) RegisterRunsEvents(); 117 } 118 } 108 119 } 109 120 … … 117 128 executionTime = TimeSpan.Zero; 118 129 repetitions = 10; 119 runs = new RunCollection(); 130 repetitionsCounter = 0; 131 Runs = new RunCollection(); 120 132 stopPending = false; 121 133 } … … 126 138 executionTime = TimeSpan.Zero; 127 139 repetitions = 10; 128 runs = new RunCollection(); 140 repetitionsCounter = 0; 141 Runs = new RunCollection(); 129 142 stopPending = false; 130 143 } … … 134 147 executionTime = TimeSpan.Zero; 135 148 repetitions = 10; 136 runs = new RunCollection(); 149 repetitionsCounter = 0; 150 Runs = new RunCollection(); 137 151 stopPending = false; 138 152 } … … 146 160 private void Initialize() { 147 161 if (algorithm != null) RegisterAlgorithmEvents(); 162 if (runs != null) RegisterRunsEvents(); 148 163 } 149 164 … … 155 170 clone.algorithm = (IAlgorithm)cloner.Clone(algorithm); 156 171 clone.repetitions = repetitions; 172 clone.repetitionsCounter = repetitionsCounter; 157 173 clone.runs = (RunCollection)cloner.Clone(runs); 158 174 clone.stopPending = stopPending; … … 168 184 throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState)); 169 185 if (Algorithm != null) { 170 if (clearRuns) { 171 ExecutionTime = TimeSpan.Zero; 172 runs.Clear(); 173 } 186 repetitionsCounter = 0; 187 if (clearRuns) runs.Clear(); 174 188 Algorithm.Prepare(clearRuns); 175 189 } … … 183 197 if (ExecutionState != ExecutionState.Started) 184 198 throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState)); 185 if (Algorithm != null) Algorithm.Pause(); 199 if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Started)) 200 Algorithm.Pause(); 186 201 } 187 202 public void Stop() { … … 189 204 throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState)); 190 205 stopPending = true; 191 if (Algorithm != null) Algorithm.Stop(); 206 if ((Algorithm != null) && 207 ((Algorithm.ExecutionState == ExecutionState.Started) || (Algorithm.ExecutionState == ExecutionState.Paused))) 208 Algorithm.Stop(); 192 209 } 193 210 … … 285 302 private void Algorithm_Stopped(object sender, EventArgs e) { 286 303 ExecutionTime += Algorithm.ExecutionTime; 287 288 if (!stopPending && (runs.Count < repetitions)) { 304 repetitionsCounter++; 305 306 if (!stopPending && (repetitionsCounter < repetitions)) { 289 307 Algorithm.Prepare(); 290 308 Algorithm.Start(); … … 303 321 Runs.RemoveRange(e.Items); 304 322 } 323 324 private void RegisterRunsEvents() { 325 runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset); 326 runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved); 327 } 328 private void DeregisterRunsEvents() { 329 runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset); 330 runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved); 331 } 332 private void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) { 333 foreach (IRun run in e.OldItems) { 334 IItem item; 335 run.Results.TryGetValue("Execution Time", out item); 336 TimeSpanValue executionTime = item as TimeSpanValue; 337 if (executionTime != null) ExecutionTime -= executionTime.Value; 338 } 339 if (Algorithm != null) Algorithm.Runs.RemoveRange(e.OldItems); 340 foreach (IRun run in e.Items) { 341 IItem item; 342 run.Results.TryGetValue("Execution Time", out item); 343 TimeSpanValue executionTime = item as TimeSpanValue; 344 if (executionTime != null) ExecutionTime += executionTime.Value; 345 } 346 } 347 private void Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) { 348 foreach (IRun run in e.Items) { 349 IItem item; 350 run.Results.TryGetValue("Execution Time", out item); 351 TimeSpanValue executionTime = item as TimeSpanValue; 352 if (executionTime != null) ExecutionTime -= executionTime.Value; 353 } 354 if (Algorithm != null) Algorithm.Runs.RemoveRange(e.Items); 355 } 305 356 #endregion 306 357 } -
trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs
r3372 r3716 79 79 public RunCollection Runs { 80 80 get { return runs; } 81 private set { 82 if (value == null) throw new ArgumentNullException(); 83 if (runs != value) { 84 if (runs != null) DeregisterRunsEvents(); 85 runs = value; 86 if (runs != null) RegisterRunsEvents(); 87 } 88 } 81 89 } 82 90 … … 90 98 executionTime = TimeSpan.Zero; 91 99 optimizers = new OptimizerList(); 92 runs = new RunCollection();100 Runs = new RunCollection(); 93 101 stopPending = false; 94 102 Initialize(); … … 100 108 executionTime = TimeSpan.Zero; 101 109 optimizers = new OptimizerList(); 102 runs = new RunCollection();110 Runs = new RunCollection(); 103 111 stopPending = false; 104 112 Initialize(); … … 109 117 executionTime = TimeSpan.Zero; 110 118 optimizers = new OptimizerList(); 111 runs = new RunCollection();119 Runs = new RunCollection(); 112 120 stopPending = false; 113 121 Initialize(); … … 124 132 foreach (IOptimizer optimizer in optimizers) 125 133 RegisterOptimizerEvents(optimizer); 134 if (runs != null) RegisterRunsEvents(); 126 135 } 127 136 … … 236 245 foreach (IndexedItem<IOptimizer> item in e.Items) { 237 246 RegisterOptimizerEvents(item.Value); 247 item.Value.Prepare(); 238 248 } 239 249 } … … 241 251 foreach (IndexedItem<IOptimizer> item in e.Items) { 242 252 RegisterOptimizerEvents(item.Value); 253 item.Value.Prepare(); 243 254 } 244 255 } … … 254 265 foreach (IndexedItem<IOptimizer> item in e.Items) { 255 266 RegisterOptimizerEvents(item.Value); 267 item.Value.Prepare(); 256 268 } 257 269 } … … 317 329 Runs.RemoveRange(e.Items); 318 330 } 331 332 private void RegisterRunsEvents() { 333 runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset); 334 runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved); 335 } 336 private void DeregisterRunsEvents() { 337 runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset); 338 runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved); 339 } 340 private void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) { 341 foreach (IOptimizer optimizer in Optimizers) 342 optimizer.Runs.RemoveRange(e.OldItems); 343 } 344 private void Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) { 345 foreach (IOptimizer optimizer in Optimizers) 346 optimizer.Runs.RemoveRange(e.Items); 347 } 319 348 #endregion 320 349 } -
trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs
r3632 r3716 30 30 31 31 namespace HeuristicLab.Optimization { 32 [Item("Run Collection", "Represents a collection of runs.")] 33 [Creatable("Testing & Analysis")] 32 34 [StorableClass] 33 [Item("RunCollection", "Represents a collection of runs.")]34 35 public class RunCollection : ItemCollection<IRun>, IStringConvertibleMatrix { 35 36 public RunCollection() : base() { Initialize(); }
Note: See TracChangeset
for help on using the changeset viewer.