private OffspringSelectionEvolutionStrategy(OffspringSelectionEvolutionStrategy original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer           = cloner.Clone(original.qualityAnalyzer);
     selectionPressureAnalyzer = cloner.Clone(original.selectionPressureAnalyzer);
     Initialize();
 }
Ejemplo n.º 2
0
 private IslandGeneticAlgorithm(IslandGeneticAlgorithm original, Cloner cloner)
     : base(original, cloner)
 {
     islandQualityAnalyzer = cloner.Clone(original.islandQualityAnalyzer);
     qualityAnalyzer       = cloner.Clone(original.qualityAnalyzer);
     Initialize();
 }
        public VariableNeighborhoodSearch()
            : base()
        {
            Parameters.Add(new FixedValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new FixedValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ConstrainedValueParameter <ILocalImprovementOperator>("LocalImprovement", "The local improvement operation"));
            Parameters.Add(new ConstrainedValueParameter <IMultiNeighborhoodShakingOperator>("ShakingOperator", "The operator that performs the shaking of solutions."));
            Parameters.Add(new FixedValueParameter <IntValue>("MaximumIterations", "The maximum number of iterations which should be processed.", new IntValue(50)));
            Parameters.Add(new FixedValueParameter <IntValue>("LocalImprovementMaximumIterations", "The maximum number of iterations which should be performed in the local improvement phase.", new IntValue(50)));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the solution and moves.", new MultiAnalyzer()));

            RandomCreator    randomCreator              = new RandomCreator();
            SolutionsCreator solutionsCreator           = new SolutionsCreator();
            VariableCreator  variableCreator            = new VariableCreator();
            ResultsCollector resultsCollector           = new ResultsCollector();
            VariableNeighborhoodSearchMainLoop mainLoop = new VariableNeighborhoodSearchMainLoop();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = solutionsCreator;

            solutionsCreator.NumberOfSolutions = new IntValue(1);
            solutionsCreator.Successor         = variableCreator;

            variableCreator.Name = "Initialize Evaluated Solutions";

            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("Iterations", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("CurrentNeighborhoodIndex", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("NeighborhoodCount", new IntValue(0)));
            variableCreator.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Iterations"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = mainLoop;

            mainLoop.IterationsParameter.ActualName = "Iterations";
            mainLoop.CurrentNeighborhoodIndexParameter.ActualName = "CurrentNeighborhoodIndex";
            mainLoop.NeighborhoodCountParameter.ActualName        = "NeighborhoodCount";
            mainLoop.LocalImprovementParameter.ActualName         = LocalImprovementParameter.Name;
            mainLoop.ShakingOperatorParameter.ActualName          = ShakingOperatorParameter.Name;
            mainLoop.MaximumIterationsParameter.ActualName        = MaximumIterationsParameter.Name;
            mainLoop.RandomParameter.ActualName             = RandomCreator.RandomParameter.ActualName;
            mainLoop.ResultsParameter.ActualName            = "Results";
            mainLoop.AnalyzerParameter.ActualName           = AnalyzerParameter.Name;
            mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";

            InitializeLocalImprovementOperators();
            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            RegisterEventHandlers();
        }
Ejemplo n.º 4
0
        public SimulatedAnnealingImprovementOperator()
            : base()
        {
            loop = new SimulatedAnnealingMainLoop();

            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();

            Parameters.Add(new LookupParameter <IRandom>("Random", "The random number generator to use."));
            Parameters.Add(new ConstrainedValueParameter <IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));
            Parameters.Add(new ConstrainedValueParameter <IMoveMaker>("MoveMaker", "The operator used to perform a move."));
            Parameters.Add(new ConstrainedValueParameter <ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
            Parameters.Add(new ValueLookupParameter <IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(150)));
            Parameters.Add(new ValueLookupParameter <IntValue>("InnerIterations", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(1500)));
            Parameters.Add(new LookupParameter <IntValue>("EvaluatedSolutions", "The number of evaluated moves."));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer()));
            Parameters.Add(new ValueParameter <DoubleValue>("StartTemperature", "The initial temperature.", new DoubleValue(100)));
            Parameters.Add(new ValueParameter <DoubleValue>("EndTemperature", "The final temperature which should be reached when iterations reaches maximum iterations.", new DoubleValue(1e-6)));
            Parameters.Add(new ConstrainedValueParameter <IDiscreteDoubleValueModifier>("AnnealingOperator", "The operator used to modify the temperature."));
            Parameters.Add(new LookupParameter <ResultCollection>("Results", "The variable where the results are stored."));
            Parameters.Add(new ScopeTreeLookupParameter <DoubleValue>("Quality", "The quality/fitness value of a solution."));

            foreach (IDiscreteDoubleValueModifier op in ApplicationManager.Manager.GetInstances <IDiscreteDoubleValueModifier>().OrderBy(x => x.Name))
            {
                AnnealingOperatorParameter.ValidValues.Add(op);
            }

            ParameterizeAnnealingOperators();
            ParameterizeSAMainLoop();

            RegisterEventHandlers();
        }
Ejemplo n.º 5
0
 private TabuSearch(TabuSearch original, Cloner cloner)
     : base(original, cloner)
 {
     moveQualityAnalyzer      = cloner.Clone(original.moveQualityAnalyzer);
     tabuNeighborhoodAnalyzer = cloner.Clone(original.tabuNeighborhoodAnalyzer);
     Initialize();
 }
Ejemplo n.º 6
0
        public TabuSearch()
            : base()
        {
            Parameters.Add(new ValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new ValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ConstrainedValueParameter <IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));
            Parameters.Add(new ConstrainedValueParameter <IMoveMaker>("MoveMaker", "The operator used to perform a move."));
            Parameters.Add(new ConstrainedValueParameter <ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
            Parameters.Add(new ConstrainedValueParameter <ITabuChecker>("TabuChecker", "The operator to check whether a move is tabu or not."));
            Parameters.Add(new ConstrainedValueParameter <ITabuMaker>("TabuMaker", "The operator used to insert attributes of a move into the tabu list."));
            Parameters.Add(new ValueParameter <IntValue>("TabuTenure", "The length of the tabu list.", new IntValue(10)));
            Parameters.Add(new ValueParameter <IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000)));
            Parameters.Add(new ValueParameter <IntValue>("SampleSize", "The neighborhood size for stochastic sampling move generators", new IntValue(100)));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer()));

            RandomCreator      randomCreator    = new RandomCreator();
            SolutionsCreator   solutionsCreator = new SolutionsCreator();
            VariableCreator    variableCreator  = new VariableCreator();
            ResultsCollector   resultsCollector = new ResultsCollector();
            TabuSearchMainLoop mainLoop         = new TabuSearchMainLoop();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = solutionsCreator;

            solutionsCreator.NumberOfSolutions = new IntValue(1);
            solutionsCreator.Successor         = variableCreator;

            variableCreator.Name = "Initialize EvaluatedMoves";
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedMoves", new IntValue()));
            variableCreator.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = mainLoop;

            mainLoop.MoveGeneratorParameter.ActualName     = MoveGeneratorParameter.Name;
            mainLoop.MoveMakerParameter.ActualName         = MoveMakerParameter.Name;
            mainLoop.MoveEvaluatorParameter.ActualName     = MoveEvaluatorParameter.Name;
            mainLoop.TabuCheckerParameter.ActualName       = TabuCheckerParameter.Name;
            mainLoop.TabuMakerParameter.ActualName         = TabuMakerParameter.Name;
            mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
            mainLoop.RandomParameter.ActualName            = RandomCreator.RandomParameter.ActualName;
            mainLoop.ResultsParameter.ActualName           = "Results";
            mainLoop.AnalyzerParameter.ActualName          = AnalyzerParameter.Name;
            mainLoop.EvaluatedMovesParameter.ActualName    = "EvaluatedMoves";

            moveQualityAnalyzer      = new BestAverageWorstQualityAnalyzer();
            tabuNeighborhoodAnalyzer = new TabuNeighborhoodAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            Initialize();
        }
Ejemplo n.º 7
0
 private ParticleSwarmOptimization(ParticleSwarmOptimization original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer  = cloner.Clone(original.qualityAnalyzer);
     solutionsCreator = cloner.Clone(original.solutionsCreator);
     mainLoop         = cloner.Clone(original.mainLoop);
     Initialize();
 }
