Changeset 7786 for branches/ScatterSearch/HeuristicLab.Algorithms.ScatterSearch/3.3/ScatterSearch.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/ScatterSearch.cs
r7775 r7786 31 31 using HeuristicLab.Parameters; 32 32 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 33 using HeuristicLab.PluginInfrastructure; 33 34 using HeuristicLab.Random; 34 35 using HeuristicLab.Selection; … … 61 62 get { return (ConstrainedValueParameter<ICrossover>)Parameters["Crossover"]; } 62 63 } 63 public ConstrainedValueParameter<ILocalImprovementOperator> ImproverParameter {64 get { return ( ConstrainedValueParameter<ILocalImprovementOperator>)Parameters["Improver"]; }65 } 66 public ConstrainedValueParameter< DiversityCalculator> DiversityCalculatorParameter {67 get { return (ConstrainedValueParameter< DiversityCalculator>)Parameters["DiversityCalculator"]; }64 public IValueParameter<BoolValue> ExecutePathRelinkingParameter { 65 get { return (IValueLookupParameter<BoolValue>)Parameters["ExecutePathRelinking"]; } 66 } 67 public ConstrainedValueParameter<IImprovementOperator> ImproverParameter { 68 get { return (ConstrainedValueParameter<IImprovementOperator>)Parameters["Improver"]; } 68 69 } 69 70 public IValueParameter<IntValue> MaximumIterationsParameter { … … 73 74 get { return (IValueParameter<IntValue>)Parameters["NumberOfHighQualitySolutions"]; } 74 75 } 76 public ConstrainedValueParameter<IPathRelinker> PathRelinkerParameter { 77 get { return (ConstrainedValueParameter<IPathRelinker>)Parameters["PathRelinker"]; } 78 } 75 79 public IValueParameter<IntValue> PopulationSizeParameter { 76 80 get { return (IValueParameter<IntValue>)Parameters["PopulationSize"]; } … … 84 88 public IValueParameter<BoolValue> SetSeedRandomlyParameter { 85 89 get { return (IValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; } 90 } 91 public ConstrainedValueParameter<SimilarityCalculator> SimilarityCalculatorParameter { 92 get { return (ConstrainedValueParameter<SimilarityCalculator>)Parameters["SimilarityCalculator"]; } 86 93 } 87 94 #endregion … … 96 103 set { CrossoverParameter.Value = value; } 97 104 } 98 private ILocalImprovementOperator Improver { 105 private BoolValue ExecutePathRelinking { 106 get { return ExecutePathRelinkingParameter.Value; } 107 set { ExecutePathRelinkingParameter.Value = value; } 108 } 109 private IImprovementOperator Improver { 99 110 get { return ImproverParameter.Value; } 100 111 set { ImproverParameter.Value = value; } 101 }102 private DiversityCalculator DiversityCalculator {103 get { return DiversityCalculatorParameter.Value; }104 set { DiversityCalculatorParameter.Value = value; }105 112 } 106 113 private IntValue MaximumIterations { … … 112 119 set { NumberOfHighQualitySolutionsParameter.Value = value; } 113 120 } 121 private IPathRelinker PathRelinker { 122 get { return PathRelinkerParameter.Value; } 123 set { PathRelinkerParameter.Value = value; } 124 } 114 125 private IntValue PopulationSize { 115 126 get { return PopulationSizeParameter.Value; } … … 128 139 set { SetSeedRandomlyParameter.Value = value; } 129 140 } 130 public RandomCreator RandomCreator { 141 private SimilarityCalculator SimilarityCalculator { 142 get { return SimilarityCalculatorParameter.Value; } 143 set { SimilarityCalculatorParameter.Value = value; } 144 } 145 private RandomCreator RandomCreator { 131 146 get { return (RandomCreator)OperatorGraph.InitialOperator; } 132 147 } 133 p ublicSolutionsCreator SolutionsCreator {148 private SolutionsCreator SolutionsCreator { 134 149 get { return (SolutionsCreator)RandomCreator.Successor; } 135 150 } 136 p ublicScatterSearchMainLoop MainLoop {151 private ScatterSearchMainLoop MainLoop { 137 152 get { return FindMainLoop(SolutionsCreator.Successor); } 138 153 } … … 159 174 : base() { 160 175 #region Create parameters 161 Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the solution and moves.", new MultiAnalyzer())); 162 Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to combine solutions.")); 163 Parameters.Add(new ConstrainedValueParameter<ILocalImprovementOperator>("Improver", "The operator used to improve solutions.")); 164 Parameters.Add(new ConstrainedValueParameter<DiversityCalculator>("DiversityCalculator", "The operator used to calculate the diversity of two solutions.")); 165 Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(100))); 166 Parameters.Add(new ValueParameter<IntValue>("NumberOfHighQualitySolutions", "The number of high quality solutions that should be added to the reference set.", new IntValue(10))); 167 Parameters.Add(new ValueParameter<IntValue>("PopulationSize", "The size of the population.", new IntValue(300))); 168 Parameters.Add(new ValueParameter<IntValue>("ReferenceSetSize", "The size of the reference set.", new IntValue(100))); 169 Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0))); 170 Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true))); 176 Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", new MultiAnalyzer())); 177 Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover")); 178 Parameters.Add(new ValueParameter<BoolValue>("ExecutePathRelinking", new BoolValue(true))); 179 Parameters.Add(new ConstrainedValueParameter<IImprovementOperator>("Improver")); 180 Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", new IntValue(100))); 181 Parameters.Add(new ValueParameter<IntValue>("NumberOfHighQualitySolutions", new IntValue(10))); 182 Parameters.Add(new ConstrainedValueParameter<IPathRelinker>("PathRelinker")); 183 Parameters.Add(new ValueParameter<IntValue>("PopulationSize", new IntValue(300))); 184 Parameters.Add(new ValueParameter<IntValue>("ReferenceSetSize", new IntValue(100))); 185 Parameters.Add(new ValueParameter<IntValue>("Seed", new IntValue(0))); 186 Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", new BoolValue(true))); 187 Parameters.Add(new ConstrainedValueParameter<SimilarityCalculator>("SimilarityCalculator")); 171 188 #endregion 172 189 … … 178 195 Placeholder solutionImprover = new Placeholder(); 179 196 BestSelector bestSelector = new BestSelector(); 180 VariableCreator variableCreator = new VariableCreator();181 ResultsCollector resultsCollector = new ResultsCollector();182 197 ScatterSearchMainLoop mainLoop = new ScatterSearchMainLoop(); 183 198 #endregion … … 207 222 bestSelector.NumberOfSelectedSubScopesParameter.ActualName = NumberOfHighQualitySolutionsParameter.Name; 208 223 bestSelector.CopySelected = new BoolValue(false); 209 bestSelector.Successor = variableCreator; 210 211 variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0))); 212 variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("NewSolutions", new BoolValue(false))); 213 variableCreator.Successor = resultsCollector; 214 215 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iterations")); 216 resultsCollector.ResultsParameter.ActualName = "Results"; 217 resultsCollector.Successor = mainLoop; 224 bestSelector.Successor = mainLoop; 218 225 219 226 mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name; … … 236 243 237 244 public override void Prepare() { 238 base.Prepare();245 if (Problem != null) base.Prepare(); 239 246 } 240 247 … … 249 256 UpdateAnalyzers(); 250 257 UpdateCrossovers(); 251 UpdateDiversityCalculators(); 258 UpdatePathRelinkers(); 259 UpdateSimilarityCalculators(); 252 260 UpdateImprovers(); 253 Update DiversityCalculators();261 UpdateSimilarityCalculators(); 254 262 Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged); 255 263 base.OnProblemChanged(); … … 272 280 UpdateAnalyzers(); 273 281 UpdateCrossovers(); 274 UpdateDiversityCalculators(); 282 UpdatePathRelinkers(); 283 UpdateSimilarityCalculators(); 275 284 UpdateImprovers(); 276 285 ParameterizeMainLoop(); … … 306 315 ICrossover defaultCrossover = Problem.Operators.OfType<ICrossover>().FirstOrDefault(); 307 316 308 CrossoverParameter.ValidValues.Add(new Knapsack.KnapsackPathRelinker());309 CrossoverParameter.ValidValues.Add(new Knapsack.KnapsackSimultaneousPathRelinker());310 CrossoverParameter.ValidValues.Add(new TestFunctions.TestFunctionsPathRelinker());311 CrossoverParameter.ValidValues.Add(new TravelingSalesman.TravelingSalesmanPathRelinker());312 CrossoverParameter.ValidValues.Add(new TravelingSalesman.TravelingSalesmanSimultaneousPathRelinker());313 CrossoverParameter.ValidValues.Add(new TravelingSalesman.TravelingSalesmanMultipleGuidesPathRelinker());314 315 317 foreach (ICrossover crossover in Problem.Operators.OfType<ICrossover>().OrderBy(x => x.Name)) 316 318 CrossoverParameter.ValidValues.Add(crossover); 317 318 foreach (var crossover in CrossoverParameter.ValidValues.OfType<Knapsack.INBinaryVectorCrossover>())319 crossover.ParentsParameter.ActualName = "KnapsackSolution"; // temporary solution for the knapsack problem320 319 321 320 if (oldCrossover != null) { … … 327 326 CrossoverParameter.Value = defaultCrossover; 328 327 } 329 private void UpdateDiversityCalculators() {330 DiversityCalculator oldDiversityCalculator = DiversityCalculatorParameter.Value;331 DiversityCalculatorParameter.ValidValues.Clear();332 DiversityCalculator defaultDiversityCalculator = Problem.Operators.OfType<DiversityCalculator>().FirstOrDefault();333 334 DiversityCalculatorParameter.ValidValues.Add(new Knapsack.BinaryVectorDiversityCalculator());335 DiversityCalculatorParameter.ValidValues.Add(new TestFunctions.RealVectorDiversityCalculator());336 DiversityCalculatorParameter.ValidValues.Add(new TravelingSalesman.PermutationDiversityCalculator());337 338 foreach (DiversityCalculator diversityCalculator in Problem.Operators.OfType<DiversityCalculator>().OrderBy(x => x.Name))339 DiversityCalculatorParameter.ValidValues.Add(diversityCalculator);340 341 if (oldDiversityCalculator != null) {342 DiversityCalculator diversityCalculator = DiversityCalculatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldDiversityCalculator.GetType());343 if (diversityCalculator != null) DiversityCalculatorParameter.Value = diversityCalculator;344 else oldDiversityCalculator = null;345 }346 if (oldDiversityCalculator == null && defaultDiversityCalculator != null)347 DiversityCalculatorParameter.Value = defaultDiversityCalculator;348 }349 328 private void UpdateImprovers() { 350 I LocalImprovementOperator oldImprover = ImproverParameter.Value;329 IImprovementOperator oldImprover = ImproverParameter.Value; 351 330 ImproverParameter.ValidValues.Clear(); 352 ILocalImprovementOperator defaultImprover = Problem.Operators.OfType<ILocalImprovementOperator>().FirstOrDefault(); 353 354 ImproverParameter.ValidValues.Add(new Knapsack.KnapsackImprovementOperator()); 355 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsAckleyImprovementOperator()); 356 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsBealeImprovementOperator()); 357 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsBoothImprovementOperator()); 358 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsGriewankImprovementOperator()); 359 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsLevyImprovementOperator()); 360 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsMatyasImprovementOperator()); 361 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsRosenbrockImprovementOperator()); 362 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsSchwefelImprovementOperator()); 363 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsSumSquaresImprovementOperator()); 364 ImproverParameter.ValidValues.Add(new TestFunctions.TestFunctionsZakharovImprovementOperator()); 365 ImproverParameter.ValidValues.Add(new TravelingSalesman.TravelingSalesmanImprovementOperator()); 366 367 foreach (ILocalImprovementOperator improver in Problem.Operators.OfType<ILocalImprovementOperator>().OrderBy(x => x.Name)) 331 IImprovementOperator defaultImprover = Problem.Operators.OfType<IImprovementOperator>().FirstOrDefault(); 332 333 foreach (IImprovementOperator improver in ApplicationManager.Manager.GetInstances<IImprovementOperator>().OrderBy(x => x.Name)) 368 334 ImproverParameter.ValidValues.Add(improver); 369 335 370 foreach ( var improver in ImproverParameter.ValidValues.OfType<IScatterSearchTargetProcessor>())371 improver.TargetParameter.ActualName = "KnapsackSolution"; // temporary solution for the knapsack problem336 foreach (IImprovementOperator improver in Problem.Operators.OfType<IImprovementOperator>().OrderBy(x => x.Name)) 337 ImproverParameter.ValidValues.Add(improver); 372 338 373 339 if (oldImprover != null) { 374 I LocalImprovementOperator improver = ImproverParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldImprover.GetType());340 IImprovementOperator improver = ImproverParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldImprover.GetType()); 375 341 if (improver != null) ImproverParameter.Value = improver; 376 342 else oldImprover = null; … … 378 344 if (oldImprover == null && defaultImprover != null) 379 345 ImproverParameter.Value = defaultImprover; 346 } 347 private void UpdatePathRelinkers() { 348 IPathRelinker oldPathRelinker = PathRelinkerParameter.Value; 349 PathRelinkerParameter.ValidValues.Clear(); 350 IPathRelinker defaultPathRelinker = Problem.Operators.OfType<IPathRelinker>().FirstOrDefault(); 351 352 foreach (IPathRelinker pathRelinker in ApplicationManager.Manager.GetInstances<IPathRelinker>().OrderBy(x => x.Name)) 353 PathRelinkerParameter.ValidValues.Add(pathRelinker); 354 355 foreach (IPathRelinker pathRelinker in Problem.Operators.OfType<IPathRelinker>().OrderBy(x => x.Name)) 356 PathRelinkerParameter.ValidValues.Add(pathRelinker); 357 358 if (oldPathRelinker != null) { 359 IPathRelinker pathRelinker = PathRelinkerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldPathRelinker.GetType()); 360 if (pathRelinker != null) PathRelinkerParameter.Value = pathRelinker; 361 else oldPathRelinker = null; 362 } 363 if (oldPathRelinker == null && defaultPathRelinker != null) 364 PathRelinkerParameter.Value = defaultPathRelinker; 365 } 366 private void UpdateSimilarityCalculators() { 367 SimilarityCalculator oldDiversityCalculator = SimilarityCalculatorParameter.Value; 368 SimilarityCalculatorParameter.ValidValues.Clear(); 369 SimilarityCalculator defaultDiversityCalculator = Problem.Operators.OfType<SimilarityCalculator>().FirstOrDefault(); 370 371 foreach (SimilarityCalculator diversityCalculator in ApplicationManager.Manager.GetInstances<SimilarityCalculator>().OrderBy(x => x.Name)) 372 SimilarityCalculatorParameter.ValidValues.Add(diversityCalculator); 373 374 foreach (SimilarityCalculator diversityCalculator in Problem.Operators.OfType<SimilarityCalculator>().OrderBy(x => x.Name)) 375 SimilarityCalculatorParameter.ValidValues.Add(diversityCalculator); 376 377 if (oldDiversityCalculator != null) { 378 SimilarityCalculator diversityCalculator = SimilarityCalculatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldDiversityCalculator.GetType()); 379 if (diversityCalculator != null) SimilarityCalculatorParameter.Value = diversityCalculator; 380 else oldDiversityCalculator = null; 381 } 382 if (oldDiversityCalculator == null && defaultDiversityCalculator != null) 383 SimilarityCalculatorParameter.Value = defaultDiversityCalculator; 380 384 } 381 385 private void ParameterizeSolutionsCreator() { … … 397 401 } 398 402 } 399 //private void ParameterizeScatterSearchTargetProcessor(IOperator op) {400 // if (op is IScatterSearchTargetProcessor) {401 // IScatterSearchTargetProcessor ssOp = (IScatterSearchTargetProcessor)op;402 // ssOp.TargetParameter.ActualName = "KnapsackSolution"; // temporary solution for the knapsack problem403 // ssOp.TargetParameter.Hidden = true;404 // }405 //}406 403 private void ParameterizeAnalyzers() { 407 404 qualityAnalyzer.ResultsParameter.ActualName = "Results"; … … 422 419 while (mainLoop != null && !(mainLoop is ScatterSearchMainLoop)) 423 420 mainLoop = ((SingleSuccessorOperator)mainLoop).Successor; 424 if (mainLoop == null) return null; 425 else return (ScatterSearchMainLoop)mainLoop; 421 return mainLoop as ScatterSearchMainLoop; 426 422 } 427 423 #endregion
Note: See TracChangeset
for help on using the changeset viewer.