/// <summary>
        /// Create, Train and Test a Garden Design Network
        /// ToDo: Add Dependency Injection
        /// </summary>
        private static void CreateGardenDesignNetwork()
        {
            //Create the Network
            INeuralNetworkFactory neuralNetworkFactory = new NeuralNetworkFactory();
            var neuralNetwork = neuralNetworkFactory.Create(3, 5, 3);

            // Train the Network
            ITrainingDataRepo trainingDataRepo = new TrainingDataRepo();
            var trainingData = trainingDataRepo.GetTrainingDataGardenDesign();

            INeuralNetworkTrainingService trainingService = new NeuralNetworkTrainingService(new NeuralNetworkProcessingService());

            double[][] trainingResults = trainingService.Train(neuralNetwork, trainingData, 4000, new Sigmoid(), 1);

            OutputResultsToConsole(trainingResults);
            Console.WriteLine("Training Complete ---------------");

            // Test the Trained Network
            INeuralNetworkProcessingService processingService = new NeuralNetworkProcessingService();

            double[]   testInputs1  = { 0, 0, 0 };
            double[][] testResults1 = { testInputs1, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs1, new Sigmoid()) };
            Console.WriteLine("Test1 Results (0, 0, 0 Low Maint(1)) ---------------");
            OutputResultsToConsole(testResults1);

            double[]   testInputs2  = { 1, 1, 0 };
            double[][] testResults2 = { testInputs2, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs2, new Sigmoid()) };
            Console.WriteLine("Test2 Results (1, 1, 0 General(5)) ---------------");
            OutputResultsToConsole(testResults2);

            double[]   testInputs3  = { 0, 0, 1 };
            double[][] testResults3 = { testInputs3, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs3, new Sigmoid()) };
            Console.WriteLine("Test3 Results (0, 0, 1 Child(4)) ---------------");
            OutputResultsToConsole(testResults3);
        }
        public INeuralNetwork LoadNeuralNetwork(string filename)
        {
            var jsonGenes   = File.ReadAllText(_directory + filename);
            var networkGene = JsonConvert.DeserializeObject <NeuralNetworkGene>(jsonGenes);
            var network     = NeuralNetworkFactory.GetInstance().Create(networkGene);

            return(network);
        }
        internal ITrainingSession ExtractSession(string serialized, double eval)
        {
            var networkGenes = JsonConvert.DeserializeObject <NeuralNetworkGene>(serialized);
            var network      = NeuralNetworkFactory.GetInstance().Create(networkGenes);
            var session      = new FakeTrainingSession(network, eval);

            return(session);
        }
        public static IGeneticAlgorithmFactory GetInstance(IEvaluatableFactory evaluatableFactory)
        {
            var networkFactory    = NeuralNetworkFactory.GetInstance();
            var workingSetFactory = EvalWorkingSetFactory.GetInstance();
            var random            = new Random();
            var breederFactory    = BreederFactory.GetInstance(networkFactory, new RandomWeightInitializer(random));
            var mutatorFactory    = MutatorFactory.GetInstance(networkFactory, new RandomWeightInitializer(random));

            return(new GeneticAlgorithmFactory(networkFactory, workingSetFactory, evaluatableFactory, breederFactory, mutatorFactory));
        }
    // Use this for initialization
    void Start()
    {
        createPopulation();
        l_og.invokeGenerateObstacle();

        lastFitnessTop1Bird = 0;
        lastFitnessTop2Bird = 0;

        l_neuralNetworkFactory = new NeuralNetworkFactory();
    }