Ejemplo n.º 8
0
 private SimulatedAnnealingImprovementOperator(SimulatedAnnealingImprovementOperator original, Cloner cloner)
     : base(original, cloner)
 {
     this.problem         = cloner.Clone(original.problem);
     this.loop            = cloner.Clone(original.loop);
     this.qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
     RegisterEventHandlers();
 }
 private LocalSearchImprovementOperator(LocalSearchImprovementOperator original, Cloner cloner)
     : base(original, cloner)
 {
     this.loop            = cloner.Clone(original.loop);
     this.qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
     this.problem         = cloner.Clone(original.problem);
     RegisterEventHandlers();
 }
Ejemplo n.º 10
0
 private RobustTabooSearch(RobustTabooSearch original, Cloner cloner)
     : base(original, cloner)
 {
     solutionsCreator = cloner.Clone(original.solutionsCreator);
     mainOperator     = cloner.Clone(original.mainOperator);
     qualityAnalyzer  = cloner.Clone(original.qualityAnalyzer);
     RegisterEventHandlers();
 }
 private OffspringSelectionGeneticAlgorithm(OffspringSelectionGeneticAlgorithm original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer             = cloner.Clone(original.qualityAnalyzer);
     selectionPressureAnalyzer   = cloner.Clone(original.selectionPressureAnalyzer);
     successfulOffspringAnalyzer = cloner.Clone(original.successfulOffspringAnalyzer);
     Initialize();
 }
Ejemplo n.º 12
0
 private RAPGA(RAPGA original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer           = cloner.Clone(original.qualityAnalyzer);
     populationSizeAnalyzer    = cloner.Clone(original.populationSizeAnalyzer);
     offspringSuccessAnalyzer  = cloner.Clone(original.offspringSuccessAnalyzer);
     selectionPressureAnalyzer = cloner.Clone(original.selectionPressureAnalyzer);
     Initialize();
 }
Ejemplo n.º 13
0
        public LocalSearch()
            : base()
        {
            Parameters.Add(new ValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new ValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ConstrainedValueParameter <IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));
            Parameters.Add(new ConstrainedValueParameter <IMoveMaker>("MoveMaker", "The operator used to perform a move."));
            Parameters.Add(new ConstrainedValueParameter <ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
            Parameters.Add(new ValueParameter <IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000)));
            Parameters.Add(new ValueParameter <IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(100)));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the solution and moves.", new MultiAnalyzer()));

            RandomCreator       randomCreator    = new RandomCreator();
            SolutionsCreator    solutionsCreator = new SolutionsCreator();
            VariableCreator     variableCreator  = new VariableCreator();
            ResultsCollector    resultsCollector = new ResultsCollector();
            LocalSearchMainLoop mainLoop         = new LocalSearchMainLoop();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = solutionsCreator;

            solutionsCreator.NumberOfSolutions = new IntValue(1);
            solutionsCreator.Successor         = variableCreator;

            variableCreator.Name = "Initialize EvaluatedMoves";
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedMoves", new IntValue()));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("Iterations", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <DoubleValue>("BestQuality", new DoubleValue(0)));
            variableCreator.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = mainLoop;

            mainLoop.MoveGeneratorParameter.ActualName     = MoveGeneratorParameter.Name;
            mainLoop.MoveMakerParameter.ActualName         = MoveMakerParameter.Name;
            mainLoop.MoveEvaluatorParameter.ActualName     = MoveEvaluatorParameter.Name;
            mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
            mainLoop.RandomParameter.ActualName            = RandomCreator.RandomParameter.ActualName;
            mainLoop.ResultsParameter.ActualName           = "Results";
            mainLoop.AnalyzerParameter.ActualName          = AnalyzerParameter.Name;
            mainLoop.EvaluatedMovesParameter.ActualName    = "EvaluatedMoves";
            mainLoop.IterationsParameter.ActualName        = "Iterations";
            mainLoop.BestLocalQualityParameter.ActualName  = "BestQuality";

            moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            Initialize();
        }
Ejemplo n.º 14
0
 private RandomSearchAlgorithm(RandomSearchAlgorithm original, Cloner cloner)
     : base(original, cloner)
 {
     singleObjectiveQualityAnalyzer = cloner.Clone(original.singleObjectiveQualityAnalyzer);
     evaluationsTerminator          = cloner.Clone(original.evaluationsTerminator);
     qualityTerminator       = cloner.Clone(original.qualityTerminator);
     executionTimeTerminator = cloner.Clone(original.executionTimeTerminator);
     Initialize();
 }
Ejemplo n.º 15
0
 private SASEGASA(SASEGASA original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer                  = cloner.Clone(original.qualityAnalyzer);
     villageQualityAnalyzer           = cloner.Clone(original.villageQualityAnalyzer);
     selectionPressureAnalyzer        = cloner.Clone(original.selectionPressureAnalyzer);
     villageSelectionPressureAnalyzer = cloner.Clone(original.villageSelectionPressureAnalyzer);
     successfulOffspringAnalyzer      = cloner.Clone(original.successfulOffspringAnalyzer);
     Initialize();
 }
Ejemplo n.º 16
0
 private CMAEvolutionStrategy(CMAEvolutionStrategy original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer           = cloner.Clone(original.qualityAnalyzer);
     cmaAnalyzer               = cloner.Clone(original.cmaAnalyzer);
     solutionCreator           = cloner.Clone(original.solutionCreator);
     populationSolutionCreator = cloner.Clone(original.populationSolutionCreator);
     evaluator  = cloner.Clone(original.evaluator);
     sorter     = cloner.Clone(original.sorter);
     terminator = cloner.Clone(original.terminator);
     RegisterEventHandlers();
 }
Ejemplo n.º 17
0
 private AlpsGeneticAlgorithm(AlpsGeneticAlgorithm original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer              = cloner.Clone(original.qualityAnalyzer);
     layerQualityAnalyzer         = cloner.Clone(original.layerQualityAnalyzer);
     ageAnalyzer                  = cloner.Clone(original.ageAnalyzer);
     layerAgeAnalyzer             = cloner.Clone(original.layerAgeAnalyzer);
     ageDistributionAnalyzer      = cloner.Clone(original.ageDistributionAnalyzer);
     layerAgeDistributionAnalyzer = cloner.Clone(original.layerAgeDistributionAnalyzer);
     generationsTerminator        = cloner.Clone(original.generationsTerminator);
     evaluationsTerminator        = cloner.Clone(original.evaluationsTerminator);
     qualityTerminator            = cloner.Clone(original.qualityTerminator);
     executionTimeTerminator      = cloner.Clone(original.executionTimeTerminator);
     Initialize();
 }
Ejemplo n.º 18
0
 private AlpsOffspringSelectionGeneticAlgorithm(AlpsOffspringSelectionGeneticAlgorithm original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer                = cloner.Clone(original.qualityAnalyzer);
     layerQualityAnalyzer           = cloner.Clone(original.layerQualityAnalyzer);
     ageAnalyzer                    = cloner.Clone(original.ageAnalyzer);
     layerAgeAnalyzer               = cloner.Clone(original.layerAgeAnalyzer);
     ageDistributionAnalyzer        = cloner.Clone(original.ageDistributionAnalyzer);
     layerAgeDistributionAnalyzer   = cloner.Clone(original.layerAgeDistributionAnalyzer);
     selectionPressureAnalyzer      = cloner.Clone(original.selectionPressureAnalyzer);
     layerSelectionPressureAnalyzer = cloner.Clone(original.layerSelectionPressureAnalyzer);
     currentSuccessRatioAnalyzer    = cloner.Clone(original.currentSuccessRatioAnalyzer);
     generationsTerminator          = cloner.Clone(original.generationsTerminator);
     evaluationsTerminator          = cloner.Clone(original.evaluationsTerminator);
     qualityTerminator              = cloner.Clone(original.qualityTerminator);
     executionTimeTerminator        = cloner.Clone(original.executionTimeTerminator);
     Initialize();
 }
        public LocalSearchImprovementOperator()
            : base()
        {
            Parameters.Add(new ConstrainedValueParameter <IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));
            Parameters.Add(new ConstrainedValueParameter <IMoveMaker>("MoveMaker", "The operator used to perform a move."));
            Parameters.Add(new ConstrainedValueParameter <ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
            Parameters.Add(new ValueLookupParameter <IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(150)));
            Parameters.Add(new ValueLookupParameter <IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(300)));
            Parameters.Add(new LookupParameter <IntValue>("EvaluatedSolutions", "The number of evaluated moves."));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer()));
            Parameters.Add(new LookupParameter <ResultCollection>("Results", "The name of the collection where the results are stored."));
            Parameters.Add(new ScopeTreeLookupParameter <DoubleValue>("Quality", "The quality/fitness value of a solution."));
            Parameters.Add(new LookupParameter <IRandom>("Random", "The random number generator to use."));

            loop = new LocalSearchMainLoop();
            ((ResultsCollector)((SingleSuccessorOperator)loop.OperatorGraph.InitialOperator).Successor).CollectedValues.Remove(loop.BestLocalQualityParameter.Name);
            ParameterizeLSMainLoop();

            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            Analyzer.Operators.Add(qualityAnalyzer);

            RegisterEventHandlers();
        }
