public async Task <IActionResult> Edit(int id, [Bind("id,name,numOfNeurons,numOfLayers")] NeuralNetworks neuralNetworks)
        {
            if (id != neuralNetworks.id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(neuralNetworks);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!NeuralNetworksExists(neuralNetworks.id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }
            return(View(neuralNetworks));
        }
        public async Task <IActionResult> Create([Bind("id,name,numOfNeurons,numOfLayers")] NeuralNetworks neuralNetworks)
        {
            if (ModelState.IsValid)
            {
                _context.Add(neuralNetworks);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(neuralNetworks));
        }
Exemplo n.º 3
0
        public void FeddForwardTest()
        {
            var topology = new Topology(4, 1, 2);

            var neuralNetwork = new NeuralNetworks(topology);

            neuralNetwork.Layers[1].Neurons[0].SetWeights(0.5, -0.1, 0.3, -0.1);
            neuralNetwork.Layers[1].Neurons[1].SetWeights(0.1, -0.3, 0.7, -0.3);
            neuralNetwork.Layers[2].Neurons[0].SetWeights(1.2, 0.8);

            var result = neuralNetwork.FeddForward(new List <double> {
                1, 0, 0, 0
            });
        }
Exemplo n.º 4
0
        public NeuralNetwork Train(
            IEnumerable <double[]> inputs,
            Func <NeuralNetwork, IEnumerable <double[]>, double> fitness)
        {
            NeuralNetworks.AsParallel()
            .ForAll(nn => nn.UpdateFitness(inputs, fitness));

            Offspring();

            return(NeuralNetworks
                   .OrderByDescending(nn => nn.Fitness)
                   .ThenByDescending(nn => nn.Generation)
                   .First());
        }
Exemplo n.º 5
0
        private void Breed(ref INeuralNetwork[] orderedNetworks)
        {
            var top        = orderedNetworks.Take((orderedNetworks.Length - 1) / 2).ToArray();
            var newnetwork = new List <INeuralNetwork>();

            for (int i = 0; i < _speciesCount; i++)
            {
                var index = i % (top.Length - 1);
                if (index < top.Length)
                {
                    newnetwork.Add((INeuralNetwork)top[index].Clone());
                }
            }
            NeuralNetworks  = newnetwork;
            orderedNetworks = FitnessVal.Maximize ? NeuralNetworks.OrderByDescending(p => p.Error).ToArray() : NeuralNetworks.OrderBy(p => p.Error).ToArray();
        }
Exemplo n.º 6
0
        public IGeneration EvolveGeneration()
        {
#if Roslyn
            Parallel.ForEach(NeuralNetworks, p =>
            {
                var fitness = FitnessVal.EvaluateFitness(p);
                p.Error     = fitness;
            });
#endif
#if Bridge
            foreach (var neuralNetwork in NeuralNetworks)
            {
                var fitness = FitnessVal.EvaluateFitness(neuralNetwork);
                neuralNetwork.Error = fitness;
            }
#endif
            var orderedNetworks = FitnessVal.Maximize ? NeuralNetworks.OrderByDescending(p => p.Error).ToArray() : NeuralNetworks.OrderBy(p => p.Error).ToArray();
            //keep top 50
            //todo: copy top 50 networks and evolve the new networks

            var gen = new Generation(orderedNetworks, orderedNetworks[0], orderedNetworks[orderedNetworks.Length - 1], orderedNetworks[(orderedNetworks.Length - 1) / 2], Generation);
            Breed(ref orderedNetworks);
            var r = orderedNetworks.ToList();
            r.Reverse();
            var reverse = r.Take((int)(orderedNetworks.Length - orderedNetworks.Length * 0.1));
#if Roslyn
            Parallel.ForEach(reverse, Mutate);
#endif
#if Bridge
            foreach (var neuralNetwork in reverse)
            {
                Mutate(neuralNetwork);
            }
#endif

            OnGenerationFinished(gen);

            Generation++;
            return(gen);
        }