- Timestamp:
- 11/03/15 17:09:44 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithmMainLoop.cs
r13096 r13111 30 30 using HeuristicLab.Parameters; 31 31 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 32 using HeuristicLab.Selection; 32 33 33 34 namespace HeuristicLab.Algorithms.ALPS { … … 83 84 var generationsIcrementor = new IntCounter() { Name = "Increment Generations" }; 84 85 var evaluatedSolutionsReducer = new DataReducer() { Name = "Increment EvaluatedSolutions" }; 85 var eldersEmigrator = new EldersEmigrator() { Name = "Emigrate Elders" };86 var layerOpener = new LayerOpener() { Name = "Open new Layer" };87 var layerReseeder = new LayerReseeder() { Name = "Reseed Layer Zero" };86 var eldersEmigrator = CreateEldersEmigrator(); 87 var layerOpener = CreateLayerOpener(); 88 var layerReseeder = CreateReseeder(); 88 89 var layerAnalyzerProcessor = new UniformSubScopesProcessor(); 89 90 var layerAnalyzerPlaceholder = new Placeholder() { Name = "LayerAnalyzer (Placeholder)" }; … … 153 154 termination.ContinueBranch = matingPoolCreator; 154 155 } 156 157 private static CombinedOperator CreateEldersEmigrator() { 158 var eldersEmigrator = new CombinedOperator() { Name = "Emigrate Elders" }; 159 var selectorProsessor = new UniformSubScopesProcessor(); 160 var eldersSelector = new EldersSelector(); 161 var shiftToRightMigrator = new UnidirectionalRingMigrator(); 162 var mergingProsessor = new UniformSubScopesProcessor(); 163 var mergingReducer = new MergingReducer(); 164 var subScopesCounter = new SubScopesCounter(); 165 var countCalculator = new ExpressionCalculator() { Name = "LayerPopulationSize = Min(LayerPopulationSize, PopulationSize)" }; 166 var bestSelector = new BestSelector(); 167 var rightReducer = new RightReducer(); 168 169 eldersEmigrator.OperatorGraph.InitialOperator = selectorProsessor; 170 171 selectorProsessor.Operator = eldersSelector; 172 selectorProsessor.Successor = shiftToRightMigrator; 173 174 shiftToRightMigrator.ClockwiseMigrationParameter.Value = new BoolValue(true); 175 shiftToRightMigrator.Successor = mergingProsessor; 176 177 mergingProsessor.Operator = mergingReducer; 178 179 mergingReducer.Successor = subScopesCounter; 180 181 subScopesCounter.ValueParameter.ActualName = "LayerPopulationSize"; 182 subScopesCounter.AccumulateParameter.Value = new BoolValue(false); 183 subScopesCounter.Successor = countCalculator; 184 185 countCalculator.CollectedValues.Add(new LookupParameter<IntValue>("PopulationSize")); 186 countCalculator.CollectedValues.Add(new LookupParameter<IntValue>("LayerPopulationSize")); 187 countCalculator.ExpressionParameter.Value = new StringValue("LayerPopulationSize PopulationSize LayerPopulationSize PopulationSize < if toint"); 188 countCalculator.ExpressionResultParameter.ActualName = "LayerPopulationSize"; 189 countCalculator.Successor = bestSelector; 190 191 bestSelector.NumberOfSelectedSubScopesParameter.ActualName = "LayerPopulationSize"; 192 bestSelector.CopySelected = new BoolValue(false); 193 bestSelector.Successor = rightReducer; 194 195 return eldersEmigrator; 196 } 197 198 private static CombinedOperator CreateLayerOpener() { 199 var layerOpener = new CombinedOperator() { Name = "Open new Layer if needed" }; 200 var maxLayerReached = new Comparator() { Name = "MaxLayersReached = OpenLayers >= NumberOfLayers" }; 201 var maxLayerReachedBranch = new ConditionalBranch() { Name = "MaxLayersReached?" }; 202 var openNewLayerCalculator = new ExpressionCalculator() { Name = "OpenNewLayer = Generations >= AgeLimits[OpenLayers - 1]" }; 203 var openNewLayerBranch = new ConditionalBranch() { Name = "OpenNewLayer?" }; 204 var layerCreator = new LayerCreator() { Name = "Create Layer" }; 205 var createChildrenViaCrossover = AlpsGeneticAlgorithmMainOperator.Create(); 206 var incrEvaluatedSolutionsForNewLayer = new SubScopesCounter() { Name = "Update EvaluatedSolutions" }; 207 var incrOpenLayers = new IntCounter() { Name = "Incr. OpenLayers" }; 208 var newLayerResultsCollector = new ResultsCollector() { Name = "Collect new Layer Results" }; 209 210 layerOpener.OperatorGraph.InitialOperator = maxLayerReached; 211 212 maxLayerReached.LeftSideParameter.ActualName = "OpenLayers"; 213 maxLayerReached.RightSideParameter.ActualName = "NumberOfLayers"; 214 maxLayerReached.ResultParameter.ActualName = "MaxLayerReached"; 215 maxLayerReached.Comparison = new Comparison(ComparisonType.GreaterOrEqual); 216 maxLayerReached.Successor = maxLayerReachedBranch; 217 218 maxLayerReachedBranch.ConditionParameter.ActualName = "MaxLayerReached"; 219 maxLayerReachedBranch.FalseBranch = openNewLayerCalculator; 220 221 openNewLayerCalculator.CollectedValues.Add(new LookupParameter<IntArray>("AgeLimits")); 222 openNewLayerCalculator.CollectedValues.Add(new LookupParameter<IntValue>("Generations")); 223 openNewLayerCalculator.CollectedValues.Add(new LookupParameter<IntValue>("NumberOfLayers")); 224 openNewLayerCalculator.CollectedValues.Add(new LookupParameter<IntValue>("OpenLayers")); 225 openNewLayerCalculator.ExpressionResultParameter.ActualName = "OpenNewLayer"; 226 openNewLayerCalculator.ExpressionParameter.Value = new StringValue("Generations 1 + AgeLimits OpenLayers 1 - [] >"); 227 openNewLayerCalculator.Successor = openNewLayerBranch; 228 229 openNewLayerBranch.ConditionParameter.ActualName = "OpenNewLayer"; 230 openNewLayerBranch.TrueBranch = layerCreator; 231 232 layerCreator.NewLayerOperator = createChildrenViaCrossover; 233 layerCreator.Successor = incrOpenLayers; 234 235 createChildrenViaCrossover.Successor = incrEvaluatedSolutionsForNewLayer; 236 237 incrEvaluatedSolutionsForNewLayer.ValueParameter.ActualName = "EvaluatedSolutions"; 238 incrEvaluatedSolutionsForNewLayer.AccumulateParameter.Value = new BoolValue(true); 239 240 incrOpenLayers.ValueParameter.ActualName = "OpenLayers"; 241 incrOpenLayers.Increment = new IntValue(1); 242 incrOpenLayers.Successor = newLayerResultsCollector; 243 244 newLayerResultsCollector.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("LayerResults", "Result set for each layer", "LayerResults")); 245 newLayerResultsCollector.CopyValue = new BoolValue(false); 246 newLayerResultsCollector.Successor = null; 247 248 return layerOpener; 249 } 250 251 private static CombinedOperator CreateReseeder() { 252 var reseeder = new CombinedOperator() { Name = "Reseed Layer Zero if needed" }; 253 var reseedingController = new ReseedingController() { Name = "Reseeding needed (Generation % AgeGap == 0)?" }; 254 var removeIndividuals = new SubScopesRemover(); 255 var createIndividuals = new SolutionsCreator(); 256 var initializeAgeProsessor = new UniformSubScopesProcessor(); 257 var initializeAge = new VariableCreator() { Name = "Initialize Age" }; 258 var incrEvaluatedSolutionsAfterReseeding = new SubScopesCounter() { Name = "Update EvaluatedSolutions" }; 259 260 reseeder.OperatorGraph.InitialOperator = reseedingController; 261 262 reseedingController.FirstLayerOperator = removeIndividuals; 263 264 removeIndividuals.Successor = createIndividuals; 265 266 createIndividuals.NumberOfSolutionsParameter.ActualName = "PopulationSize"; 267 createIndividuals.Successor = initializeAgeProsessor; 268 269 initializeAgeProsessor.Operator = initializeAge; 270 initializeAgeProsessor.Successor = incrEvaluatedSolutionsAfterReseeding; 271 272 initializeAge.CollectedValues.Add(new ValueParameter<DoubleValue>("Age", new DoubleValue(0))); 273 274 incrEvaluatedSolutionsAfterReseeding.ValueParameter.ActualName = "EvaluatedSolutions"; 275 incrEvaluatedSolutionsAfterReseeding.AccumulateParameter.Value = new BoolValue(true); 276 277 return reseeder; 278 } 155 279 } 156 280 }
Note: See TracChangeset
for help on using the changeset viewer.