Ejemplo n.º 20
0
        public CMAEvolutionStrategy()
            : base()
        {
            Parameters.Add(new FixedValueParameter <IntValue>(SeedName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new FixedValueParameter <BoolValue>(SetSeedRandomlyName, "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new FixedValueParameter <IntValue>(PopulationSizeName, "λ (lambda) - the size of the offspring population.", new IntValue(20)));
            Parameters.Add(new FixedValueParameter <IntValue>(InitialIterationsName, "The number of iterations that should be performed with only axis parallel mutation.", new IntValue(0)));
            Parameters.Add(new FixedValueParameter <DoubleArray>(InitialSigmaName, "The initial sigma can be a single value or a value for each dimension. All values need to be > 0.", new DoubleArray(new[] { 0.5 })));
            Parameters.Add(new OptionalValueParameter <IntValue>(MuName, "Optional, the mu best offspring that should be considered for update of the new mean and strategy parameters. If not given it will be automatically calculated."));
            Parameters.Add(new ConstrainedValueParameter <ICMARecombinator>(CMARecombinatorName, "The operator used to calculate the new mean."));
            Parameters.Add(new ConstrainedValueParameter <ICMAManipulator>(CMAMutatorName, "The operator used to manipulate a point."));
            Parameters.Add(new ConstrainedValueParameter <ICMAInitializer>(CMAInitializerName, "The operator that initializes the covariance matrix and strategy parameters."));
            Parameters.Add(new ConstrainedValueParameter <ICMAUpdater>(CMAUpdaterName, "The operator that updates the covariance matrix and strategy parameters."));
            Parameters.Add(new ValueParameter <MultiAnalyzer>(AnalyzerName, "The operator used to analyze each generation.", new MultiAnalyzer()));
            Parameters.Add(new FixedValueParameter <IntValue>(MaximumGenerationsName, "The maximum number of generations which should be processed.", new IntValue(1000)));
            Parameters.Add(new FixedValueParameter <IntValue>(MaximumEvaluatedSolutionsName, "The maximum number of evaluated solutions that should be computed.", new IntValue(int.MaxValue)));
            Parameters.Add(new FixedValueParameter <DoubleValue>(TargetQualityName, "(stopFitness) Surpassing this quality value terminates the algorithm.", new DoubleValue(double.NaN)));
            Parameters.Add(new FixedValueParameter <DoubleValue>(MinimumQualityChangeName, "(stopTolFun) If the range of fitness values is less than a certain value the algorithm terminates (set to 0 or positive value to enable).", new DoubleValue(double.NaN)));
            Parameters.Add(new FixedValueParameter <DoubleValue>(MinimumQualityHistoryChangeName, "(stopTolFunHist) If the range of fitness values is less than a certain value for a certain time the algorithm terminates (set to 0 or positive to enable).", new DoubleValue(double.NaN)));
            Parameters.Add(new FixedValueParameter <DoubleValue>(MinimumStandardDeviationName, "(stopTolXFactor) If the standard deviation falls below a certain value the algorithm terminates (set to 0 or positive to enable).", new DoubleValue(double.NaN)));
            Parameters.Add(new FixedValueParameter <DoubleValue>(MaximumStandardDeviationChangeName, "(stopTolUpXFactor) If the standard deviation changes by a value larger than this parameter the algorithm stops (set to a value > 0 to enable).", new DoubleValue(double.NaN)));

            var randomCreator    = new RandomCreator();
            var variableCreator  = new VariableCreator();
            var resultsCollector = new ResultsCollector();
            var cmaInitializer   = new Placeholder();

            solutionCreator = new Placeholder();
            var subScopesCreator = new SubScopesCreator();
            var ussp1            = new UniformSubScopesProcessor();

            populationSolutionCreator = new Placeholder();
            var cmaMutator = new Placeholder();
            var ussp2      = new UniformSubScopesProcessor();

            evaluator = new Placeholder();
            var subScopesCounter = new SubScopesCounter();

            sorter = new SubScopesSorter();
            var analyzer           = new Placeholder();
            var cmaRecombinator    = new Placeholder();
            var generationsCounter = new IntCounter();
            var cmaUpdater         = new Placeholder();

            terminator = new Terminator();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = variableCreator;

            variableCreator.Name = "Initialize Variables";
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("Generations", new IntValue(0)));
            variableCreator.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("EvaluatedSolutions"));
            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Generations"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = cmaInitializer;

            cmaInitializer.Name = "Initialize Strategy Parameters";
            cmaInitializer.OperatorParameter.ActualName = CMAInitializerParameter.Name;
            cmaInitializer.Successor = subScopesCreator;

            subScopesCreator.NumberOfSubScopesParameter.ActualName = PopulationSizeParameter.Name;
            subScopesCreator.Successor = ussp1;

            ussp1.Name      = "Create population";
            ussp1.Parallel  = new BoolValue(false);
            ussp1.Operator  = populationSolutionCreator;
            ussp1.Successor = solutionCreator;

            populationSolutionCreator.Name = "Initialize arx";
            // populationSolutionCreator.OperatorParameter will be wired
            populationSolutionCreator.Successor = null;

            solutionCreator.Name = "Initialize xmean";
            // solutionCreator.OperatorParameter will be wired
            solutionCreator.Successor = cmaMutator;

            cmaMutator.Name = "Sample population";
            cmaMutator.OperatorParameter.ActualName = CMAMutatorParameter.Name;
            cmaMutator.Successor = ussp2;

            ussp2.Name      = "Evaluate offspring";
            ussp2.Parallel  = new BoolValue(true);
            ussp2.Operator  = evaluator;
            ussp2.Successor = subScopesCounter;

            evaluator.Name = "Evaluator";
            // evaluator.OperatorParameter will be wired
            evaluator.Successor = null;

            subScopesCounter.Name = "Count EvaluatedSolutions";
            subScopesCounter.AccumulateParameter.Value = new BoolValue(true);
            subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
            subScopesCounter.Successor = sorter;

            // sorter.ValueParameter will be wired
            // sorter.DescendingParameter will be wired
            sorter.Successor = analyzer;

            analyzer.Name = "Analyzer";
            analyzer.OperatorParameter.ActualName = AnalyzerParameter.Name;
            analyzer.Successor = cmaRecombinator;

            cmaRecombinator.Name = "Create new xmean";
            cmaRecombinator.OperatorParameter.ActualName = CMARecombinatorParameter.Name;
            cmaRecombinator.Successor = generationsCounter;

            generationsCounter.Name = "Generations++";
            generationsCounter.IncrementParameter.Value  = new IntValue(1);
            generationsCounter.ValueParameter.ActualName = "Generations";
            generationsCounter.Successor = cmaUpdater;

            cmaUpdater.Name = "Update distributions";
            cmaUpdater.OperatorParameter.ActualName = CMAUpdaterParameter.Name;
            cmaUpdater.Successor = terminator;

            terminator.Continue  = cmaMutator;
            terminator.Terminate = null;

            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            cmaAnalyzer     = new CMAAnalyzer();

            InitializeOperators();
            RegisterEventHandlers();
            Parameterize();
        }
Ejemplo n.º 21
0
 private EvolutionStrategy(EvolutionStrategy original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
     Initialize();
 }
Ejemplo n.º 22
0
 private ScatterSearch(ScatterSearch original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
     Initialize();
 }
Ejemplo n.º 23
0
        public AlpsOffspringSelectionGeneticAlgorithm()
            : base()
        {
            #region Add parameters
            Parameters.Add(new FixedValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new FixedValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));

            Parameters.Add(new FixedValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze all individuals from all layers combined.", new MultiAnalyzer()));
            Parameters.Add(new FixedValueParameter <MultiAnalyzer>("LayerAnalyzer", "The operator used to analyze each layer.", new MultiAnalyzer()));

            Parameters.Add(new FixedValueParameter <IntValue>("NumberOfLayers", "The number of layers.", new IntValue(10)));
            Parameters.Add(new FixedValueParameter <IntValue>("PopulationSize", "The size of the population of solutions in each layer.", new IntValue(100)));

            Parameters.Add(new ConstrainedValueParameter <ISelector>("Selector", "The operator used to select solutions for reproduction."));
            Parameters.Add(new ConstrainedValueParameter <ICrossover>("Crossover", "The operator used to cross solutions."));
            Parameters.Add(new ConstrainedValueParameter <IManipulator>("Mutator", "The operator used to mutate solutions."));
            Parameters.Add(new FixedValueParameter <PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
            Parameters.Add(new FixedValueParameter <IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
            Parameters.Add(new FixedValueParameter <BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false))
            {
                Hidden = true
            });

            Parameters.Add(new FixedValueParameter <DoubleValue>("SuccessRatio", "The ratio of successful to total children that should be achieved.", new DoubleValue(1)));
            Parameters.Add(new FixedValueParameter <DoubleValue>("ComparisonFactor", "The comparison factor is used to determine whether the offspring should be compared to the better parent, the worse parent or a quality value linearly interpolated between them. It is in the range [0;1].", new DoubleValue(1)));
            Parameters.Add(new FixedValueParameter <DoubleValue>("MaximumSelectionPressure", "The maximum selection pressure that terminates the algorithm.", new DoubleValue(100)));
            Parameters.Add(new FixedValueParameter <BoolValue>("OffspringSelectionBeforeMutation", "True if the offspring selection step should be applied before mutation, false if it should be applied after mutation.", new BoolValue(false)));
            Parameters.Add(new FixedValueParameter <IntValue>("SelectedParents", "How much parents should be selected each time the offspring selection step is performed until the population is filled. This parameter should be about the same or twice the size of PopulationSize for smaller problems, and less for large problems.", new IntValue(200)));
            Parameters.Add(new FixedValueParameter <BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individual or false if worse children should be used when the maximum selection pressure is exceeded.", new BoolValue(false))
            {
                Hidden = true
            });

            Parameters.Add(new FixedValueParameter <EnumValue <AgingScheme> >("AgingScheme", "The aging scheme for setting the age-limits for the layers.", new EnumValue <AgingScheme>(ALPS.AgingScheme.Polynomial)));
            Parameters.Add(new FixedValueParameter <IntValue>("AgeGap", "The frequency of reseeding the lowest layer and scaling factor for the age-limits for the layers.", new IntValue(20)));
            Parameters.Add(new FixedValueParameter <DoubleValue>("AgeInheritance", "A weight that determines the age of a child after crossover based on the older (1.0) and younger (0.0) parent.", new DoubleValue(1.0))
            {
                Hidden = true
            });
            Parameters.Add(new FixedValueParameter <IntArray>("AgeLimits", "The maximum age an individual is allowed to reach in a certain layer.", new IntArray(new int[0]))
            {
                Hidden = true
            });

            Parameters.Add(new FixedValueParameter <IntValue>("MatingPoolRange", "The range of layers used for creating a mating pool. (1 = current + previous layer)", new IntValue(1))
            {
                Hidden = true
            });
            Parameters.Add(new FixedValueParameter <BoolValue>("ReduceToPopulationSize", "Reduce the CurrentPopulationSize after elder migration to PopulationSize", new BoolValue(true))
            {
                Hidden = true
            });

            Parameters.Add(new FixedValueParameter <MultiTerminator>("Terminator", "The termination criteria that defines if the algorithm should continue or stop.", new MultiTerminator()));
            #endregion

            #region Create operators
            var globalRandomCreator = new RandomCreator();
            var layer0Creator       = new SubScopesCreator()
            {
                Name = "Create Layer Zero"
            };
            var layer0Processor        = new SubScopesProcessor();
            var localRandomCreator     = new LocalRandomCreator();
            var layerSolutionsCreator  = new SolutionsCreator();
            var initializeAgeProcessor = new UniformSubScopesProcessor();
            var initializeAge          = new VariableCreator()
            {
                Name = "Initialize Age"
            };
            var initializeCurrentPopulationSize = new SubScopesCounter()
            {
                Name = "Initialize CurrentPopulationCounter"
            };
            var initializeLocalEvaluatedSolutions = new Assigner()
            {
                Name = "Initialize LayerEvaluatedSolutions"
            };
            var initializeGlobalEvaluatedSolutions = new DataReducer()
            {
                Name = "Initialize EvaluatedSolutions"
            };
            var resultsCollector = new ResultsCollector();
            var mainLoop         = new AlpsOffspringSelectionGeneticAlgorithmMainLoop();
            #endregion

            #region Create and parameterize operator graph
            OperatorGraph.InitialOperator = globalRandomCreator;

            globalRandomCreator.RandomParameter.ActualName          = "GlobalRandom";
            globalRandomCreator.SeedParameter.Value                 = null;
            globalRandomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            globalRandomCreator.SetSeedRandomlyParameter.Value      = null;
            globalRandomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            globalRandomCreator.Successor = layer0Creator;

            layer0Creator.NumberOfSubScopesParameter.Value = new IntValue(1);
            layer0Creator.Successor = layer0Processor;

            layer0Processor.Operators.Add(localRandomCreator);
            layer0Processor.Successor = initializeGlobalEvaluatedSolutions;

            localRandomCreator.Successor = layerSolutionsCreator;

            layerSolutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
            layerSolutionsCreator.Successor = initializeAgeProcessor;

            initializeAgeProcessor.Operator  = initializeAge;
            initializeAgeProcessor.Successor = initializeCurrentPopulationSize;

            initializeCurrentPopulationSize.ValueParameter.ActualName = "CurrentPopulationSize";
            initializeCurrentPopulationSize.Successor = initializeLocalEvaluatedSolutions;

            initializeAge.CollectedValues.Add(new ValueParameter <DoubleValue>("Age", new DoubleValue(0)));
            initializeAge.Successor = null;

            initializeLocalEvaluatedSolutions.LeftSideParameter.ActualName  = "LayerEvaluatedSolutions";
            initializeLocalEvaluatedSolutions.RightSideParameter.ActualName = "CurrentPopulationSize";
            initializeLocalEvaluatedSolutions.Successor = null;

            initializeGlobalEvaluatedSolutions.ReductionOperation.Value.Value = ReductionOperations.Sum;
            initializeGlobalEvaluatedSolutions.TargetOperation.Value.Value    = ReductionOperations.Assign;
            initializeGlobalEvaluatedSolutions.ParameterToReduce.ActualName   = "LayerEvaluatedSolutions";
            initializeGlobalEvaluatedSolutions.TargetParameter.ActualName     = "EvaluatedSolutions";
            initializeGlobalEvaluatedSolutions.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
            resultsCollector.Successor = mainLoop;

            mainLoop.GlobalRandomParameter.ActualName          = "GlobalRandom";
            mainLoop.LocalRandomParameter.ActualName           = localRandomCreator.LocalRandomParameter.Name;
            mainLoop.EvaluatedSolutionsParameter.ActualName    = "EvaluatedSolutions";
            mainLoop.AnalyzerParameter.ActualName              = AnalyzerParameter.Name;
            mainLoop.LayerAnalyzerParameter.ActualName         = LayerAnalyzerParameter.Name;
            mainLoop.NumberOfLayersParameter.ActualName        = NumberOfLayersParameter.Name;
            mainLoop.PopulationSizeParameter.ActualName        = PopulationSizeParameter.Name;
            mainLoop.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize";
            mainLoop.SelectorParameter.ActualName              = SelectorParameter.Name;
            mainLoop.CrossoverParameter.ActualName             = CrossoverParameter.Name;
            mainLoop.MutatorParameter.ActualName             = MutatorParameter.Name;
            mainLoop.MutationProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
            mainLoop.ElitesParameter.ActualName                           = ElitesParameter.Name;
            mainLoop.ReevaluateElitesParameter.ActualName                 = ReevaluateElitesParameter.Name;
            mainLoop.SuccessRatioParameter.ActualName                     = SuccessRatioParameter.Name;
            mainLoop.ComparisonFactorParameter.ActualName                 = ComparisonFactorParameter.Name;
            mainLoop.MaximumSelectionPressureParameter.ActualName         = MaximumSelectionPressureParameter.Name;
            mainLoop.OffspringSelectionBeforeMutationParameter.ActualName = OffspringSelectionBeforeMutationParameter.Name;
            mainLoop.FillPopulationWithParentsParameter.ActualName        = FillPopulationWithParentsParameter.Name;
            mainLoop.AgeParameter.ActualName                    = "Age";
            mainLoop.AgeGapParameter.ActualName                 = AgeGapParameter.Name;
            mainLoop.AgeInheritanceParameter.ActualName         = AgeInheritanceParameter.Name;
            mainLoop.AgeLimitsParameter.ActualName              = AgeLimitsParameter.Name;
            mainLoop.MatingPoolRangeParameter.ActualName        = MatingPoolRangeParameter.Name;
            mainLoop.ReduceToPopulationSizeParameter.ActualName = ReduceToPopulationSizeParameter.Name;
            mainLoop.TerminatorParameter.ActualName             = TerminatorParameter.Name;
            #endregion

            #region Set operators
            foreach (var selector in ApplicationManager.Manager.GetInstances <ISelector>().Where(s => !(s is IMultiObjectiveSelector)).OrderBy(s => Name))
            {
                SelectorParameter.ValidValues.Add(selector);
            }
            var defaultSelector = SelectorParameter.ValidValues.OfType <GeneralizedRankSelector>().FirstOrDefault();
            if (defaultSelector != null)
            {
                defaultSelector.PressureParameter.Value = new DoubleValue(4.0);
                SelectorParameter.Value = defaultSelector;
            }
            #endregion

            #region Create analyzers
            qualityAnalyzer                = new BestAverageWorstQualityAnalyzer();
            layerQualityAnalyzer           = new BestAverageWorstQualityAnalyzer();
            ageAnalyzer                    = new OldestAverageYoungestAgeAnalyzer();
            layerAgeAnalyzer               = new OldestAverageYoungestAgeAnalyzer();
            ageDistributionAnalyzer        = new AgeDistributionAnalyzer();
            layerAgeDistributionAnalyzer   = new AgeDistributionAnalyzer();
            selectionPressureAnalyzer      = new ValueAnalyzer();
            layerSelectionPressureAnalyzer = new ValueAnalyzer();
            currentSuccessRatioAnalyzer    = new ValueAnalyzer();
            #endregion

            #region Create terminators
            generationsTerminator = new ComparisonTerminator <IntValue>("Generations", ComparisonType.Less, new IntValue(1000))
            {
                Name = "Generations"
            };
            evaluationsTerminator = new ComparisonTerminator <IntValue>("EvaluatedSolutions", ComparisonType.Less, new IntValue(int.MaxValue))
            {
                Name = "Evaluations"
            };
            qualityTerminator = new SingleObjectiveQualityTerminator()
            {
                Name = "Quality"
            };
            executionTimeTerminator = new ExecutionTimeTerminator(this, new TimeSpanValue(TimeSpan.FromMinutes(5)));
            #endregion

            #region Parameterize
            UpdateAnalyzers();
            ParameterizeAnalyzers();

            ParameterizeSelectors();

            UpdateTerminators();

            ParameterizeAgeLimits();
            #endregion

            Initialize();
        }
Ejemplo n.º 24
0
        public ScatterSearch()
            : base()
        {
            #region Create parameters
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The analyzer used to analyze each iteration.", new MultiAnalyzer()));
            Parameters.Add(new ConstrainedValueParameter <ICrossover>("Crossover", "The operator used to cross solutions."));
            Parameters.Add(new ValueParameter <BoolValue>("ExecutePathRelinking", "True if path relinking should be executed instead of crossover, otherwise false.", new BoolValue(false)));
            Parameters.Add(new ConstrainedValueParameter <IImprovementOperator>("Improver", "The operator used to improve solutions."));
            Parameters.Add(new ValueParameter <IntValue>("MaximumIterations", "The maximum number of iterations which should be processed.", new IntValue(100)));
            Parameters.Add(new ValueParameter <IntValue>("NumberOfHighQualitySolutions", "The number of high quality solutions in the reference set.", new IntValue(5)));
            Parameters.Add(new ConstrainedValueParameter <IPathRelinker>("PathRelinker", "The operator used to execute path relinking."));
            Parameters.Add(new ValueParameter <IntValue>("PopulationSize", "The size of the population of solutions.", new IntValue(50)));
            Parameters.Add(new ValueParameter <IntValue>("ReferenceSetSize", "The size of the reference set.", new IntValue(20)));
            Parameters.Add(new ValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new ValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ConstrainedValueParameter <ISolutionSimilarityCalculator>("SimilarityCalculator", "The operator used to calculate the similarity between two solutions."));
            #endregion

            #region Create operators
            RandomCreator             randomCreator             = new RandomCreator();
            SolutionsCreator          solutionsCreator          = new SolutionsCreator();
            UniformSubScopesProcessor uniformSubScopesProcessor = new UniformSubScopesProcessor();
            Placeholder           solutionEvaluator             = new Placeholder();
            Placeholder           solutionImprover = new Placeholder();
            VariableCreator       variableCreator  = new VariableCreator();
            DataReducer           dataReducer      = new DataReducer();
            ResultsCollector      resultsCollector = new ResultsCollector();
            BestSelector          bestSelector     = new BestSelector();
            ScatterSearchMainLoop mainLoop         = new ScatterSearchMainLoop();
            #endregion

            #region Create operator graph
            OperatorGraph.InitialOperator                     = randomCreator;
            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = solutionsCreator;

            solutionsCreator.Name = "DiversificationGenerationMethod";
            solutionsCreator.NumberOfSolutionsParameter.ActualName = "PopulationSize";
            solutionsCreator.Successor = uniformSubScopesProcessor;

            uniformSubScopesProcessor.Operator = solutionImprover;
            uniformSubScopesProcessor.ParallelParameter.Value = new BoolValue(true);
            uniformSubScopesProcessor.Successor = variableCreator;

            solutionImprover.Name = "SolutionImprover";
            solutionImprover.OperatorParameter.ActualName = "Improver";
            solutionImprover.Successor = solutionEvaluator;

            solutionEvaluator.Name = "SolutionEvaluator";
            solutionEvaluator.OperatorParameter.ActualName = "Evaluator";
            solutionEvaluator.Successor = null;

            variableCreator.Name = "Initialize EvaluatedSolutions";
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue()));
            variableCreator.Successor = dataReducer;

            dataReducer.Name = "Increment EvaluatedSolutions";
            dataReducer.ParameterToReduce.ActualName = "LocalEvaluatedSolutions";
            dataReducer.TargetParameter.ActualName   = "EvaluatedSolutions";
            dataReducer.ReductionOperation.Value     = new ReductionOperation(ReductionOperations.Sum);
            dataReducer.TargetOperation.Value        = new ReductionOperation(ReductionOperations.Sum);
            dataReducer.Successor = resultsCollector;

            resultsCollector.Name = "ResultsCollector";
            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("EvaluatedSolutions", null, "EvaluatedSolutions"));
            resultsCollector.Successor = bestSelector;

            bestSelector.NumberOfSelectedSubScopesParameter.ActualName = NumberOfHighQualitySolutionsParameter.Name;
            bestSelector.CopySelected = new BoolValue(false);
            bestSelector.Successor    = mainLoop;

            mainLoop.MaximumIterationsParameter.ActualName            = MaximumIterationsParameter.Name;
            mainLoop.RandomParameter.ActualName                       = randomCreator.RandomParameter.ActualName;
            mainLoop.ResultsParameter.ActualName                      = "Results";
            mainLoop.AnalyzerParameter.ActualName                     = AnalyzerParameter.Name;
            mainLoop.IterationsParameter.ActualName                   = "Iterations";
            mainLoop.EvaluatedSolutionsParameter.ActualName           = "EvaluatedSolutions";
            mainLoop.CrossoverParameter.ActualName                    = CrossoverParameter.Name;
            mainLoop.PopulationSizeParameter.ActualName               = PopulationSizeParameter.Name;
            mainLoop.NumberOfHighQualitySolutionsParameter.ActualName = NumberOfHighQualitySolutionsParameter.Name;
            mainLoop.Successor = null;
            #endregion

            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            Initialize();
        }
