示例#1
0
        public static Algorithm <RealVector, double, RealVector> CreateDifferentialEvolution(int populationSize, double weightingFactor, double crossoverRate, double maxTime)
        {
            var DifferentialEvolution_nodes = new GeneralNode <RealVector, double, RealVector>[]
            {
                new SetParametersNode <RealVector, double, RealVector>(
                    nodeId: 0, parameters:
                    new Dictionary <string, object>
                {
                    { populationSizeName, populationSize },
                    { weightingFactorName, weightingFactor },
                    { crossoverRateName, crossoverRate }
                }),
                new InitializePopulationNode(nodeId: 1),
                new EvaluatePopulationNode(nodeId: 2),
                new TerminationViaMaxTime <RealVector, double, RealVector>(nodeId: 3, maxTime: maxTime),
                new GenerateNewPopulationNode(nodeId: 4),
                new SetBestNode(nodeId: 5)
            };
            var DifferentialEvolution_transitionMatrix = new[]
            {
                Tuple.Create <int, int?, int>(0, null, 1),
                Tuple.Create <int, int?, int>(1, null, 2),
                Tuple.Create <int, int?, int>(2, null, 3),
                Tuple.Create <int, int?, int>(3, 0, 4),
                Tuple.Create <int, int?, int>(3, 1, 5),
                Tuple.Create <int, int?, int>(4, null, 2)
            };

            return(new Algorithm <RealVector, double, RealVector>(DifferentialEvolution_nodes, DifferentialEvolution_transitionMatrix));
        }
示例#2
0
        public TV Work(Func <Dictionary <string, TFuncType>, TFuncType> f, Area area, string logStates = null)
        {
            var logger = new Logger <TBase, TFuncType, TV>(logStates, writers);

            logger.Initialize();

            Initialize(f, area);
            logger.Log(State, CurrentNode);
            bool continueOrNot = true;

            while (continueOrNot)
            {
                CurrentNode.Process(f, area, State);
                logger.Log(State, CurrentNode);
                var currentConditionValue = CurrentNode.GetCurrentCondition(f, area, State);
                var nextNodes             = TransitionMatrix
                                            .Where(rule => rule.Item1 == CurrentNode.NodeId && rule.Item2 == currentConditionValue)
                                            .Select(rule => (double)rule.Item3).ToArray();
                var nextNode = nextNodes.Length == 0 ? double.NaN : nextNodes[0];
                if (double.IsNaN(nextNode))
                {
                    continueOrNot = false;
                }
                else
                {
                    CurrentNode = Nodes.First(n => n.NodeId == (int)nextNode);
                }
            }
            logger.Log(State, CurrentNode);
            return(State.result);
        }
示例#3
0
        public void Initialize(Func <Dictionary <string, TFuncType>, TFuncType> f, Area area)
        {
            foreach (var n in Nodes)
            {
                n.Initialize(f, area, State);
            }

            CurrentNode = Nodes.First();
        }
示例#4
0
 public void Log(State <TBase, TFuncType, TV> state, GeneralNode <TBase, TFuncType, TV> node)
 {
     if (LogLocation != null)
     {
         state.SetParameter("_nodeId", node.NodeId);
         var printer = new StreamWriter($"{LogLocation}/{Counter}.json");
         printer.WriteLine(state.ConvertToJson(Writers).ToString(Formatting.Indented));
         printer.Close();
         printer.Dispose();
         ++Counter;
     }
 }
示例#5
0
            public static Algorithm <IntervalVector, Interval, IntervalVector> CreateAlgorithm()
            {
                var nodes = new GeneralNode <IntervalVector, Interval, IntervalVector>[]
                {
                    new SplitNode(nodeId: 0),
                    new TerminationViaMaxIterations <IntervalVector, Interval, IntervalVector>(nodeId: 1, maxIteration: 250),
                    new TerminationViaMaxTime <IntervalVector, Interval, IntervalVector>(nodeId: 2, maxTime: 2.5),
                    new SelectBest(nodeId: 3),
                };
                var transitionMatrix = new Tuple <int, int?, int>[]
                {
                    Tuple.Create <int, int?, int>(0, null, 1),
                    Tuple.Create <int, int?, int>(1, 0, 0),
                    Tuple.Create <int, int?, int>(1, 1, 2),
                    Tuple.Create <int, int?, int>(2, 0, 0),
                    Tuple.Create <int, int?, int>(2, 1, 3)
                };

                return(new Algorithm <IntervalVector, Interval, IntervalVector>(nodes, transitionMatrix));
            }
示例#6
0
        public static Algorithm <RealVector, double, RealVector> CreateFixedStepRandomSearch(double radius, double maxTime)
        {
            var FixedStep_nodes = new GeneralNode <RealVector, double, RealVector>[]
            {
                new SetParametersNode <RealVector, double, RealVector>(nodeId: 0, parameters: new Dictionary <string, object> {
                    { radiusParameterName, radius }
                }),
                new GenerateInitialPointNode(nodeId: 1),
                new TerminationViaMaxTime <RealVector, double, RealVector>(nodeId: 2, maxTime: maxTime),
                new SampleNewPointNode_FixedStep(nodeId: 3),
                new SetBestNode(nodeId: 4)
            };
            var FixedStep_transitionMatrix = new[]
            {
                Tuple.Create <int, int?, int>(0, null, 1),
                Tuple.Create <int, int?, int>(1, null, 2),
                Tuple.Create <int, int?, int>(2, 0, 3),
                Tuple.Create <int, int?, int>(2, 1, 4),
                Tuple.Create <int, int?, int>(3, null, 2)
            };

            return(new Algorithm <RealVector, double, RealVector>(FixedStep_nodes, FixedStep_transitionMatrix));
        }
示例#7
0
            public static Algorithm <RealVector, double, RealVector> CreateAlgorithm(int maxIteration, double maxTime)
            {
                var nodes = new GeneralNode <RealVector, double, RealVector>[]
                {
                    new SetParametersNode <RealVector, double, RealVector>(nodeId: 0, parameters: new Dictionary <string, object> {
                        { "generate", true }
                    }),
                    new SampleNode(nodeId: 1),
                    new TerminationViaMaxIterations <RealVector, double, RealVector>(nodeId: 2, maxIteration: maxIteration),
                    new TerminationViaMaxTime <RealVector, double, RealVector>(nodeId: 3, maxTime: maxTime),
                    new SelectBest(nodeId: 4),
                };
                var transitionMatrix = new Tuple <int, int?, int>[]
                {
                    Tuple.Create <int, int?, int>(0, null, 1),
                    Tuple.Create <int, int?, int>(1, null, 2),
                    Tuple.Create <int, int?, int>(2, 0, 1),
                    Tuple.Create <int, int?, int>(2, 1, 3),
                    Tuple.Create <int, int?, int>(3, 0, 1),
                    Tuple.Create <int, int?, int>(3, 1, 4)
                };

                return(new Algorithm <RealVector, double, RealVector>(nodes, transitionMatrix));
            }
示例#8
0
 public void Reset()
 {
     this.State       = new State <TBase, TFuncType, TV>();
     this.CurrentNode = null;
 }