Changeset 3809 for trunk/sources/HeuristicLab.Algorithms.TabuSearch
- Timestamp:
- 05/14/10 17:47:49 (15 years ago)
- Location:
- trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs
r3659 r3809 48 48 public override IOperation Apply() { 49 49 ItemArray<BoolValue> tabu = IsTabuParameter.ActualValue; 50 PercentValue value = PercentTabuParameter.ActualValue; 51 if (value == null) { 52 value = new PercentValue(); 53 PercentTabuParameter.ActualValue = value; 54 } 55 value.Value = tabu.Where(x => x.Value).Count() / (double)tabu.Length; 56 ResultCollection results = ResultsParameter.ActualValue; 57 if (results != null) { 58 IResult result = null; 59 results.TryGetValue(PercentTabuParameter.ActualName, out result); 60 if (result != null) 61 result.Value = value; 62 else 63 results.Add(new Result(PercentTabuParameter.ActualName, "Indicates how much of the neighborhood is tabu.", (IItem)value.Clone())); 50 if (tabu.Length > 0) { 51 PercentValue value = PercentTabuParameter.ActualValue; 52 if (value == null) { 53 value = new PercentValue(); 54 PercentTabuParameter.ActualValue = value; 55 } 56 value.Value = tabu.Where(x => x.Value).Count() / (double)tabu.Length; 57 ResultCollection results = ResultsParameter.ActualValue; 58 if (results != null) { 59 IResult result = null; 60 results.TryGetValue(PercentTabuParameter.ActualName, out result); 61 if (result != null) 62 result.Value = value; 63 else 64 results.Add(new Result(PercentTabuParameter.ActualName, "Indicates how much of the neighborhood is tabu.", (IItem)value.Clone())); 65 } 64 66 } 65 67 return base.Apply(); -
trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs
r3750 r3809 81 81 get { return (ValueParameter<IntValue>)Parameters["SampleSize"]; } 82 82 } 83 private ValueParameter<MultiAnalyzer> MoveAnalyzerParameter {84 get { return (ValueParameter<MultiAnalyzer>)Parameters["MoveAnalyzer"]; }85 }86 83 private ValueParameter<MultiAnalyzer> AnalyzerParameter { 87 84 get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; } … … 125 122 get { return MaximumIterationsParameter.Value; } 126 123 set { MaximumIterationsParameter.Value = value; } 127 }128 public MultiAnalyzer MoveAnalyzer {129 get { return MoveAnalyzerParameter.Value; }130 set { MoveAnalyzerParameter.Value = value; }131 124 } 132 125 public MultiAnalyzer Analyzer { … … 161 154 Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000))); 162 155 Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The neighborhood size for stochastic sampling move generators", new IntValue(100))); 163 Parameters.Add(new ValueParameter<MultiAnalyzer>("MoveAnalyzer", "The operator used to analyze the moves.", new MultiAnalyzer()));164 156 Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer())); 165 157 … … 187 179 tsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName; 188 180 tsMainLoop.ResultsParameter.ActualName = "Results"; 189 tsMainLoop.MoveAnalyzerParameter.ActualName = MoveAnalyzerParameter.Name;190 181 tsMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name; 191 182 … … 392 383 private void UpdateAnalyzers() { 393 384 Analyzer.Operators.Clear(); 394 MoveAnalyzer.Operators.Clear();395 MoveAnalyzer.Operators.Add(moveQualityAnalyzer);396 MoveAnalyzer.Operators.Add(tabuNeighborhoodAnalyzer);397 385 if (Problem != null) { 398 386 foreach (IAnalyzer analyzer in Problem.Operators.OfType<IAnalyzer>().OrderBy(x => x.Name)) { … … 402 390 } 403 391 } 392 Analyzer.Operators.Add(moveQualityAnalyzer); 393 Analyzer.Operators.Add(tabuNeighborhoodAnalyzer); 404 394 } 405 395 private void ClearMoveParameters() { -
trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs
r3750 r3809 77 77 get { return (ValueLookupParameter<IOperator>)Parameters["TabuMaker"]; } 78 78 } 79 public ValueLookupParameter<IOperator> MoveAnalyzerParameter {80 get { return (ValueLookupParameter<IOperator>)Parameters["MoveAnalyzer"]; }81 }82 79 public ValueLookupParameter<IOperator> AnalyzerParameter { 83 80 get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; } … … 112 109 Parameters.Add(new ValueLookupParameter<IOperator>("TabuMaker", "The operator that declares a move tabu.")); 113 110 114 Parameters.Add(new ValueLookupParameter<IOperator>("MoveAnalyzer", "The operator used to analyze the moves.")); 115 Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution.")); 111 Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution and moves.")); 116 112 Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored.")); 117 113 #endregion … … 130 126 IntCounter evaluatedMovesCounter = new IntCounter(); 131 127 Placeholder tabuChecker = new Placeholder(); 132 Placeholder moveAnalyzer = new Placeholder();133 128 SubScopesSorter moveQualitySorter = new SubScopesSorter(); 134 129 TabuSelector tabuSelector = new TabuSelector(); 135 130 ConditionalBranch emptyNeighborhoodBranch1 = new ConditionalBranch(); 136 RightReducer rightReducer = new RightReducer();137 131 SubScopesProcessor moveMakingProcessor = new SubScopesProcessor(); 132 UniformSubScopesProcessor selectedMoveMakingProcesor = new UniformSubScopesProcessor(); 138 133 Placeholder tabuMaker = new Placeholder(); 139 134 Placeholder moveMaker = new Placeholder(); 135 MergingReducer mergingReducer = new MergingReducer(); 136 Placeholder analyzer2 = new Placeholder(); 140 137 SubScopesRemover subScopesRemover = new SubScopesRemover(); 141 138 ConditionalBranch emptyNeighborhoodBranch2 = new ConditionalBranch(); … … 143 140 IntCounter iterationsCounter = new IntCounter(); 144 141 Comparator iterationsComparator = new Comparator(); 145 SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();146 Placeholder analyzer2 = new Placeholder();147 142 ResultsCollector resultsCollector3 = new ResultsCollector(); 148 143 ConditionalBranch iterationsTermination = new ConditionalBranch(); … … 182 177 tabuChecker.Name = "TabuChecker (placeholder)"; 183 178 tabuChecker.OperatorParameter.ActualName = TabuCheckerParameter.Name; 184 185 moveAnalyzer.Name = "MoveAnalyzer (placeholder)";186 moveAnalyzer.OperatorParameter.ActualName = MoveAnalyzerParameter.Name;187 179 188 180 moveQualitySorter.DescendingParameter.ActualName = MaximizationParameter.Name; … … 208 200 moveMaker.OperatorParameter.ActualName = MoveMakerParameter.Name; 209 201 202 analyzer2.Name = "Analyzer (placeholder)"; 203 analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name; 204 210 205 subScopesRemover.RemoveAllSubScopes = true; 211 206 … … 225 220 iterationsComparator.ResultParameter.ActualName = "Terminate"; 226 221 227 analyzer2.Name = "Analyzer (placeholder)";228 analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;229 230 222 resultsCollector3.CopyValue = new BoolValue(true); 231 223 resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves")); … … 244 236 subScopesProcessor0.Operators.Add(bestQualityInitializer); 245 237 subScopesProcessor0.Successor = resultsCollector1; 238 bestQualityInitializer.Successor = analyzer1; 239 analyzer1.Successor = null; 246 240 resultsCollector1.Successor = resultsCollector2; 247 241 resultsCollector2.Successor = solutionProcessor; … … 250 244 moveGenerator.Successor = moveEvaluationProcessor; 251 245 moveEvaluationProcessor.Operator = moveEvaluator; 252 moveEvaluationProcessor.Successor = move Analyzer;246 moveEvaluationProcessor.Successor = moveQualitySorter; 253 247 moveEvaluator.Successor = evaluatedMovesCounter; 254 248 evaluatedMovesCounter.Successor = tabuChecker; 255 249 tabuChecker.Successor = null; 256 moveAnalyzer.Successor = moveQualitySorter;257 250 moveQualitySorter.Successor = tabuSelector; 258 251 tabuSelector.Successor = emptyNeighborhoodBranch1; 259 emptyNeighborhoodBranch1.FalseBranch = rightReducer;252 emptyNeighborhoodBranch1.FalseBranch = moveMakingProcessor; 260 253 emptyNeighborhoodBranch1.TrueBranch = null; 261 254 emptyNeighborhoodBranch1.Successor = subScopesRemover; 262 rightReducer.Successor = moveMakingProcessor; 263 moveMakingProcessor.Operators.Add(tabuMaker); 264 moveMakingProcessor.Successor = null; 255 moveMakingProcessor.Operators.Add(new EmptyOperator()); 256 moveMakingProcessor.Operators.Add(selectedMoveMakingProcesor); 257 moveMakingProcessor.Successor = mergingReducer; 258 selectedMoveMakingProcesor.Operator = tabuMaker; 259 selectedMoveMakingProcesor.Successor = null; 265 260 tabuMaker.Successor = moveMaker; 266 261 moveMaker.Successor = null; 262 mergingReducer.Successor = analyzer2; 263 analyzer2.Successor = null; 267 264 subScopesRemover.Successor = null; 268 265 iterationsCounter.Successor = iterationsComparator; 269 iterationsComparator.Successor = subScopesProcessor1; 270 subScopesProcessor1.Operators.Add(analyzer2); 271 subScopesProcessor1.Successor = resultsCollector3; 266 iterationsComparator.Successor = resultsCollector3; 272 267 resultsCollector3.Successor = emptyNeighborhoodBranch2; 273 268 emptyNeighborhoodBranch2.TrueBranch = null;
Note: See TracChangeset
for help on using the changeset viewer.