示例#6
0
        public async Task <ITrainingSession> GetBestSessionAsync()
        {
            var result = await ParseCloud.CallFunctionAsync <ParseObject>("bestNetwork", new Dictionary <string, object> {
                { "networkVersion", _networkVersion }
            });

            var networkGenes = JsonConvert.DeserializeObject <NeuralNetworkGene>((string)result["jsonNetwork"]);
            var network      = NeuralNetworkFactory.GetInstance().Create(networkGenes);
            var session      = new FakeTrainingSession(network, (double)result["eval"]);

            return(session);
        }
        static void Main(string[] args)
        {
            NeuralNetworkConfigurationSettings networkConfig = new NeuralNetworkConfigurationSettings
            {
                NumInputNeurons    = 1,
                NumOutputNeurons   = 1,
                NumHiddenLayers    = 2,
                NumHiddenNeurons   = 3,
                SummationFunction  = new SimpleSummation(),
                ActivationFunction = new TanhActivationFunction()
            };
            GenerationConfigurationSettings generationSettings = new GenerationConfigurationSettings
            {
                UseMultithreading    = true,
                GenerationPopulation = 500
            };
            EvolutionConfigurationSettings evolutionSettings = new EvolutionConfigurationSettings
            {
                NormalMutationRate  = 0.05,
                HighMutationRate    = 0.5,
                GenerationsPerEpoch = 10,
                NumEpochs           = 1000,
                NumTopEvalsToReport = 10
            };
            MutationConfigurationSettings mutationSettings = new MutationConfigurationSettings
            {
                MutateAxonActivationFunction       = true,
                MutateNumberOfHiddenLayers         = true,
                MutateNumberOfHiddenNeuronsInLayer = true,
                MutateSomaBiasFunction             = true,
                MutateSomaSummationFunction        = true,
                MutateSynapseWeights = true
            };
            var random = new RandomWeightInitializer(new Random());
            INeuralNetworkFactory factory          = NeuralNetworkFactory.GetInstance(SomaFactory.GetInstance(networkConfig.SummationFunction), AxonFactory.GetInstance(networkConfig.ActivationFunction), SynapseFactory.GetInstance(new RandomWeightInitializer(new Random()), AxonFactory.GetInstance(networkConfig.ActivationFunction)), SynapseFactory.GetInstance(new ConstantWeightInitializer(1.0), AxonFactory.GetInstance(new IdentityActivationFunction())), random);
            IBreeder            breeder            = BreederFactory.GetInstance(factory, random).Create();
            IMutator            mutator            = MutatorFactory.GetInstance(factory, random).Create(mutationSettings);
            IEvalWorkingSet     history            = EvalWorkingSetFactory.GetInstance().Create(50);
            IEvaluatableFactory evaluatableFactory = new GameEvaluationFactory();

            IStorageProxy proxy  = new NodeJSProxy(1, "http://localhost:3000", "123456789");
            IEpochAction  action = new BestPerformerUpdater(proxy);

            var GAFactory             = GeneticAlgorithmFactory.GetInstance(evaluatableFactory);
            IGeneticAlgorithm evolver = GAFactory.Create(networkConfig, generationSettings, evolutionSettings, factory, breeder, mutator, history, evaluatableFactory, action);

            evolver.RunSimulation();
        }
        /// <summary>
        /// Create, Train and Test an XOR Network
        /// ToDo: Add Dependency Injection
        /// </summary>
        private static void CreateXORNetwork()
        {
            //Create the Network
            // Initiate Weights
            double[] hiddenLayerWeights = new double[] { 0.38286575972236, 0.441739972420847, 0.00519391335788831, 0.152334728814817 };
            double[] hiddenLayerBias    = new double[] { 0.79060369394282, 0.25095684418965 };
            double[] outputLayerWeights = new double[] { 0.100294556049767, 0.24866028653861 };
            double[] outputLayerBias    = new double[] { 0.97103805186741 };

            INeuralNetworkFactory neuralNetworkFactory = new NeuralNetworkFactory();
            var neuralNetwork = neuralNetworkFactory.Create(2, 1, 2, hiddenLayerWeights, outputLayerWeights, hiddenLayerBias, outputLayerBias);

            // Train the Network
            ITrainingDataRepo trainingDataRepo = new TrainingDataRepo();
            var trainingData = trainingDataRepo.GetTrainingDataXOR();

            INeuralNetworkTrainingService trainingService = new NeuralNetworkTrainingService(new NeuralNetworkProcessingService());

            double[][] trainingResults = trainingService.Train(neuralNetwork, trainingData, 2000, new Sigmoid(), 1);

            OutputResultsToConsole(trainingResults);
            Console.WriteLine("Training Complete ---------------");

            // Test the Trained Network
            INeuralNetworkProcessingService processingService = new NeuralNetworkProcessingService();

            double[]   testInputs1  = { 0, 0 };
            double[][] testResults1 = { testInputs1, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs1, new Sigmoid()) };
            Console.WriteLine("Test1 Results (0 XOR 0) ---------------");
            OutputResultsToConsole(testResults1);

            double[]   testInputs2  = { 1, 0 };
            double[][] testResults2 = { testInputs2, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs2, new Sigmoid()) };
            Console.WriteLine("Test2 Results (1 XOR 0) ---------------");
            OutputResultsToConsole(testResults2);

            double[]   testInputs3  = { 0, 1 };
            double[][] testResults3 = { testInputs3, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs3, new Sigmoid()) };
            Console.WriteLine("Test3 Results (0 XOR 1) ---------------");
            OutputResultsToConsole(testResults3);

            double[]   testInputs4  = { 1, 1 };
            double[][] testResults4 = { testInputs4, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs4, new Sigmoid()) };
            Console.WriteLine("Test4 Results (1 XOR 1) ---------------");
            OutputResultsToConsole(testResults4);
        }
        public INeuralNetworkFactory BuildBackpropagationNetworkFactory(IWeightInitializer weightInitializer,
                                                                        ISomaFactory somaFactory,
                                                                        IActivationFunctionDerivative activationFunctionDerivative,
                                                                        IActivationFunction inputActivationFunction,
                                                                        INeuronFactory neuronFactory)
        {
            var axonFactory          = BackpropagationAxonFactory.GetInstance(activationFunctionDerivative);
            var hiddenSynapseFactory = DecoratedSynapseFactory.GetInstance(weightInitializer,
                                                                           AxonFactory.GetInstance(activationFunctionDerivative));
            var inputSynapseFactory = DecoratedSynapseFactory.GetInstance(new ConstantWeightInitializer(1.0),
                                                                          AxonFactory.GetInstance(inputActivationFunction));
            var decoratedNeuronFactory    = BackpropagationNeuronFactory.GetInstance(neuronFactory);
            INeuralNetworkFactory factory = NeuralNetworkFactory.GetInstance(somaFactory, axonFactory,
                                                                             hiddenSynapseFactory, inputSynapseFactory, weightInitializer, decoratedNeuronFactory);

            var backPropNetworkFactory = new BackpropagationNetworkFactoryDecorator(factory);

            return(backPropNetworkFactory);
        }