Ejemplo n.º 25
0
 private void InitializeAnalyzers()
 {
     qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
     qualityAnalyzer.ResultsParameter.ActualName = "Results";
     ParameterizeAnalyzers();
 }
Ejemplo n.º 26
0
        public IslandGeneticAlgorithm()
            : base()
        {
            Parameters.Add(new ValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new ValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ValueParameter <IntValue>("NumberOfIslands", "The number of islands.", new IntValue(5)));
            Parameters.Add(new ValueParameter <IntValue>("MigrationInterval", "The number of generations that should pass between migration phases.", new IntValue(20)));
            Parameters.Add(new ValueParameter <PercentValue>("MigrationRate", "The proportion of individuals that should migrate between the islands.", new PercentValue(0.15)));
            Parameters.Add(new ConstrainedValueParameter <IMigrator>("Migrator", "The migration strategy."));
            Parameters.Add(new ConstrainedValueParameter <ISelector>("EmigrantsSelector", "Selects the individuals that will be migrated."));
            Parameters.Add(new ConstrainedValueParameter <IReplacer>("ImmigrationReplacer", "Selects the population from the unification of the original population and the immigrants."));
            Parameters.Add(new ValueParameter <IntValue>("PopulationSize", "The size of the population of solutions.", new IntValue(100)));
            Parameters.Add(new ValueParameter <IntValue>("MaximumGenerations", "The maximum number of generations that should be processed.", new IntValue(1000)));
            Parameters.Add(new ConstrainedValueParameter <ISelector>("Selector", "The operator used to select solutions for reproduction."));
            Parameters.Add(new ConstrainedValueParameter <ICrossover>("Crossover", "The operator used to cross solutions."));
            Parameters.Add(new ValueParameter <PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
            Parameters.Add(new OptionalConstrainedValueParameter <IManipulator>("Mutator", "The operator used to mutate solutions."));
            Parameters.Add(new ValueParameter <IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
            Parameters.Add(new FixedValueParameter <BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false))
            {
                Hidden = true
            });
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the islands.", new MultiAnalyzer()));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("IslandAnalyzer", "The operator used to analyze each island.", new MultiAnalyzer()));

            RandomCreator                  randomCreator        = new RandomCreator();
            UniformSubScopesProcessor      ussp0                = new UniformSubScopesProcessor();
            LocalRandomCreator             localRandomCreator   = new LocalRandomCreator();
            RandomCreator                  globalRandomResetter = new RandomCreator();
            SubScopesCreator               populationCreator    = new SubScopesCreator();
            UniformSubScopesProcessor      ussp1                = new UniformSubScopesProcessor();
            SolutionsCreator               solutionsCreator     = new SolutionsCreator();
            VariableCreator                variableCreator      = new VariableCreator();
            UniformSubScopesProcessor      ussp2                = new UniformSubScopesProcessor();
            SubScopesCounter               subScopesCounter     = new SubScopesCounter();
            ResultsCollector               resultsCollector     = new ResultsCollector();
            IslandGeneticAlgorithmMainLoop mainLoop             = new IslandGeneticAlgorithmMainLoop();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "GlobalRandom";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = populationCreator;

            populationCreator.NumberOfSubScopesParameter.ActualName = NumberOfIslandsParameter.Name;
            populationCreator.Successor = ussp0;

            ussp0.Operator  = localRandomCreator;
            ussp0.Successor = globalRandomResetter;

            // BackwardsCompatibility3.3
            // the global random is resetted to ensure the same algorithm results
            #region Backwards compatible code, remove global random resetter with 3.4 and rewire the operator graph
            globalRandomResetter.RandomParameter.ActualName     = "GlobalRandom";
            globalRandomResetter.SeedParameter.ActualName       = SeedParameter.Name;
            globalRandomResetter.SeedParameter.Value            = null;
            globalRandomResetter.SetSeedRandomlyParameter.Value = new BoolValue(false);
            globalRandomResetter.Successor = ussp1;
            #endregion

            ussp1.Operator  = solutionsCreator;
            ussp1.Successor = variableCreator;

            solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
            //don't create solutions in parallel because the hive engine would distribute these tasks
            solutionsCreator.ParallelParameter.Value = new BoolValue(false);
            solutionsCreator.Successor = null;

            variableCreator.Name = "Initialize EvaluatedSolutions";
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue()));
            variableCreator.Successor = ussp2;

            ussp2.Operator  = subScopesCounter;
            ussp2.Successor = resultsCollector;

            subScopesCounter.Name = "Count EvaluatedSolutions";
            subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
            subScopesCounter.Successor = null;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = mainLoop;

            mainLoop.EmigrantsSelectorParameter.ActualName   = EmigrantsSelectorParameter.Name;
            mainLoop.ImmigrationReplacerParameter.ActualName = ImmigrationReplacerParameter.Name;
            mainLoop.MaximumGenerationsParameter.ActualName  = MaximumGenerationsParameter.Name;
            mainLoop.MigrationIntervalParameter.ActualName   = MigrationIntervalParameter.Name;
            mainLoop.MigrationRateParameter.ActualName       = MigrationRateParameter.Name;
            mainLoop.MigratorParameter.ActualName            = MigratorParameter.Name;
            mainLoop.NumberOfIslandsParameter.ActualName     = NumberOfIslandsParameter.Name;
            mainLoop.SelectorParameter.ActualName            = SelectorParameter.Name;
            mainLoop.CrossoverParameter.ActualName           = CrossoverParameter.Name;
            mainLoop.ElitesParameter.ActualName              = ElitesParameter.Name;
            mainLoop.ReevaluateElitesParameter.ActualName    = ReevaluateElitesParameter.Name;
            mainLoop.MutatorParameter.ActualName             = MutatorParameter.Name;
            mainLoop.MutationProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
            mainLoop.RandomParameter.ActualName              = randomCreator.RandomParameter.ActualName;
            mainLoop.ResultsParameter.ActualName             = "Results";
            mainLoop.AnalyzerParameter.ActualName            = AnalyzerParameter.Name;
            mainLoop.IslandAnalyzerParameter.ActualName      = IslandAnalyzerParameter.Name;
            mainLoop.EvaluatedSolutionsParameter.ActualName  = "EvaluatedSolutions";
            mainLoop.Successor = null;

            foreach (ISelector selector in ApplicationManager.Manager.GetInstances <ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name))
            {
                SelectorParameter.ValidValues.Add(selector);
            }
            ISelector proportionalSelector = SelectorParameter.ValidValues.FirstOrDefault(x => x.GetType().Name.Equals("ProportionalSelector"));
            if (proportionalSelector != null)
            {
                SelectorParameter.Value = proportionalSelector;
            }

            foreach (ISelector selector in ApplicationManager.Manager.GetInstances <ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name))
            {
                EmigrantsSelectorParameter.ValidValues.Add(selector);
            }

            foreach (IReplacer replacer in ApplicationManager.Manager.GetInstances <IReplacer>().OrderBy(x => x.Name))
            {
                ImmigrationReplacerParameter.ValidValues.Add(replacer);
            }

            ParameterizeSelectors();

            foreach (IMigrator migrator in ApplicationManager.Manager.GetInstances <IMigrator>().OrderBy(x => x.Name))
            {
                // BackwardsCompatibility3.3
                // Set the migration direction to counterclockwise
                var unidirectionalRing = migrator as UnidirectionalRingMigrator;
                if (unidirectionalRing != null)
                {
                    unidirectionalRing.ClockwiseMigrationParameter.Value = new BoolValue(false);
                }
                MigratorParameter.ValidValues.Add(migrator);
            }

            qualityAnalyzer       = new BestAverageWorstQualityAnalyzer();
            islandQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            Initialize();
        }
