Changeset 7786 for branches/ScatterSearch/HeuristicLab.Algorithms.ScatterSearch/3.3/ScatterSearchMainLoop.cs
- Timestamp:
- 05/09/12 12:22:33 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ScatterSearch/HeuristicLab.Algorithms.ScatterSearch/3.3/ScatterSearchMainLoop.cs
r7778 r7786 41 41 get { return (IValueLookupParameter<IMultiAnalyzer>)Parameters["Analyzer"]; } 42 42 } 43 public IValueLookupParameter<DoubleValue> BestKnownQualityParameter { 44 get { return (IValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; } 45 } 43 46 public IValueLookupParameter<ICrossover> CrossoverParameter { 44 47 get { return (IValueLookupParameter<ICrossover>)Parameters["Crossover"]; } 45 48 } 46 public IValueLookupParameter<IOperator> ImproverParameter { 47 get { return (IValueLookupParameter<IOperator>)Parameters["Improver"]; } 48 } 49 public IValueLookupParameter<DiversityCalculator> DiversityCalculatorParameter { 50 get { return (IValueLookupParameter<DiversityCalculator>)Parameters["DiversityCalculator"]; } 49 public IValueLookupParameter<IEvaluator> EvaluatorParameter { 50 get { return (IValueLookupParameter<IEvaluator>)Parameters["Evaluator"]; } 51 } 52 public IValueLookupParameter<BoolValue> ExecutePathRelinkingParameter { 53 get { return (IValueLookupParameter<BoolValue>)Parameters["ExecutePathRelinking"]; } 54 } 55 public IValueLookupParameter<IImprovementOperator> ImproverParameter { 56 get { return (IValueLookupParameter<IImprovementOperator>)Parameters["Improver"]; } 57 } 58 public IValueLookupParameter<IntValue> IterationsParameter { 59 get { return (IValueLookupParameter<IntValue>)Parameters["Iterations"]; } 60 } 61 public IValueLookupParameter<BoolValue> MaximizationParameter { 62 get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; } 63 } 64 public IValueLookupParameter<IntValue> MaximumIterationsParameter { 65 get { return (IValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; } 51 66 } 52 67 public IValueLookupParameter<IntValue> NumberOfHighQualitySolutionsParameter { 53 68 get { return (IValueLookupParameter<IntValue>)Parameters["NumberOfHighQualitySolutions"]; } 54 69 } 70 public IValueLookupParameter<IPathRelinker> PathRelinkerParameter { 71 get { return (IValueLookupParameter<IPathRelinker>)Parameters["PathRelinker"]; } 72 } 55 73 public IValueLookupParameter<IntValue> PopulationSizeParameter { 56 74 get { return (IValueLookupParameter<IntValue>)Parameters["PopulationSize"]; } … … 59 77 get { return (IValueLookupParameter<IntValue>)Parameters["ReferenceSetSize"]; } 60 78 } 61 public IValueLookupParameter<DoubleValue> BestKnownQualityParameter {62 get { return (IValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }63 }64 public IValueLookupParameter<IEvaluator> EvaluatorParameter {65 get { return (IValueLookupParameter<IEvaluator>)Parameters["Evaluator"]; }66 }67 public IValueLookupParameter<IntValue> IterationsParameter {68 get { return (IValueLookupParameter<IntValue>)Parameters["Iterations"]; }69 }70 public IValueLookupParameter<BoolValue> MaximizationParameter {71 get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }72 }73 public IValueLookupParameter<IntValue> MaximumIterationsParameter {74 get { return (IValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; }75 }76 79 public IValueLookupParameter<DoubleValue> QualityParameter { 77 80 get { return (IValueLookupParameter<DoubleValue>)Parameters["Quality"]; } … … 83 86 get { return (IValueLookupParameter<VariableCollection>)Parameters["Results"]; } 84 87 } 85 public IValueLookupParameter< IntValue> SampleSizeParameter {86 get { return (IValueLookupParameter< IntValue>)Parameters["SampleSize"]; }88 public IValueLookupParameter<SimilarityCalculator> SimilarityCalculatorParameter { 89 get { return (IValueLookupParameter<SimilarityCalculator>)Parameters["SimilarityCalculator"]; } 87 90 } 88 91 public IValueLookupParameter<ISolutionCreator> SolutionCreatorParameter { … … 96 99 set { AnalyzerParameter.ActualValue = value; } 97 100 } 101 private DoubleValue BestKnownQuality { 102 get { return BestKnownQualityParameter.ActualValue; } 103 set { BestKnownQualityParameter.ActualValue = value; } 104 } 98 105 private ICrossover Crossover { 99 106 get { return CrossoverParameter.ActualValue; } 100 107 set { CrossoverParameter.ActualValue = value; } 101 108 } 102 private IOperator Improver { 109 private IEvaluator Evaluator { 110 get { return EvaluatorParameter.ActualValue; } 111 set { EvaluatorParameter.ActualValue = value; } 112 } 113 private BoolValue ExecutePathRelinking { 114 get { return ExecutePathRelinkingParameter.ActualValue; } 115 set { ExecutePathRelinkingParameter.ActualValue = value; } 116 } 117 private IImprovementOperator Improver { 103 118 get { return ImproverParameter.ActualValue; } 104 119 set { ImproverParameter.ActualValue = value; } 105 120 } 106 private DiversityCalculator DiversityCalculator { 107 get { return DiversityCalculatorParameter.ActualValue; } 108 set { DiversityCalculatorParameter.ActualValue = value; } 121 private IntValue Iterations { 122 get { return IterationsParameter.ActualValue; } 123 set { IterationsParameter.ActualValue = value; } 124 } 125 private BoolValue Maximization { 126 get { return MaximizationParameter.ActualValue; } 127 set { MaximizationParameter.ActualValue = value; } 128 } 129 private IntValue MaximumIterations { 130 get { return MaximumIterationsParameter.ActualValue; } 131 set { MaximumIterationsParameter.ActualValue = value; } 109 132 } 110 133 private IntValue NumberOfHighQualitySolutions { … … 112 135 set { NumberOfHighQualitySolutionsParameter.ActualValue = value; } 113 136 } 137 private IPathRelinker PathRelinker { 138 get { return PathRelinkerParameter.ActualValue; } 139 set { PathRelinkerParameter.ActualValue = value; } 140 } 114 141 private IntValue PopulationSize { 115 142 get { return PopulationSizeParameter.ActualValue; } … … 120 147 set { ReferenceSetSizeParameter.ActualValue = value; } 121 148 } 122 private DoubleValue BestKnownQuality {123 get { return BestKnownQualityParameter.ActualValue; }124 set { BestKnownQualityParameter.ActualValue = value; }125 }126 private IEvaluator Evaluator {127 get { return EvaluatorParameter.ActualValue; }128 set { EvaluatorParameter.ActualValue = value; }129 }130 private IntValue Iterations {131 get { return IterationsParameter.ActualValue; }132 set { IterationsParameter.ActualValue = value; }133 }134 private BoolValue Maximization {135 get { return MaximizationParameter.ActualValue; }136 set { MaximizationParameter.ActualValue = value; }137 }138 private IntValue MaximumIterations {139 get { return MaximumIterationsParameter.ActualValue; }140 set { MaximumIterationsParameter.ActualValue = value; }141 }142 149 private DoubleValue Quality { 143 150 get { return QualityParameter.ActualValue; } … … 152 159 set { ResultsParameter.ActualValue = value; } 153 160 } 154 private IntValue SampleSize{155 get { return S ampleSizeParameter.ActualValue; }156 set { S ampleSizeParameter.ActualValue = value; }161 private SimilarityCalculator SimilarityCalculator { 162 get { return SimilarityCalculatorParameter.ActualValue; } 163 set { SimilarityCalculatorParameter.ActualValue = value; } 157 164 } 158 165 private ISolutionCreator SolutionCreator { … … 173 180 private void Initialize() { 174 181 #region Create parameters 175 Parameters.Add(new ValueLookupParameter<IMultiAnalyzer>("Analyzer", "The operator used to analyze the solution and moves.")); 176 Parameters.Add(new ValueLookupParameter<ICrossover>("Crossover", "The operator used to combine solutions.")); 177 Parameters.Add(new ValueLookupParameter<IOperator>("Improver", "The operator used to improve solutions.")); 178 Parameters.Add(new ValueLookupParameter<DiversityCalculator>("DiversityCalculator", "The operator used to calculate the diversity of two solutions.")); 179 Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfHighQualitySolutions", "The number of high quality solutions that should be added to the reference set.")); 180 Parameters.Add(new ValueLookupParameter<IntValue>("PopulationSize", "The size of the population.")); 181 Parameters.Add(new ValueLookupParameter<IntValue>("ReferenceSetSize", "The size of the reference set.")); 182 Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The problem's best known quality value found so far.")); 183 Parameters.Add(new ValueLookupParameter<IEvaluator>("Evaluator", "The operator which is used to evaluate new solutions.")); 184 Parameters.Add(new ValueLookupParameter<IntValue>("Iterations", "The number of iterations performed.")); 185 Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false.")); 186 Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.")); 187 Parameters.Add(new ValueLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution.")); 188 Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator.")); 189 Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored.")); 190 Parameters.Add(new ValueLookupParameter<IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.")); 191 Parameters.Add(new ValueLookupParameter<ISolutionCreator>("SolutionCreator", "The operator which is used to create new solutions.")); 182 Parameters.Add(new ValueLookupParameter<IMultiAnalyzer>("Analyzer")); 183 Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality")); 184 Parameters.Add(new ValueLookupParameter<ICrossover>("Crossover")); 185 Parameters.Add(new ValueLookupParameter<IEvaluator>("Evaluator")); 186 Parameters.Add(new ValueLookupParameter<BoolValue>("ExecutePathRelinking")); 187 Parameters.Add(new ValueLookupParameter<IOperator>("Improver")); 188 Parameters.Add(new ValueLookupParameter<IntValue>("Iterations")); 189 Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization")); 190 Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations")); 191 Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfHighQualitySolutions")); 192 Parameters.Add(new ValueLookupParameter<IPathRelinker>("PathRelinker")); 193 Parameters.Add(new ValueLookupParameter<IntValue>("PopulationSize")); 194 Parameters.Add(new ValueLookupParameter<IntValue>("ReferenceSetSize")); 195 Parameters.Add(new ValueLookupParameter<DoubleValue>("Quality")); 196 Parameters.Add(new ValueLookupParameter<IRandom>("Random")); 197 Parameters.Add(new ValueLookupParameter<VariableCollection>("Results")); 198 Parameters.Add(new ValueLookupParameter<SimilarityCalculator>("SimilarityCalculator")); 199 Parameters.Add(new ValueLookupParameter<ISolutionCreator>("SolutionCreator")); 192 200 #endregion 193 201 194 202 #region Create operators 203 Placeholder analyzer = new Placeholder(); 195 204 Assigner assigner1 = new Assigner(); 196 205 Assigner assigner2 = new Assigner(); 197 206 ChildrenCreator childrenCreator = new ChildrenCreator(); 207 Placeholder crossover = new Placeholder(); 198 208 Comparator iterationsChecker = new Comparator(); 209 IntCounter iterationsCounter = new IntCounter(); 210 MergingReducer mergingReducer = new MergingReducer(); 211 ConditionalBranch executePathRelinkingBranch = new ConditionalBranch(); 199 212 ConditionalBranch newSolutionsBranch = new ConditionalBranch(); 200 ConditionalBranch terminateBranch = new ConditionalBranch();201 IntCounter interationsCounter = new IntCounter();202 MergingReducer mergingReducer = new MergingReducer();203 213 OffspringProcessor offspringProcessor = new OffspringProcessor(); 204 Placeholder analyzer = new Placeholder(); 205 Placeholder crossover = new Placeholder(); 214 Placeholder pathRelinker = new Placeholder(); 215 PopulationRebuildMethod populationRebuildMethod = new PopulationRebuildMethod(); 216 ReferenceSetUpdateMethod referenceSetUpdateMethod = new ReferenceSetUpdateMethod(); 217 ResultsCollector resultsCollector = new ResultsCollector(); 218 RightSelector rightSelector = new RightSelector(); 206 219 Placeholder solutionEvaluator1 = new Placeholder(); 207 220 Placeholder solutionEvaluator2 = new Placeholder(); 208 221 Placeholder solutionImprover1 = new Placeholder(); 209 222 Placeholder solutionImprover2 = new Placeholder(); 210 PopulationRebuildMethod populationRebuildMethod = new PopulationRebuildMethod();211 ResultsCollector resultsCollector = new ResultsCollector();212 ReferenceSetUpdateMethod referenceSetUpdateMethod = new ReferenceSetUpdateMethod();213 RightSelector rightSelector = new RightSelector();214 223 SolutionPoolUpdateMethod solutionPoolUpdateMethod = new SolutionPoolUpdateMethod(); 215 224 SolutionsCreator solutionsCreator = new SolutionsCreator(); … … 217 226 SubScopesProcessor subScopesProcessor2 = new SubScopesProcessor(); 218 227 SubScopesProcessor subScopesProcessor3 = new SubScopesProcessor(); 228 ConditionalBranch terminateBranch = new ConditionalBranch(); 219 229 UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor(); 220 230 UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor(); 221 231 UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor(); 232 VariableCreator variableCreator = new VariableCreator(); 222 233 #endregion 223 234 224 235 #region Create operator graph 225 OperatorGraph.InitialOperator = interationsCounter; 226 assigner1.Name = "NewSolutions = true"; 227 assigner1.LeftSideParameter.ActualName = "NewSolutions"; 228 assigner1.RightSideParameter.Value = new BoolValue(true); 229 assigner1.Successor = newSolutionsBranch; 230 231 assigner2.Name = "NewSolutions = false"; 232 assigner2.LeftSideParameter.ActualName = "NewSolutions"; 233 assigner2.RightSideParameter.Value = new BoolValue(false); 234 assigner2.Successor = uniformSubScopesProcessor1; 235 236 childrenCreator.Name = "SubsetGenerator"; 237 childrenCreator.ParentsPerChildParameter.Value = new IntValue(2); 238 childrenCreator.Successor = assigner2; 236 OperatorGraph.InitialOperator = variableCreator; 237 variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0))); 238 variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("NewSolutions", new BoolValue(false))); 239 variableCreator.Successor = resultsCollector; 240 241 resultsCollector.CopyValue = new BoolValue(false); 242 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>(IterationsParameter.Name)); 243 resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name; 244 resultsCollector.Successor = iterationsChecker; 239 245 240 246 iterationsChecker.Name = "IterationsChecker"; … … 245 251 iterationsChecker.Successor = terminateBranch; 246 252 247 solutionImprover2.Name = "SolutionImprover";248 solutionImprover2.OperatorParameter.ActualName = "Improver";249 solutionImprover2.Successor = solutionEvaluator2;250 251 solutionEvaluator2.Name = "SolutionEvaluator";252 solutionEvaluator2.OperatorParameter.ActualName = "Evaluator";253 solutionEvaluator2.Successor = null;254 255 newSolutionsBranch.Name = "NewSolutionChecker";256 newSolutionsBranch.ConditionParameter.ActualName = "NewSolutions";257 newSolutionsBranch.TrueBranch = subScopesProcessor1;258 newSolutionsBranch.FalseBranch = populationRebuildMethod;259 newSolutionsBranch.Successor = null;260 261 253 terminateBranch.Name = "TerminateChecker"; 262 254 terminateBranch.ConditionParameter.ActualName = "Terminate"; 263 terminateBranch.TrueBranch = new EmptyOperator();264 255 terminateBranch.FalseBranch = referenceSetUpdateMethod; 265 terminateBranch.Successor = null;266 267 interationsCounter.Name = "IterationCounter";268 interationsCounter.IncrementParameter.Value = new IntValue(1);269 interationsCounter.ValueParameter.ActualName = "Iterations";270 interationsCounter.Successor = resultsCollector;271 272 offspringProcessor.Successor = rightSelector;273 274 rightSelector.NumberOfSelectedSubScopesParameter.Value = new IntValue(1);275 rightSelector.CopySelected = new BoolValue(false);276 rightSelector.Successor = subScopesProcessor2;277 278 analyzer.Name = "Analyzer";279 analyzer.OperatorParameter.ActualName = "Analyzer";280 281 crossover.Name = "Crossover";282 crossover.OperatorParameter.ActualName = "Crossover";283 crossover.Successor = offspringProcessor;284 285 solutionImprover1.Name = "SolutionImprover";286 solutionImprover1.OperatorParameter.ActualName = "Improver";287 solutionImprover1.Successor = solutionEvaluator1;288 289 solutionEvaluator1.Name = "SolutionEvaluator";290 solutionEvaluator1.OperatorParameter.ActualName = "Evaluator";291 solutionEvaluator1.Successor = null;292 293 populationRebuildMethod.Successor = subScopesProcessor3;294 295 resultsCollector.CopyValue = new BoolValue(false);296 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>(IterationsParameter.Name));297 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(BestKnownQualityParameter.Name, null, BestKnownQualityParameter.Name));298 resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;299 resultsCollector.Successor = iterationsChecker;300 256 301 257 referenceSetUpdateMethod.Successor = assigner1; 302 258 303 solutionPoolUpdateMethod.Successor = analyzer; 304 305 solutionsCreator.Name = "DiversificationGenerationMethod"; 306 solutionsCreator.NumberOfSolutionsParameter.ActualName = "PopulationSize"; 307 solutionsCreator.Successor = uniformSubScopesProcessor3; 259 assigner1.Name = "NewSolutions = true"; 260 assigner1.LeftSideParameter.ActualName = "NewSolutions"; 261 assigner1.RightSideParameter.Value = new BoolValue(true); 262 assigner1.Successor = subScopesProcessor1; 308 263 309 264 subScopesProcessor1.DepthParameter.Value = new IntValue(1); … … 312 267 subScopesProcessor1.Successor = newSolutionsBranch; 313 268 269 childrenCreator.Name = "SubsetGenerator"; 270 childrenCreator.ParentsPerChildParameter.Value = new IntValue(2); 271 childrenCreator.Successor = assigner2; 272 273 assigner2.Name = "NewSolutions = false"; 274 assigner2.LeftSideParameter.ActualName = "NewSolutions"; 275 assigner2.RightSideParameter.Value = new BoolValue(false); 276 assigner2.Successor = uniformSubScopesProcessor1; 277 278 uniformSubScopesProcessor1.DepthParameter.Value = new IntValue(1); 279 uniformSubScopesProcessor1.Operator = executePathRelinkingBranch; 280 uniformSubScopesProcessor1.Successor = solutionPoolUpdateMethod; 281 282 executePathRelinkingBranch.Name = "ExecutePathRelinkingChecker"; 283 executePathRelinkingBranch.ConditionParameter.ActualName = ExecutePathRelinkingParameter.ActualName; 284 executePathRelinkingBranch.TrueBranch = pathRelinker; 285 executePathRelinkingBranch.FalseBranch = crossover; 286 287 pathRelinker.Name = "PathRelinker"; 288 pathRelinker.OperatorParameter.ActualName = "PathRelinker"; 289 pathRelinker.Successor = offspringProcessor; 290 291 crossover.Name = "Crossover"; 292 crossover.OperatorParameter.ActualName = "Crossover"; 293 crossover.Successor = offspringProcessor; 294 295 offspringProcessor.Successor = rightSelector; 296 297 rightSelector.NumberOfSelectedSubScopesParameter.Value = new IntValue(1); 298 rightSelector.CopySelected = new BoolValue(false); 299 rightSelector.Successor = subScopesProcessor2; 300 314 301 subScopesProcessor2.DepthParameter.Value = new IntValue(1); 315 302 subScopesProcessor2.Operators.Add(new EmptyOperator()); … … 317 304 subScopesProcessor2.Successor = mergingReducer; 318 305 306 uniformSubScopesProcessor2.DepthParameter.Value = new IntValue(2); 307 uniformSubScopesProcessor2.Operator = solutionImprover1; 308 309 solutionImprover1.Name = "SolutionImprover"; 310 solutionImprover1.OperatorParameter.ActualName = "Improver"; 311 solutionImprover1.Successor = solutionEvaluator1; 312 313 solutionEvaluator1.Name = "SolutionEvaluator"; 314 solutionEvaluator1.OperatorParameter.ActualName = "Evaluator"; 315 316 solutionPoolUpdateMethod.Successor = analyzer; 317 318 analyzer.Name = "Analyzer"; 319 analyzer.OperatorParameter.ActualName = "Analyzer"; 320 321 newSolutionsBranch.Name = "NewSolutionsChecker"; 322 newSolutionsBranch.ConditionParameter.ActualName = "NewSolutions"; 323 newSolutionsBranch.TrueBranch = subScopesProcessor1; 324 newSolutionsBranch.FalseBranch = populationRebuildMethod; 325 326 populationRebuildMethod.Successor = subScopesProcessor3; 327 319 328 subScopesProcessor3.DepthParameter.Value = new IntValue(1); 320 329 subScopesProcessor3.Operators.Add(solutionsCreator); 321 330 subScopesProcessor3.Operators.Add(new EmptyOperator()); 322 subScopesProcessor3.Successor = interationsCounter; 323 324 uniformSubScopesProcessor1.DepthParameter.Value = new IntValue(1); 325 uniformSubScopesProcessor1.Operator = crossover; 326 uniformSubScopesProcessor1.Successor = solutionPoolUpdateMethod; 327 328 uniformSubScopesProcessor2.DepthParameter.Value = new IntValue(2); 329 uniformSubScopesProcessor2.Operator = solutionImprover1; 330 uniformSubScopesProcessor2.Successor = null; 331 subScopesProcessor3.Successor = iterationsCounter; 332 333 solutionsCreator.Name = "DiversificationGenerationMethod"; 334 solutionsCreator.NumberOfSolutionsParameter.ActualName = "PopulationSize"; 335 solutionsCreator.Successor = uniformSubScopesProcessor3; 331 336 332 337 uniformSubScopesProcessor3.DepthParameter.Value = new IntValue(1); 333 338 uniformSubScopesProcessor3.Operator = solutionImprover2; 334 uniformSubScopesProcessor3.Successor = null; 339 340 solutionImprover2.Name = "SolutionImprover"; 341 solutionImprover2.OperatorParameter.ActualName = "Improver"; 342 solutionImprover2.Successor = solutionEvaluator2; 343 344 solutionEvaluator2.Name = "SolutionEvaluator"; 345 solutionEvaluator2.OperatorParameter.ActualName = "Evaluator"; 346 347 iterationsCounter.Name = "IterationCounter"; 348 iterationsCounter.IncrementParameter.Value = new IntValue(1); 349 iterationsCounter.ValueParameter.ActualName = "Iterations"; 350 iterationsCounter.Successor = resultsCollector; 335 351 #endregion 336 352 }
Note: See TracChangeset
for help on using the changeset viewer.