Changeset 6046 for branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearchMainLoop.cs
- Timestamp:
- 04/23/11 10:00:31 (13 years ago)
- Location:
- branches/histogram
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/histogram
- Property svn:ignore
-
old new 10 10 protoc.exe 11 11 HeuristicLab 3.3.5.1.ReSharper.user 12 *.psess 13 *.vsp
-
- Property svn:mergeinfo changed
/trunk/sources merged: 6026,6029-6031,6035-6037,6042-6045
- Property svn:ignore
-
branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearchMainLoop.cs
r5753 r6046 20 20 #endregion 21 21 22 using System;23 using System.Collections.Generic;24 using System.Linq;25 using System.Text;26 using HeuristicLab.Operators;27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;28 22 using HeuristicLab.Common; 29 23 using HeuristicLab.Core; 24 using HeuristicLab.Data; 25 using HeuristicLab.Operators; 26 using HeuristicLab.Optimization; 27 using HeuristicLab.Optimization.Operators; 30 28 using HeuristicLab.Parameters; 31 using HeuristicLab.Data; 32 using HeuristicLab.Optimization.Operators; 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 33 30 using HeuristicLab.Selection; 34 using HeuristicLab.Optimization;35 31 36 32 namespace HeuristicLab.Algorithms.VariableNeighborhoodSearch { … … 42 38 public sealed class VariableNeighborhoodSearchMainLoop : AlgorithmOperator { 43 39 #region Parameter properties 44 public ValueLookupParameter<IRandom> RandomParameter { 45 get { return (ValueLookupParameter<IRandom>)Parameters["Random"]; } 46 } 47 public ValueLookupParameter<BoolValue> MaximizationParameter { 48 get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; } 49 } 50 public LookupParameter<DoubleValue> QualityParameter { 51 get { return (LookupParameter<DoubleValue>)Parameters["Quality"]; } 52 } 53 public ValueLookupParameter<DoubleValue> BestKnownQualityParameter { 54 get { return (ValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; } 55 } 56 public ValueLookupParameter<IOperator> EvaluatorParameter { 57 get { return (ValueLookupParameter<IOperator>)Parameters["Evaluator"]; } 58 } 59 public ValueLookupParameter<IntValue> MaximumIterationsParameter { 60 get { return (ValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; } 61 } 62 public ValueLookupParameter<VariableCollection> ResultsParameter { 63 get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; } 64 } 65 public ValueLookupParameter<IOperator> AnalyzerParameter { 66 get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; } 67 } 68 public LookupParameter<IntValue> EvaluatedSolutionsParameter { 69 get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; } 70 } 71 public ValueLookupParameter<ILocalImprovementOperator> LocalImprovementParameter { 72 get { return (ValueLookupParameter<ILocalImprovementOperator>)Parameters["LocalImprovement"]; } 73 } 74 public ValueLookupParameter<IShakingOperator> ShakingParameter { 75 get { return (ValueLookupParameter<IShakingOperator>)Parameters["Shaking"]; } 40 public IValueLookupParameter<IRandom> RandomParameter { 41 get { return (IValueLookupParameter<IRandom>)Parameters["Random"]; } 42 } 43 public IValueLookupParameter<BoolValue> MaximizationParameter { 44 get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; } 45 } 46 public ILookupParameter<DoubleValue> QualityParameter { 47 get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; } 48 } 49 public IValueLookupParameter<DoubleValue> BestKnownQualityParameter { 50 get { return (IValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; } 51 } 52 public IValueLookupParameter<IOperator> EvaluatorParameter { 53 get { return (IValueLookupParameter<IOperator>)Parameters["Evaluator"]; } 54 } 55 public ILookupParameter<IntValue> IterationsParameter { 56 get { return (ILookupParameter<IntValue>)Parameters["Iterations"]; } 57 } 58 public IValueLookupParameter<IntValue> MaximumIterationsParameter { 59 get { return (IValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; } 60 } 61 public IValueLookupParameter<VariableCollection> ResultsParameter { 62 get { return (IValueLookupParameter<VariableCollection>)Parameters["Results"]; } 63 } 64 public IValueLookupParameter<IOperator> AnalyzerParameter { 65 get { return (IValueLookupParameter<IOperator>)Parameters["Analyzer"]; } 66 } 67 public ILookupParameter<IntValue> EvaluatedSolutionsParameter { 68 get { return (ILookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; } 69 } 70 public ILookupParameter<IntValue> CurrentNeighborhoodIndexParameter { 71 get { return (ILookupParameter<IntValue>)Parameters["CurrentNeighborhoodIndex"]; } 72 } 73 public ILookupParameter<IntValue> NeighborhoodCountParameter { 74 get { return (ILookupParameter<IntValue>)Parameters["NeighborhoodCount"]; } 75 } 76 public IValueLookupParameter<ILocalImprovementOperator> LocalImprovementParameter { 77 get { return (IValueLookupParameter<ILocalImprovementOperator>)Parameters["LocalImprovement"]; } 78 } 79 public IValueLookupParameter<IMultiNeighborhoodShakingOperator> ShakingOperatorParameter { 80 get { return (IValueLookupParameter<IMultiNeighborhoodShakingOperator>)Parameters["ShakingOperator"]; } 76 81 } 77 82 #endregion … … 81 86 public VariableNeighborhoodSearchMainLoop() 82 87 : base() { 83 88 Initialize(); 84 89 } 85 90 private VariableNeighborhoodSearchMainLoop(VariableNeighborhoodSearchMainLoop original, Cloner cloner) … … 97 102 Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far.")); 98 103 Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions. This operator is executed in parallel, if an engine is used which supports parallelization.")); 104 Parameters.Add(new LookupParameter<IntValue>("Iterations", "The iterations to count.")); 99 105 Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.")); 100 106 Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored.")); 101 102 107 Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution.")); 103 108 Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated solutions.")); 104 109 Parameters.Add(new ValueLookupParameter<ILocalImprovementOperator>("LocalImprovement", "The local improvement operation.")); 105 Parameters.Add(new ValueLookupParameter<IShakingOperator>("Shaking", "The shaking operation.")); 110 Parameters.Add(new ValueLookupParameter<IMultiNeighborhoodShakingOperator>("ShakingOperator", "The shaking operation.")); 111 Parameters.Add(new LookupParameter<IntValue>("CurrentNeighborhoodIndex", "The index of the current shaking operation that should be applied.")); 112 Parameters.Add(new LookupParameter<IntValue>("NeighborhoodCount", "The number of neighborhood operators used for shaking.")); 106 113 #endregion 107 114 … … 126 133 127 134 QualityComparator qualityComparator = new QualityComparator(); 128 ConditionalBranch improvesQualityBranch1 = new ConditionalBranch(); 129 ConditionalBranch improvesQualityBranch2 = new ConditionalBranch(); 135 ConditionalBranch improvesQualityBranch = new ConditionalBranch(); 130 136 131 137 Assigner bestQualityUpdater = new Assigner(); … … 139 145 Placeholder analyzer2 = new Placeholder(); 140 146 147 Comparator indexComparator = new Comparator(); 141 148 ConditionalBranch indexTermination = new ConditionalBranch(); 142 149 … … 145 152 ConditionalBranch iterationsTermination = new ConditionalBranch(); 146 153 147 variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0)));148 variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Index", new IntValue(0)));149 variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("Continue", new BoolValue(false)));150 154 variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("IsBetter", new BoolValue(false))); 151 155 variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("BestQuality", new DoubleValue(0))); … … 159 163 160 164 resultsCollector1.CopyValue = new BoolValue(false); 161 resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));162 165 resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality")); 163 166 resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name; 164 167 165 iteration.Name = " Iteration";166 167 iterationInit.Name = "Init iteration";168 iterationInit.LeftSideParameter.ActualName = "Index";168 iteration.Name = "MainLoop Body"; 169 170 iterationInit.Name = "Init k = 0"; 171 iterationInit.LeftSideParameter.ActualName = CurrentNeighborhoodIndexParameter.Name; 169 172 iterationInit.RightSideParameter.Value = new IntValue(0); 170 173 … … 176 179 177 180 shaking.Name = "Shaking operator (placeholder)"; 178 shaking.OperatorParameter.ActualName = Shaking Parameter.Name;181 shaking.OperatorParameter.ActualName = ShakingOperatorParameter.Name; 179 182 180 183 localImprovement.Name = "Local improvement operator (placeholder)"; … … 192 195 qualityComparator.ResultParameter.ActualName = "IsBetter"; 193 196 194 improvesQualityBranch1.ConditionParameter.ActualName = "IsBetter"; 195 improvesQualityBranch2.ConditionParameter.ActualName = "IsBetter"; 197 improvesQualityBranch.ConditionParameter.ActualName = "IsBetter"; 196 198 197 199 bestQualityUpdater.Name = "Update BestQuality"; … … 204 206 bestSelector.QualityParameter.ActualName = QualityParameter.Name; 205 207 206 indexCounter.Name = "Count index";208 indexCounter.Name = "Count neighborhood index"; 207 209 indexCounter.Increment.Value = 1; 208 indexCounter.ValueParameter.ActualName = "Index";209 210 indexResetter.Name = "Reset index";211 indexResetter.LeftSideParameter.ActualName = "Index";210 indexCounter.ValueParameter.ActualName = CurrentNeighborhoodIndexParameter.Name; 211 212 indexResetter.Name = "Reset neighborhood index"; 213 indexResetter.LeftSideParameter.ActualName = CurrentNeighborhoodIndexParameter.Name; 212 214 indexResetter.RightSideParameter.Value = new IntValue(0); 213 215 … … 217 219 iterationsCounter.Name = "Iterations Counter"; 218 220 iterationsCounter.Increment = new IntValue(1); 219 iterationsCounter.ValueParameter.ActualName = "Iterations";221 iterationsCounter.ValueParameter.ActualName = IterationsParameter.Name; 220 222 221 223 iterationsComparator.Name = "Iterations >= MaximumIterations"; 222 224 iterationsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual); 223 iterationsComparator.LeftSideParameter.ActualName = "Iterations";225 iterationsComparator.LeftSideParameter.ActualName = IterationsParameter.Name; 224 226 iterationsComparator.RightSideParameter.ActualName = MaximumIterationsParameter.Name; 225 227 iterationsComparator.ResultParameter.ActualName = "Terminate"; … … 228 230 iterationsTermination.ConditionParameter.ActualName = "Terminate"; 229 231 232 indexComparator.Name = "k < k_max (index condition)"; 233 indexComparator.LeftSideParameter.ActualName = CurrentNeighborhoodIndexParameter.Name; 234 indexComparator.RightSideParameter.ActualName = NeighborhoodCountParameter.Name; 235 indexComparator.Comparison = new Comparison(ComparisonType.Less); 236 indexComparator.ResultParameter.ActualName = "ContinueIteration"; 237 230 238 indexTermination.Name = "Index Termination Condition"; 231 indexTermination.ConditionParameter.ActualName = "Continue ";239 indexTermination.ConditionParameter.ActualName = "ContinueIteration"; 232 240 #endregion 233 241 … … 255 263 evalCounter.Successor = localImprovement; 256 264 localImprovement.Successor = qualityComparator; 257 qualityComparator.Successor = improvesQualityBranch 1;258 improvesQualityBranch 1.TrueBranch = bestQualityUpdater;259 improvesQualityBranch 1.FalseBranch = indexCounter;265 qualityComparator.Successor = improvesQualityBranch; 266 improvesQualityBranch.TrueBranch = bestQualityUpdater; 267 improvesQualityBranch.FalseBranch = indexCounter; 260 268 261 269 bestQualityUpdater.Successor = indexResetter; … … 266 274 bestSelector.Successor = rightReducer; 267 275 rightReducer.Successor = analyzer2; 268 analyzer2.Successor = indexTermination; 269 indexTermination.TrueBranch = improvesQualityBranch2; 276 analyzer2.Successor = indexComparator; 277 indexComparator.Successor = indexTermination; 278 indexTermination.TrueBranch = createChild; 270 279 indexTermination.FalseBranch = null; 271 272 improvesQualityBranch2.TrueBranch = null;273 improvesQualityBranch2.FalseBranch = createChild;274 280 275 281 iterationsCounter.Successor = iterationsComparator; … … 281 287 282 288 public override IOperation Apply() { 283 if (LocalImprovementParameter.ActualValue == null || EvaluatorParameter.ActualValue == null)289 if (LocalImprovementParameter.ActualValue == null || ShakingOperatorParameter.ActualValue == null) 284 290 return null; 285 291 return base.Apply();
Note: See TracChangeset
for help on using the changeset viewer.