Ejemplo n.º 27
0
        public GeneticAlgorithm()
            : base()
        {
            Parameters.Add(new ValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new ValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ValueParameter <IntValue>("PopulationSize", "The size of the population of solutions.", new IntValue(100)));
            Parameters.Add(new ConstrainedValueParameter <ISelector>("Selector", "The operator used to select solutions for reproduction."));
            Parameters.Add(new ConstrainedValueParameter <ICrossover>("Crossover", "The operator used to cross solutions."));
            Parameters.Add(new ValueParameter <PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
            Parameters.Add(new OptionalConstrainedValueParameter <IManipulator>("Mutator", "The operator used to mutate solutions."));
            Parameters.Add(new ValueParameter <IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
            Parameters.Add(new FixedValueParameter <BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false))
            {
                Hidden = true
            });
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze each generation.", new MultiAnalyzer()));
            Parameters.Add(new ValueParameter <IntValue>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntValue(1000)));

            RandomCreator            randomCreator    = new RandomCreator();
            SolutionsCreator         solutionsCreator = new SolutionsCreator();
            SubScopesCounter         subScopesCounter = new SubScopesCounter();
            ResultsCollector         resultsCollector = new ResultsCollector();
            GeneticAlgorithmMainLoop mainLoop         = new GeneticAlgorithmMainLoop();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = solutionsCreator;

            solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
            solutionsCreator.Successor = subScopesCounter;

            subScopesCounter.Name = "Initialize EvaluatedSolutions";
            subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
            subScopesCounter.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = mainLoop;

            mainLoop.SelectorParameter.ActualName            = SelectorParameter.Name;
            mainLoop.CrossoverParameter.ActualName           = CrossoverParameter.Name;
            mainLoop.ElitesParameter.ActualName              = ElitesParameter.Name;
            mainLoop.ReevaluateElitesParameter.ActualName    = ReevaluateElitesParameter.Name;
            mainLoop.MaximumGenerationsParameter.ActualName  = MaximumGenerationsParameter.Name;
            mainLoop.MutatorParameter.ActualName             = MutatorParameter.Name;
            mainLoop.MutationProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
            mainLoop.RandomParameter.ActualName              = RandomCreator.RandomParameter.ActualName;
            mainLoop.AnalyzerParameter.ActualName            = AnalyzerParameter.Name;
            mainLoop.EvaluatedSolutionsParameter.ActualName  = "EvaluatedSolutions";
            mainLoop.PopulationSizeParameter.ActualName      = PopulationSizeParameter.Name;
            mainLoop.ResultsParameter.ActualName             = "Results";

            foreach (ISelector selector in ApplicationManager.Manager.GetInstances <ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name))
            {
                SelectorParameter.ValidValues.Add(selector);
            }
            ISelector proportionalSelector = SelectorParameter.ValidValues.FirstOrDefault(x => x.GetType().Name.Equals("ProportionalSelector"));

            if (proportionalSelector != null)
            {
                SelectorParameter.Value = proportionalSelector;
            }
            ParameterizeSelectors();

            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            Initialize();
        }
