public void geneticNeural() { FeedforwardNetwork network = createNetwork(); // train the neural network Console.WriteLine("Determining initial scores"); TicTacToeGenetic train = new TicTacToeGenetic(network, true, NeuralTicTacToe.POPULATION_SIZE, NeuralTicTacToe.MUTATION_PERCENT, NeuralTicTacToe.MATE_PERCENT, this.player2.GetType()); train.UseThreadPool = true; ThreadPool.SetMaxThreads(NeuralTicTacToe.THREAD_POOL_SIZE, NeuralTicTacToe.THREAD_POOL_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.getScore() + ",minutes left=" + (NeuralTicTacToe.TRAIN_MINUTES - minutes)); epoch++; } while (minutes < NeuralTicTacToe.TRAIN_MINUTES); SerializeObject.Save("tictactoe.net", train.Network); }
public void geneticNeural() { Stopwatch sw = new Stopwatch(); FeedforwardNetwork network = createNetwork(); // train the neural network Console.WriteLine("Determining initial scores"); TicTacToeGenetic train = new TicTacToeGenetic(network, true, NeuralTicTacToe.POPULATION_SIZE, NeuralTicTacToe.MUTATION_PERCENT, NeuralTicTacToe.MATE_PERCENT, this.player2.GetType()); train.UseThreadPool = true; sw.Stop(); string duration = String.Format("Training_time: {0}", sw.Elapsed.Minutes); Console.WriteLine(duration); ThreadPool.SetMaxThreads(NeuralTicTacToe.THREAD_POOL_SIZE, NeuralTicTacToe.THREAD_POOL_SIZE); int epoch = 1; DateTime started = DateTime.Now; int minutes = 0; double error = train.getScore(); do { sw.Start(); error = train.getScore(); if (error > 0) train.Iteration(); sw.Stop(); minutes = sw.Elapsed.Minutes; string observation = String.Format("Epoch: {0}, Error:{1}, minutes_left : {2}", epoch, error, (NeuralTicTacToe.TRAIN_MINUTES - minutes)); Console.WriteLine(observation); epoch++; } while (minutes < NeuralTicTacToe.TRAIN_MINUTES && error > 0.00001d); SerializeObject.Save("tictactoe.net", train.Network); }