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)); }
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); }
public void Initialize(Func <Dictionary <string, TFuncType>, TFuncType> f, Area area) { foreach (var n in Nodes) { n.Initialize(f, area, State); } CurrentNode = Nodes.First(); }
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; } }
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)); }
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)); }
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)); }
public void Reset() { this.State = new State <TBase, TFuncType, TV>(); this.CurrentNode = null; }