Ejemplo n.º 28
0
        public SASEGASA()
            : base()
        {
            Parameters.Add(new ValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new ValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new ValueParameter <IntValue>("NumberOfVillages", "The initial number of villages.", new IntValue(10)));
            Parameters.Add(new ValueParameter <IntValue>("PopulationSize", "The size of the population of solutions.", new IntValue(100)));
            Parameters.Add(new ValueParameter <IntValue>("MaximumGenerations", "The maximum number of generations that should be processed.", new IntValue(1000)));
            Parameters.Add(new ConstrainedValueParameter <ISelector>("Selector", "The operator used to select solutions for reproduction."));
            Parameters.Add(new ConstrainedValueParameter <ICrossover>("Crossover", "The operator used to cross solutions."));
            Parameters.Add(new ValueParameter <PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
            Parameters.Add(new OptionalConstrainedValueParameter <IManipulator>("Mutator", "The operator used to mutate solutions."));
            Parameters.Add(new ValueParameter <IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
            Parameters.Add(new FixedValueParameter <BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false))
            {
                Hidden = true
            });
            Parameters.Add(new ValueLookupParameter <DoubleValue>("SuccessRatio", "The ratio of successful to total children that should be achieved.", new DoubleValue(1)));
            Parameters.Add(new ValueLookupParameter <DoubleValue>("ComparisonFactorLowerBound", "The lower bound of the comparison factor (start).", new DoubleValue(0.3)));
            Parameters.Add(new ValueLookupParameter <DoubleValue>("ComparisonFactorUpperBound", "The upper bound of the comparison factor (end).", new DoubleValue(0.7)));
            Parameters.Add(new OptionalConstrainedValueParameter <IDiscreteDoubleValueModifier>("ComparisonFactorModifier", "The operator used to modify the comparison factor.", new ItemSet <IDiscreteDoubleValueModifier>(new IDiscreteDoubleValueModifier[] { new LinearDiscreteDoubleValueModifier() }), new LinearDiscreteDoubleValueModifier()));
            Parameters.Add(new ValueLookupParameter <DoubleValue>("MaximumSelectionPressure", "The maximum selection pressure that terminates the algorithm.", new DoubleValue(100)));
            Parameters.Add(new ValueLookupParameter <DoubleValue>("FinalMaximumSelectionPressure", "The maximum selection pressure used when there is only one village left.", new DoubleValue(100)));
            Parameters.Add(new ValueLookupParameter <BoolValue>("OffspringSelectionBeforeMutation", "True if the offspring selection step should be applied before mutation, false if it should be applied after mutation.", new BoolValue(false)));
            Parameters.Add(new ValueLookupParameter <IntValue>("SelectedParents", "How much parents should be selected each time the offspring selection step is performed until the population is filled. This parameter should be about the same or twice the size of PopulationSize for smaller problems, and less for large problems.", new IntValue(200)));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the villages.", new MultiAnalyzer()));
            Parameters.Add(new ValueParameter <MultiAnalyzer>("VillageAnalyzer", "The operator used to analyze each village.", new MultiAnalyzer()));
            Parameters.Add(new ValueParameter <IntValue>("MaximumEvaluatedSolutions", "The maximum number of evaluated solutions (approximately).", new IntValue(int.MaxValue)));
            Parameters.Add(new FixedValueParameter <BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individual or false if worse children should be used when the maximum selection pressure is exceeded.", new BoolValue(true))
            {
                Hidden = true
            });

            RandomCreator             randomCreator     = new RandomCreator();
            SubScopesCreator          populationCreator = new SubScopesCreator();
            UniformSubScopesProcessor ussp1             = new UniformSubScopesProcessor();
            SolutionsCreator          solutionsCreator  = new SolutionsCreator();
            VariableCreator           variableCreator   = new VariableCreator();
            UniformSubScopesProcessor ussp2             = new UniformSubScopesProcessor();
            SubScopesCounter          subScopesCounter  = new SubScopesCounter();
            ResultsCollector          resultsCollector  = new ResultsCollector();
            SASEGASAMainLoop          mainLoop          = new SASEGASAMainLoop();

            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.Successor = populationCreator;

            populationCreator.NumberOfSubScopesParameter.ActualName = NumberOfVillagesParameter.Name;
            populationCreator.Successor = ussp1;

            ussp1.Operator  = solutionsCreator;
            ussp1.Successor = variableCreator;

            solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
            solutionsCreator.Successor = null;

            variableCreator.Name = "Initialize EvaluatedSolutions";
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue()));
            variableCreator.Successor = ussp2;

            ussp2.Operator  = subScopesCounter;
            ussp2.Successor = resultsCollector;

            subScopesCounter.Name = "Increment EvaluatedSolutions";
            subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Evaluated Solutions", "", "EvaluatedSolutions"));
            resultsCollector.ResultsParameter.ActualName = "Results";
            resultsCollector.Successor = mainLoop;

            mainLoop.NumberOfVillagesParameter.ActualName                 = NumberOfVillagesParameter.Name;
            mainLoop.SelectorParameter.ActualName                         = SelectorParameter.Name;
            mainLoop.CrossoverParameter.ActualName                        = CrossoverParameter.Name;
            mainLoop.ElitesParameter.ActualName                           = ElitesParameter.Name;
            mainLoop.ReevaluateElitesParameter.ActualName                 = ReevaluateElitesParameter.Name;
            mainLoop.MutatorParameter.ActualName                          = MutatorParameter.Name;
            mainLoop.MutationProbabilityParameter.ActualName              = MutationProbabilityParameter.Name;
            mainLoop.RandomParameter.ActualName                           = randomCreator.RandomParameter.ActualName;
            mainLoop.ResultsParameter.ActualName                          = "Results";
            mainLoop.SuccessRatioParameter.ActualName                     = SuccessRatioParameter.Name;
            mainLoop.ComparisonFactorStartParameter.ActualName            = ComparisonFactorLowerBoundParameter.Name;
            mainLoop.ComparisonFactorModifierParameter.ActualName         = ComparisonFactorModifierParameter.Name;
            mainLoop.MaximumSelectionPressureParameter.ActualName         = MaximumSelectionPressureParameter.Name;
            mainLoop.FinalMaximumSelectionPressureParameter.ActualName    = FinalMaximumSelectionPressureParameter.Name;
            mainLoop.MaximumGenerationsParameter.ActualName               = MaximumGenerationsParameter.Name;
            mainLoop.OffspringSelectionBeforeMutationParameter.ActualName = OffspringSelectionBeforeMutationParameter.Name;
            mainLoop.EvaluatedSolutionsParameter.ActualName               = "EvaluatedSolutions";
            mainLoop.FillPopulationWithParentsParameter.ActualName        = FillPopulationWithParentsParameter.Name;
            mainLoop.Successor = null;

            foreach (ISelector selector in ApplicationManager.Manager.GetInstances <ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name))
            {
                SelectorParameter.ValidValues.Add(selector);
            }
            ISelector proportionalSelector = SelectorParameter.ValidValues.FirstOrDefault(x => x.GetType().Name.Equals("ProportionalSelector"));

            if (proportionalSelector != null)
            {
                SelectorParameter.Value = proportionalSelector;
            }

            ParameterizeSelectors();

            foreach (IDiscreteDoubleValueModifier modifier in ApplicationManager.Manager.GetInstances <IDiscreteDoubleValueModifier>().OrderBy(x => x.Name))
            {
                ComparisonFactorModifierParameter.ValidValues.Add(modifier);
            }
            IDiscreteDoubleValueModifier linearModifier = ComparisonFactorModifierParameter.ValidValues.FirstOrDefault(x => x.GetType().Name.Equals("LinearDiscreteDoubleValueModifier"));

            if (linearModifier != null)
            {
                ComparisonFactorModifierParameter.Value = linearModifier;
            }
            ParameterizeComparisonFactorModifiers();

            qualityAnalyzer                  = new BestAverageWorstQualityAnalyzer();
            villageQualityAnalyzer           = new BestAverageWorstQualityAnalyzer();
            selectionPressureAnalyzer        = new ValueAnalyzer();
            villageSelectionPressureAnalyzer = new ValueAnalyzer();
            successfulOffspringAnalyzer      = new SuccessfulOffspringAnalyzer();
            ParameterizeAnalyzers();
            UpdateAnalyzers();

            Initialize();
        }