示例#10
0
 public ITrainingSession GetBestSession()
 {
     using (var client = new HttpClient())
     {
         // Replace this with the API key for the web service
         client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey);
         var networkEndpoint = _baseUrl + "/network/" + _networkVersion;
         var response        = client.GetAsync(networkEndpoint).Result;
         var responseObj     = response.Content.ReadAsAsync <NodeJsMessage>().Result;
         if (responseObj == null)
         {
             return(null);
         }
         var networkGenes = JsonConvert.DeserializeObject <NeuralNetworkGene>(responseObj.networkGenes);
         var network      = NeuralNetworkFactory.GetInstance().Create(networkGenes);
         var session      = new FakeTrainingSession(network, responseObj.eval);
         return(session);
     }
 }
        /// <summary>
        /// Create, Train and Test an AND Network
        /// ToDo: Add Dependency Injection
        /// </summary>
        private static void CreateANDNetwork()
        {
            //Create the Network (go with random weights and bias)
            INeuralNetworkFactory neuralNetworkFactory = new NeuralNetworkFactory();
            var neuralNetwork = neuralNetworkFactory.Create(2, 1, 2);

            // Train the Network
            ITrainingDataRepo trainingDataRepo = new TrainingDataRepo();
            var trainingData = trainingDataRepo.GetTrainingDataAND();

            INeuralNetworkTrainingService trainingService = new NeuralNetworkTrainingService(new NeuralNetworkProcessingService());

            double[][] trainingResults = trainingService.Train(neuralNetwork, trainingData, 2000, new Sigmoid(), 1);

            OutputResultsToConsole(trainingResults);
            Console.WriteLine("Training Complete ---------------");

            // Test the Trained Network
            INeuralNetworkProcessingService processingService = new NeuralNetworkProcessingService();

            double[]   testInputs1  = { 0, 0 };
            double[][] testResults1 = { testInputs1, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs1, new Sigmoid()) };
            Console.WriteLine("Test1 Results (0 AND 0) ---------------");
            OutputResultsToConsole(testResults1);

            double[]   testInputs2  = { 1, 0 };
            double[][] testResults2 = { testInputs2, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs2, new Sigmoid()) };
            Console.WriteLine("Test2 Results (1 AND 0) ---------------");
            OutputResultsToConsole(testResults2);

            double[]   testInputs3  = { 0, 1 };
            double[][] testResults3 = { testInputs3, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs3, new Sigmoid()) };
            Console.WriteLine("Test3 Results (0 AND 1) ---------------");
            OutputResultsToConsole(testResults3);

            double[]   testInputs4  = { 1, 1 };
            double[][] testResults4 = { testInputs4, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs4, new Sigmoid()) };
            Console.WriteLine("Test4 Results (1 AND 1) ---------------");
            OutputResultsToConsole(testResults4);
        }