Changeset 5642
- Timestamp:
- 03/09/11 11:17:48 (14 years ago)
- Location:
- branches/VNS
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovement.cs
r5622 r5642 44 44 private LocalSearchMainLoop loop; 45 45 46 private /*Constrained*/ValueParameter<IMoveGenerator> MoveGeneratorParameter {47 get { return ( /*Constrained*/ValueParameter<IMoveGenerator>)Parameters["MoveGenerator"]; }48 } 49 private /*Constrained*/ValueParameter<IMoveMaker> MoveMakerParameter {50 get { return ( /*Constrained*/ValueParameter<IMoveMaker>)Parameters["MoveMaker"]; }51 } 52 private /*Constrained*/ValueParameter<ISingleObjectiveMoveEvaluator> MoveEvaluatorParameter {53 get { return ( /*Constrained*/ValueParameter<ISingleObjectiveMoveEvaluator>)Parameters["MoveEvaluator"]; }46 private ConstrainedValueParameter<IMoveGenerator> MoveGeneratorParameter { 47 get { return (ConstrainedValueParameter<IMoveGenerator>)Parameters["MoveGenerator"]; } 48 } 49 private ConstrainedValueParameter<IMoveMaker> MoveMakerParameter { 50 get { return (ConstrainedValueParameter<IMoveMaker>)Parameters["MoveMaker"]; } 51 } 52 private ConstrainedValueParameter<ISingleObjectiveMoveEvaluator> MoveEvaluatorParameter { 53 get { return (ConstrainedValueParameter<ISingleObjectiveMoveEvaluator>)Parameters["MoveEvaluator"]; } 54 54 } 55 55 private ValueParameter<IntValue> MaximumIterationsParameter { … … 80 80 81 81 [StorableConstructor] 82 protected LocalSearchImprovement(bool deserializing) : base(deserializing) { } 82 protected LocalSearchImprovement(bool deserializing) : base(deserializing) {} 83 [StorableHook(HookType.AfterDeserialization)] 84 private void AfterDeserialization() { 85 Initialize(); 86 } 83 87 protected LocalSearchImprovement(LocalSearchImprovement original, Cloner cloner) 84 88 : base(original, cloner) { 85 89 this.loop = cloner.Clone(original.loop); 90 Initialize(); 86 91 } 87 92 public override IDeepCloneable Clone(Cloner cloner) { … … 92 97 loop = new LocalSearchMainLoop(new BoolValue(true)); 93 98 94 Parameters.Add(new /*Constrained*/ValueParameter<IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));95 Parameters.Add(new /*Constrained*/ValueParameter<IMoveMaker>("MoveMaker", "The operator used to perform a move."));96 Parameters.Add(new /*Constrained*/ValueParameter<ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));99 Parameters.Add(new ConstrainedValueParameter<IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution.")); 100 Parameters.Add(new ConstrainedValueParameter<IMoveMaker>("MoveMaker", "The operator used to perform a move.")); 101 Parameters.Add(new ConstrainedValueParameter<ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move.")); 97 102 Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000))); 98 103 Parameters.Add(new ValueParameter<IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(100))); 99 104 Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated moves.")); 100 105 Parameters.Add(new LookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution.")); 106 107 Initialize(); 108 } 109 110 private void Initialize() { 111 MoveGeneratorParameter.ValueChanged += new EventHandler(MoveGeneratorParameter_ValueChanged); 101 112 } 102 113 103 114 public void Parameterize(IProblem problem) { 104 115 UpdateMoveOperators(problem); 116 ChooseMoveOperators(); 117 118 ParameterizeMoveGenerators(problem as ISingleObjectiveProblem); 119 ParameterizeMoveEvaluators(problem as ISingleObjectiveProblem); 120 ParameterizeMoveMakers(problem as ISingleObjectiveProblem); 121 } 122 123 void MoveGeneratorParameter_ValueChanged(object sender, EventArgs e) { 124 ChooseMoveOperators(); 105 125 } 106 126 107 127 private void UpdateMoveOperators(IProblem problem) { 108 /* IMoveGenerator oldMoveGenerator = MoveGenerator; 109 MoveGeneratorParameter.ValidValues.Clear(); 128 IMoveGenerator oldMoveGenerator = MoveGenerator; 129 IMoveMaker oldMoveMaker = MoveMaker; 130 ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator; 131 132 ClearMoveParameters(); 133 110 134 if (problem != null) { 111 135 foreach (IMoveGenerator generator in problem.Operators.OfType<IMoveGenerator>().OrderBy(x => x.Name)) … … 127 151 } 128 152 129 IMoveMaker oldMoveMaker = MoveMaker;130 153 if (oldMoveMaker != null) { 131 154 IMoveMaker mm = MoveMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveMaker.GetType()); … … 133 156 } 134 157 135 ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator;136 158 if (oldMoveEvaluator != null) { 137 159 ISingleObjectiveMoveEvaluator me = MoveEvaluatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveEvaluator.GetType()); 138 160 if (me != null) MoveEvaluator = me; 139 }*/ 161 } 162 } 163 164 private void ChooseMoveOperators() { 165 IMoveMaker oldMoveMaker = MoveMaker; 166 ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator; 167 168 if (MoveGenerator != null) { 169 List<Type> moveTypes = MoveGenerator.GetType().GetInterfaces().Where(x => typeof(IMoveOperator).IsAssignableFrom(x)).ToList(); 170 foreach (Type type in moveTypes.ToList()) { 171 if (moveTypes.Any(t => t != type && type.IsAssignableFrom(t))) 172 moveTypes.Remove(type); 173 } 174 List<IMoveMaker> validMoveMakers = new List<IMoveMaker>(); 175 List<ISingleObjectiveMoveEvaluator> validMoveEvaluators = new List<ISingleObjectiveMoveEvaluator>(); 176 177 foreach (Type type in moveTypes) { 178 var moveMakers = MoveMakerParameter.ValidValues.Where(x => type.IsAssignableFrom(x.GetType())).OrderBy(x => x.Name); 179 foreach (IMoveMaker moveMaker in moveMakers) 180 validMoveMakers.Add(moveMaker); 181 182 var moveEvaluators = MoveEvaluatorParameter.ValidValues.Where(x => type.IsAssignableFrom(x.GetType())).OrderBy(x => x.Name); 183 foreach (ISingleObjectiveMoveEvaluator moveEvaluator in moveEvaluators) 184 validMoveEvaluators.Add(moveEvaluator); 185 } 186 if (oldMoveMaker != null) { 187 IMoveMaker mm = validMoveMakers.FirstOrDefault(x => x.GetType() == oldMoveMaker.GetType()); 188 if (mm != null) MoveMaker = mm; 189 else MoveMaker = validMoveMakers.FirstOrDefault(); 190 } 191 192 if (oldMoveEvaluator != null) { 193 ISingleObjectiveMoveEvaluator me = validMoveEvaluators.FirstOrDefault(x => x.GetType() == oldMoveEvaluator.GetType()); 194 if (me != null) MoveEvaluator = me; 195 else MoveEvaluator = validMoveEvaluators.FirstOrDefault(); 196 } 197 } 140 198 } 141 199 142 200 private void ClearMoveParameters() { 143 /*MoveMakerParameter.ValidValues.Clear(); 144 MoveEvaluatorParameter.ValidValues.Clear();*/ 201 MoveGeneratorParameter.ValidValues.Clear(); 202 MoveMakerParameter.ValidValues.Clear(); 203 MoveEvaluatorParameter.ValidValues.Clear(); 204 } 205 206 private void ParameterizeMoveGenerators(ISingleObjectiveProblem problem) { 207 if (problem != null) { 208 foreach (IMultiMoveGenerator generator in problem.Operators.OfType<IMultiMoveGenerator>()) 209 generator.SampleSizeParameter.ActualName = SampleSizeParameter.Name; 210 } 211 } 212 private void ParameterizeMoveEvaluators(ISingleObjectiveProblem problem) { 213 foreach (ISingleObjectiveMoveEvaluator op in problem.Operators.OfType<ISingleObjectiveMoveEvaluator>()) { 214 op.QualityParameter.ActualName = problem.Evaluator.QualityParameter.ActualName; 215 } 216 } 217 private void ParameterizeMoveMakers(ISingleObjectiveProblem problem) { 218 foreach (IMoveMaker op in problem.Operators.OfType<IMoveMaker>()) { 219 op.QualityParameter.ActualName = problem.Evaluator.QualityParameter.ActualName; 220 if (MoveEvaluator != null) 221 op.MoveQualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName; 222 } 145 223 } 146 224 -
branches/VNS/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj
r5622 r5642 108 108 <ItemGroup> 109 109 <Compile Include="HeuristicLabAlgorithmsVariableNeighborhoodSearchPlugin.cs" /> 110 <Compile Include="IShakingOperator.cs" /> 110 111 <Compile Include="Properties\AssemblyInfo.cs" /> 111 112 <Compile Include="ShakingOperator.cs" /> -
branches/VNS/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/ShakingOperator.cs
r5609 r5642 38 38 [Item("ShakingOperator", "A shaking operator for VNS.")] 39 39 [StorableClass] 40 public class ShakingOperator : CheckedMultiOperator<IManipulator>{40 public class ShakingOperator<T> : CheckedMultiOperator<T>, IShakingOperator where T : class, IManipulator { 41 41 public IValueLookupParameter<IntValue> IndexParameter { 42 42 get { return (ValueLookupParameter<IntValue>)Parameters["Index"]; } … … 49 49 [StorableConstructor] 50 50 protected ShakingOperator(bool deserializing) : base(deserializing) { } 51 protected ShakingOperator(ShakingOperator original, Cloner cloner) : base(original, cloner) { }51 protected ShakingOperator(ShakingOperator<T> original, Cloner cloner) : base(original, cloner) { } 52 52 public override IDeepCloneable Clone(Cloner cloner) { 53 return new ShakingOperator (this, cloner);53 return new ShakingOperator<T>(this, cloner); 54 54 } 55 55 public ShakingOperator() … … 57 57 Parameters.Add(new ValueLookupParameter<IntValue>("Index", "The index of the operator that should be applied (k).")); 58 58 Parameters.Add(new LookupParameter<BoolValue>("Continue", "True if k <= available operators.")); 59 } 60 61 public void Parameterize(IProblem problem) { 62 Operators.Clear(); 63 64 if (problem != null) { 65 foreach (T manipulator in problem.Operators.OfType<T>().OrderBy(x => x.Name)) 66 Operators.Add(manipulator); 67 } 59 68 } 60 69 -
branches/VNS/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs
r5622 r5642 39 39 get { return (ValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; } 40 40 } 41 public /*Constrained*/ValueParameter<ISingleObjectiveEvaluator> EvaluatorParameter {42 get { return (/*Constrained*/ValueParameter<ISingleObjectiveEvaluator>)Parameters["Evaluator"]; }43 }44 41 private ValueParameter<ILocalImprovement> LocalImprovementParameter { 45 42 get { return (ValueParameter<ILocalImprovement>)Parameters["LocalImprovement"]; } 46 43 } 47 private ValueParameter< ShakingOperator> ShakingParameter {48 get { return (ValueParameter< ShakingOperator>)Parameters["Shaking"]; }44 private ValueParameter<IShakingOperator> ShakingParameter { 45 get { return (ValueParameter<IShakingOperator>)Parameters["Shaking"]; } 49 46 } 50 47 private ValueParameter<IntValue> MaximumIterationsParameter { … … 53 50 private ValueParameter<MultiAnalyzer> AnalyzerParameter { 54 51 get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; } 52 } 53 private VariableNeighborhoodSearchMainLoop VNSMainLoop { 54 get { return FindMainLoop(SolutionsCreator.Successor); } 55 55 } 56 56 #endregion … … 60 60 get { return (RandomCreator)OperatorGraph.InitialOperator; } 61 61 } 62 #endregion 62 public MultiAnalyzer Analyzer { 63 get { return AnalyzerParameter.Value; } 64 set { AnalyzerParameter.Value = value; } 65 } 66 private SolutionsCreator SolutionsCreator { 67 get { return (SolutionsCreator)RandomCreator.Successor; } 68 } 69 #endregion 70 71 [Storable] 72 private BestAverageWorstQualityAnalyzer qualityAnalyzer; 63 73 64 74 [StorableConstructor] … … 70 80 private VariableNeighborhoodSearch(VariableNeighborhoodSearch original, Cloner cloner) 71 81 : base(original, cloner) { 72 82 qualityAnalyzer = cloner.Clone(original.qualityAnalyzer); 83 Initialize(); 73 84 } 74 85 public override IDeepCloneable Clone(Cloner cloner) { … … 79 90 Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0))); 80 91 Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true))); 81 Parameters.Add(new /*Constrained*/ValueParameter<ISingleObjectiveEvaluator>("Evaluator", "The operator used to evaluate the solutions."));82 92 Parameters.Add(new ValueParameter<ILocalImprovement>("LocalImprovement", "The local improvement operation", new LocalSearchImprovement())); 83 Parameters.Add(new ValueParameter< ShakingOperator>("Shaking", "The shaking operation", new ShakingOperator()));93 Parameters.Add(new ValueParameter<IShakingOperator>("Shaking", "The shaking operation")); 84 94 Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000))); 85 95 Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the solution and moves.", new MultiAnalyzer())); … … 112 122 mainLoop.LocalImprovementParameter.ActualName = LocalImprovementParameter.Name; 113 123 mainLoop.ShakingParameter.ActualName = ShakingParameter.Name; 114 mainLoop.EvaluatorParameter.ActualName = EvaluatorParameter.Name;115 124 mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name; 116 125 mainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName; … … 119 128 mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions"; 120 129 121 /*Initialize();*/ 122 } 130 qualityAnalyzer = new BestAverageWorstQualityAnalyzer(); 131 ParameterizeAnalyzers(); 132 UpdateAnalyzers(); 133 134 Initialize(); 135 } 136 137 public override void Prepare() { 138 if (Problem != null) base.Prepare(); 139 } 140 141 private void Initialize() { 142 if (Problem != null) { 143 Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged); 144 } 145 } 146 147 #region Events 148 protected override void OnProblemChanged() { 149 ParameterizeStochasticOperator(Problem.SolutionCreator); 150 ParameterizeStochasticOperator(Problem.Evaluator); 151 foreach (IOperator op in Problem.Operators) ParameterizeStochasticOperator(op); 152 ParameterizeSolutionsCreator(); 153 ParameterizeVNSMainLoop(); 154 ParameterizeAnalyzers(); 155 ParameterizeIterationBasedOperators(); 156 UpdateShakingOperator(); 157 UpdateLocalImprovementOperator(); 158 UpdateAnalyzers(); 159 Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged); 160 base.OnProblemChanged(); 161 } 162 163 protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) { 164 ParameterizeStochasticOperator(Problem.SolutionCreator); 165 ParameterizeSolutionsCreator(); 166 base.Problem_SolutionCreatorChanged(sender, e); 167 } 168 protected override void Problem_EvaluatorChanged(object sender, EventArgs e) { 169 ParameterizeStochasticOperator(Problem.Evaluator); 170 ParameterizeSolutionsCreator(); 171 ParameterizeVNSMainLoop(); 172 ParameterizeAnalyzers(); 173 Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged); 174 base.Problem_EvaluatorChanged(sender, e); 175 } 176 protected override void Problem_OperatorsChanged(object sender, EventArgs e) { 177 foreach (IOperator op in Problem.Operators) ParameterizeStochasticOperator(op); 178 ParameterizeIterationBasedOperators(); 179 UpdateShakingOperator(); 180 UpdateLocalImprovementOperator(); 181 UpdateAnalyzers(); 182 base.Problem_OperatorsChanged(sender, e); 183 } 184 185 private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) { 186 ParameterizeVNSMainLoop(); 187 ParameterizeAnalyzers(); 188 } 189 #endregion 190 191 #region Helpers 192 private void ParameterizeSolutionsCreator() { 193 SolutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name; 194 SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name; 195 } 196 private void ParameterizeStochasticOperator(IOperator op) { 197 if (op is IStochasticOperator) 198 ((IStochasticOperator)op).RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName; 199 } 200 private void ParameterizeVNSMainLoop() { 201 VNSMainLoop.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name; 202 VNSMainLoop.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name; 203 VNSMainLoop.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName; 204 } 205 private void ParameterizeAnalyzers() { 206 qualityAnalyzer.ResultsParameter.ActualName = "Results"; 207 if (Problem != null) { 208 qualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name; 209 qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName; 210 qualityAnalyzer.QualityParameter.Depth = 1; 211 qualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name; 212 } 213 } 214 private void ParameterizeIterationBasedOperators() { 215 if (Problem != null) { 216 foreach (IIterationBasedOperator op in Problem.Operators.OfType<IIterationBasedOperator>()) { 217 op.IterationsParameter.ActualName = "OuterIterations"; 218 op.MaximumIterationsParameter.ActualName = "MaximumIterations"; 219 } 220 } 221 } 222 private void UpdateShakingOperator() { 223 Type manipulatorType = typeof(IManipulator); 224 List<Type> manipulatorInterfaces = new List<Type>(); 225 226 foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name)) { 227 Type t = mutator.GetType(); 228 Type[] interfaces = t.GetInterfaces(); 229 230 for(int i = 0; i < interfaces.Length; i++) { 231 if (manipulatorType.IsAssignableFrom(interfaces[i])) { 232 bool assignable = false; 233 for (int j = 0; j < interfaces.Length; j++) { 234 if (i != j && interfaces[i].IsAssignableFrom(interfaces[j])) { 235 assignable = true; 236 break; 237 } 238 } 239 240 if(!assignable) 241 manipulatorInterfaces.Add(interfaces[i]); 242 } 243 } 244 } 245 246 foreach (Type manipulatorInterface in manipulatorInterfaces) { 247 //manipulatorInterface is more specific 248 if (manipulatorType.IsAssignableFrom(manipulatorInterface)) { 249 //and compatible to all other found manipulator types 250 bool compatible = true; 251 foreach (Type manipulatorInterface2 in manipulatorInterfaces) { 252 if (!manipulatorInterface.IsAssignableFrom(manipulatorInterface2)) { 253 compatible = false; 254 break; 255 } 256 } 257 258 if (compatible) 259 manipulatorType = manipulatorInterface; 260 } 261 } 262 263 Type genericType = typeof(ShakingOperator<>).MakeGenericType(manipulatorType); 264 ShakingParameter.Value = (IShakingOperator)Activator.CreateInstance(genericType, new object[]{}); 265 266 ShakingParameter.Value.Parameterize(Problem); 267 } 268 private void UpdateLocalImprovementOperator() { 269 LocalImprovementParameter.Value.Parameterize(Problem); 270 } 271 private void UpdateAnalyzers() { 272 Analyzer.Operators.Clear(); 273 if (Problem != null) { 274 foreach (IAnalyzer analyzer in Problem.Operators.OfType<IAnalyzer>()) { 275 foreach (IScopeTreeLookupParameter param in analyzer.Parameters.OfType<IScopeTreeLookupParameter>()) 276 param.Depth = 1; 277 Analyzer.Operators.Add(analyzer); 278 } 279 } 280 Analyzer.Operators.Add(qualityAnalyzer); 281 } 282 private VariableNeighborhoodSearchMainLoop FindMainLoop(IOperator start) { 283 IOperator mainLoop = start; 284 while (mainLoop != null && !(mainLoop is VariableNeighborhoodSearchMainLoop)) 285 mainLoop = ((SingleSuccessorOperator)mainLoop).Successor; 286 if (mainLoop == null) return null; 287 else return (VariableNeighborhoodSearchMainLoop)mainLoop; 288 } 289 #endregion 123 290 } 124 291 } -
branches/VNS/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearchMainLoop.cs
r5622 r5642 72 72 get { return (ValueLookupParameter<ILocalImprovement>)Parameters["LocalImprovement"]; } 73 73 } 74 public ValueLookupParameter< ShakingOperator> ShakingParameter {75 get { return (ValueLookupParameter< ShakingOperator>)Parameters["Shaking"]; }74 public ValueLookupParameter<IShakingOperator> ShakingParameter { 75 get { return (ValueLookupParameter<IShakingOperator>)Parameters["Shaking"]; } 76 76 } 77 77 #endregion … … 103 103 Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated solutions.")); 104 104 Parameters.Add(new ValueLookupParameter<ILocalImprovement>("LocalImprovement", "The local improvement operation.")); 105 Parameters.Add(new ValueLookupParameter< ShakingOperator>("Shaking", "The shaking operation."));105 Parameters.Add(new ValueLookupParameter<IShakingOperator>("Shaking", "The shaking operation.")); 106 106 #endregion 107 107 … … 148 148 149 149 variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("OuterIterations", new IntValue(0))); 150 variableCreator.CollectedValues.Add(new ValueParameter< DoubleValue>("Index", new DoubleValue(0)));150 variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Index", new IntValue(0))); 151 151 variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("Continue", new BoolValue(false))); 152 152 variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("IsBetter", new BoolValue(false))); … … 242 242 #region Create operator graph 243 243 OperatorGraph.InitialOperator = variableCreator; 244 variableCreator.Successor = analyzer1; 245 analyzer1.Successor = subScopesProcessor0; 244 variableCreator.Successor = subScopesProcessor0; 246 245 subScopesProcessor0.Operators.Add(bestQualityInitializer); 247 subScopesProcessor0.Successor = resultsCollector1; 246 subScopesProcessor0.Successor = analyzer1; 247 analyzer1.Successor = resultsCollector1; 248 248 ///////// 249 249 resultsCollector1.Successor = iteration;
Note: See TracChangeset
for help on using the changeset viewer.