Ejemplo n.º 29
0
 private GeneticAlgorithm(GeneticAlgorithm original, Cloner cloner)
     : base(original, cloner)
 {
     qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
     Initialize();
 }
Ejemplo n.º 30
0
        public RandomSearchAlgorithm()
            : base()
        {
            #region Add parameters
            Parameters.Add(new FixedValueParameter <IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
            Parameters.Add(new FixedValueParameter <BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
            Parameters.Add(new FixedValueParameter <MultiAnalyzer>("Analyzer", "The operator used to analyze the solutions each iteration.", new MultiAnalyzer()));
            Parameters.Add(new FixedValueParameter <IntValue>("MaximumEvaluatedSolutions", "The number of random solutions the algorithm should evaluate.", new IntValue(1000)));
            Parameters.Add(new FixedValueParameter <IntValue>("BatchSize", "The number of random solutions that are evaluated (in parallel) per iteration.", new IntValue(100)));
            Parameters.Add(new FixedValueParameter <IntValue>("MaximumIterations", "The number of iterations that the algorithm will run.", new IntValue(10))
            {
                Hidden = true
            });
            Parameters.Add(new FixedValueParameter <MultiTerminator>("Terminator", "The termination criteria that defines if the algorithm should continue or stop.", new MultiTerminator())
            {
                Hidden = true
            });
            #endregion

            #region Create operators
            var randomCreator   = new RandomCreator();
            var variableCreator = new VariableCreator()
            {
                Name = "Initialize Variables"
            };
            var resultsCollector = new ResultsCollector();
            var solutionCreator  = new SolutionsCreator()
            {
                Name = "Create Solutions"
            };
            var analyzerPlaceholder = new Placeholder()
            {
                Name = "Analyzer (Placeholder)"
            };
            var evaluationsCounter = new IntCounter()
            {
                Name = "Increment EvaluatedSolutions"
            };
            var subScopesRemover  = new SubScopesRemover();
            var iterationsCounter = new IntCounter()
            {
                Name = "Increment Iterations"
            };
            var terminationOperator = new TerminationOperator();
            #endregion

            #region Create and parameterize operator graph
            OperatorGraph.InitialOperator = randomCreator;

            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
            randomCreator.Successor = variableCreator;

            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("Iterations", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue(0)));
            variableCreator.Successor = resultsCollector;

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Iterations", "The current iteration number."));
            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("EvaluatedSolutions", "The current number of evaluated solutions."));
            resultsCollector.Successor = solutionCreator;

            solutionCreator.NumberOfSolutionsParameter.ActualName = BatchSizeParameter.Name;
            solutionCreator.ParallelParameter.Value.Value         = true;
            solutionCreator.Successor = evaluationsCounter;

            evaluationsCounter.ValueParameter.ActualName = "EvaluatedSolutions";
            evaluationsCounter.Increment = null;
            evaluationsCounter.IncrementParameter.ActualName = BatchSizeParameter.Name;
            evaluationsCounter.Successor = analyzerPlaceholder;

            analyzerPlaceholder.OperatorParameter.ActualName = AnalyzerParameter.Name;
            analyzerPlaceholder.Successor = subScopesRemover;

            subScopesRemover.RemoveAllSubScopes = true;
            subScopesRemover.Successor          = iterationsCounter;

            iterationsCounter.ValueParameter.ActualName = "Iterations";
            iterationsCounter.Increment = new IntValue(1);
            iterationsCounter.Successor = terminationOperator;

            terminationOperator.TerminatorParameter.ActualName = TerminatorParameter.Name;
            terminationOperator.ContinueBranch = solutionCreator;
            #endregion

            #region Create analyzers
            singleObjectiveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            #endregion

            #region Create terminators
            evaluationsTerminator = new ComparisonTerminator <IntValue>("EvaluatedSolutions", ComparisonType.Less, MaximumEvaluatedSolutionsParameter)
            {
                Name = "Evaluated solutions."
            };
            qualityTerminator = new SingleObjectiveQualityTerminator()
            {
                Name = "Quality"
            };
            executionTimeTerminator = new ExecutionTimeTerminator(this, new TimeSpanValue(TimeSpan.FromMinutes(5)));
            #endregion

            #region Parameterize
            UpdateAnalyzers();
            ParameterizeAnalyzers();
            UpdateTerminators();
            #endregion

            Initialize();
        }