//private string _filePath; public ArtificialNeuralNetwork(LayerStructure layerStructure, TrainingParameters trainingParameters, IDataSet dataSet, IOptimizationStrategy strategy, IInitialRandomDistributionType randomDistribution) { _layerStructure = layerStructure; _trainingParameters = trainingParameters; DataSet = dataSet; _strategy = strategy; _strategy.LayerStructure = layerStructure; _randomDistribution = randomDistribution; CreateDataSets(); SetWeights(); InitPreviousDeltaWeights(); SetBiases(); InitPreviousDeltaBiases(); _strategy.FetchInitialWeightsAndBiases(ref _weights, ref _biases); _strategy.FetchPreviousDeltaWeightsAndBiases(ref _previousDeltaWeights, ref _previousDeltaBiases); _savePath = Path.GetTempPath(); }
public void Init() { _pendingOptimizationResults = new Queue <OptimizationResult>(); Strategy = CreateStrategy(); Strategy.NewParameterSet += (s, parameterSet) => { _pendingOptimizationResults.Enqueue(new OptimizationResult(_stringify(_profit(parameterSet), _drawdown(parameterSet)), parameterSet, "")); }; }
/// <summary> /// Creates a new instance /// </summary> /// <param name="nodePacket">The optimization node packet to handle</param> protected LeanOptimizer(OptimizationNodePacket nodePacket) { if (nodePacket.OptimizationParameters.IsNullOrEmpty()) { throw new ArgumentException("Cannot start an optimization job with no parameter to optimize"); } if (string.IsNullOrEmpty(nodePacket.Criterion?.Target)) { throw new ArgumentException("Cannot start an optimization job with no target to optimize"); } NodePacket = nodePacket; OptimizationTarget = NodePacket.Criterion; OptimizationTarget.Reached += (s, e) => { // we've reached the optimization target TriggerOnEndEvent(); }; Strategy = (IOptimizationStrategy)Activator.CreateInstance(Type.GetType(NodePacket.OptimizationStrategy)); RunningParameterSetForBacktest = new ConcurrentDictionary <string, ParameterSet>(); PendingParameterSet = new ConcurrentQueue <ParameterSet>(); Strategy.Initialize(OptimizationTarget, nodePacket.Constraints, NodePacket.OptimizationParameters, NodePacket.OptimizationStrategySettings); Strategy.NewParameterSet += (s, parameterSet) => { if (parameterSet == null) { // shouldn't happen Log.Error($"Strategy.NewParameterSet({GetLogDetails()}): generated a null {nameof(ParameterSet)} instance"); return; } LaunchLeanForParameterSet(parameterSet); }; }
public INetwork LoadNetwork(string xmlFilePath, IDataSet dataset) { _xmlDoc = new XmlDocument(); _filepath = xmlFilePath; _xmlDoc.Load(_filepath); //Create Training Params---------------------8::::::::::::::>---------------------------------------- TrainingParameters trainingParams = new TrainingParameters() { epochs = Convert.ToInt32(GetXmlValue("NeuralNetwork/Settings/TrainingParameters/Epochs")), learningRate = Convert.ToDouble(GetXmlValue("NeuralNetwork/Settings/TrainingParameters/LearningRate")), momentum = Convert.ToDouble(GetXmlValue("NeuralNetwork/Settings/TrainingParameters/Momentum")) }; //Create LayerStructure---------------------8::::::::::::::>---------------------------------------- List <int> hiddenLayersList = new List <int>(); int numberOfHiddenLayers = Convert.ToInt32(GetXmlValue("NeuralNetwork/Settings/LayerStructure/NumberOfHiddenLayers")); for (int i = 1; i <= numberOfHiddenLayers; i++) { int numberOfNeuronsInHiddenLayer = Convert.ToInt32(GetXmlValue("NeuralNetwork/Settings/LayerStructure/NumberOfNeuronsInHiddenLayer" + i.ToString())); hiddenLayersList.Add(numberOfNeuronsInHiddenLayer); } LayerStructure layerStructure = new LayerStructure() { numberOfInputNodes = Convert.ToInt32(GetXmlValue("NeuralNetwork/Settings/LayerStructure/NumberOfInputNeurons")), numberOfOutputNodes = Convert.ToInt32(GetXmlValue("NeuralNetwork/Settings/LayerStructure/NumberOfOutputNeurons")), HiddenLayerList = hiddenLayersList }; //Create Distribution Type---------------------8::::::::::::::>---------------------------------------- string distribution = GetXmlValue("NeuralNetwork/Settings/DistributionType/InitialRandomDistributionType"); var distributionType = Type.GetType(distribution + ",NeuralNetwork.Core"); IInitialRandomDistributionType initialDistribution = Activator.CreateInstance(distributionType) as IInitialRandomDistributionType; //Create Strategy---------------------8::::::::::::::>---------------------------------------- string hiddenFunction = GetXmlValue("NeuralNetwork/Settings/Strategy/HiddenLayerActivationFunction"); string outputFunction = GetXmlValue("NeuralNetwork/Settings/Strategy/OutputLayerActivationFunction"); string costFunc = GetXmlValue("NeuralNetwork/Settings/Strategy/CostFunction"); string regularizationEnum = GetXmlValue("NeuralNetwork/Settings/Strategy/RegularizationType"); string regularizationStrategyFactory = GetXmlValue("NeuralNetwork/Settings/Strategy/RegularizationStrategyFactory"); var hiddenFunctionType = Type.GetType(hiddenFunction + ",NeuralNetwork.Core"); var outputFunctionType = Type.GetType(outputFunction + ",NeuralNetwork.Core"); var costFunctionType = Type.GetType(costFunc + ",NeuralNetwork.Core"); var regularizationStrategyFactoryType = Type.GetType(regularizationStrategyFactory + ",NeuralNetwork.Core"); IActivationFunction hiddenActivationFunction = Activator.CreateInstance(hiddenFunctionType) as IActivationFunction; IActivationFunction outputActivationFunction = Activator.CreateInstance(outputFunctionType) as IActivationFunction; ICostFunction costFunction = Activator.CreateInstance(costFunctionType) as ICostFunction; RegularizationType regularizationType = (RegularizationType)Enum.Parse(typeof(RegularizationType), regularizationEnum); IRegularizationStrategyFactory regularizationStrategyFact = Activator.CreateInstance(regularizationStrategyFactoryType) as IRegularizationStrategyFactory; string optimizationStrategy = GetXmlValue("NeuralNetwork/Settings/Strategy/OptimizationStrategy"); var optStrategy = Type.GetType(optimizationStrategy + ",NeuralNetwork.Core"); IOptimizationStrategy strategy = Activator.CreateInstance(optStrategy, hiddenActivationFunction, outputActivationFunction, costFunction, regularizationType, regularizationStrategyFact) as IOptimizationStrategy; //Create Network---------------------8::::::::::::::>---------------------------------------- network = new ArtificialNeuralNetwork(layerStructure, trainingParams, dataset, strategy, initialDistribution); //Set Weights---------------------8::::::::::::::>---------------------------------------- network.Weights.Clear(); LoadInputWeights(); LoadHiddenWeights(); //Set Biases---------------------8::::::::::::::>---------------------------------------- network.Biases.Clear(); LoadHiddenBiases(); LoadOutputBiases(); //Clear XMLDoc---------------------8::::::::::::::>---------------------------------------- _xmlDoc = null; return(network); }