示例#1
0
        public void BuildNetwork(double slat, double slon, double lat, double lon)
        {
            string hostname = Dns.GetHostName();
            SourceLocation = new Position(slat, slon);
            DestLocation = new Position(lat, lon);
            BasicNetwork network = CreateNetwork();
            string fn = @"Robot_From" + slat + "_" + slon + "_To_" + lat + "_" + lon + ".net";
            int chromosomes = 128;
            IMLTrain train;
            train = new MLMethodGeneticAlgorithm(() =>
                {
                    BasicNetwork result = CreateNetwork();
                    ((IMLResettable) result).Reset();
                    return result;
                }, new RobotScore(), chromosomes);
            int epoch = 1;
            var scoresAverage = new List<double>();
            double netavg = 0;

            while (epoch <= chromosomes || train.Error <= 0)
            {
                GC.Collect();
                Scores = new List<double>();
                train.Iteration();
                double average = GetitterationAverage();
                scoresAverage.Add(average);
                double avg = GetTrainAverage(scoresAverage);
                //_ProgressQueue.Publish(new TaskProgressMessage
                //    {
                //        CurrentTime = DateTime.Now,
                //        PercentComplete = epoch,
                //        StartTime = _starttime,
                //        Status = TaskStatus.InProcess,
                //        TaskId = _taskid,
                //        MessageId = Guid.NewGuid(),
                //        TransmisionDateTime = DateTime.Now,
                //        Details =
                //            hostname + @" Epoch #" + epoch + @" Score:" + train.Error + @" Chromosomes: " + chromosomes
                //    }
                //    );

                lock (NetworkLock)
                {
                    if (train.Error > 0)
                    {
                        NeuralNetwork net =
                            Mds.GetCollectionQueryModel<NeuralNetwork>(Query.And(Query.EQ("StartPosition.X", slat),
                                                                                 Query.EQ("StartPosition.Y", slon),
                                                                                 Query.EQ("EndPosition.X", lat),
                                                                                 Query.EQ("EndPosition.Y", lon)))
                               .FirstOrDefault();
                        if (net == null)
                            net = new NeuralNetwork
                                {
                                    EndPosition = new Position(lat, lon),
                                    Id = Guid.NewGuid(),
                                    StartPosition = new Position(slat, slon)
                                };

                        FileStream fs = File.Create(fn);
                        EncogDirectoryPersistence.SaveObject(fs, train.Method);
                        fs.Close();
                        MongoCollection<NeuralNetwork> col = Mds.DataBase.GetCollection<NeuralNetwork>("NeuralNetwork");
                        col.Save(net);
                        Mds.SaveFile(fn, net.Id);
                        File.Delete(fn);
                    }
                }
                epoch++;

                if (epoch > (chromosomes/2) && train.Error <= 0)
                {
                    chromosomes *= 2;

                    train = new MLMethodGeneticAlgorithm(() =>
                        {
                            BasicNetwork result = CreateNetwork();
                            ((IMLResettable) result).Reset();
                            return result;
                        }, new RobotScore(), chromosomes);

                    epoch = 1;
                }

                netavg = avg;
                if (chromosomes == 4096)
                    break;
            }
            _ProgressQueue.Publish(new TaskProgressMessage
                {
                    CurrentTime = DateTime.Now,
                    PercentComplete = 100,
                    StartTime = _starttime,
                    Status = TaskStatus.Complete,
                    TaskId = _taskid,
                    MessageId = Guid.NewGuid(),
                    TransmisionDateTime = DateTime.Now,
                    Details = hostname
                }
                );
            EncogFramework.Instance.Shutdown();
        }
示例#2
0
        public void geneticNeural()
        {
            IMLTrain train = new MLMethodGeneticAlgorithm (() => {
                BasicNetwork result = ((PlayerNeural)player1).network;
                ((IMLResettable)result).Reset ();
                return result;
            }, new ScorePlayer (player1, player2, false), POPULATION_SIZE);

            int epoch = 1;

            DateTime started = DateTime.Now;

            int minutes = 0;
            do {
                train.Iteration ();

                TimeSpan span = (DateTime.Now - started);
                minutes = span.Minutes;

                Console.WriteLine ("Epoch #" + epoch + " Error:" + train.Error);
                epoch++;

            } while (minutes <= NeuralTicTacToe.TRAIN_MINUTES);
            SaveNetwork ((BasicNetwork)train.Method);
        }