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(); }
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); }