internal void SaveBestPerformer(int epoch) { ITrainingSession bestPerformer = _generation.GetBestPerformer(); var saver = new NeuralNetworkSaver("\\networks"); saver.SaveNeuralNetwork(bestPerformer.NeuralNet, bestPerformer.GetSessionEvaluation(), epoch); }
public AppViewModel(ITrainingSession trainingSession, IHostedScriptExecutor scriptExecutor) { _trainingSession = trainingSession; _scriptExecutor = scriptExecutor; _controller = new ControllerViewModel(trainingSession, scriptExecutor); SetControlPanelState(); }
public ControllerViewModel(ITrainingSession trainingSession, IHostedScriptExecutor scriptExecutor) { this.trainingSession = trainingSession; this.scriptExecutor = scriptExecutor; BackgroundImage = @"../Resources/autotrainer.jpg"; LoadScripts(); SelectedCollection = ScriptCollections.FirstOrDefault(); }
public ControllerViewModel(ITrainingSession trainingSession, IHostedScriptExecutor scriptExecutor) { _trainingSession = trainingSession; _scriptExecutor = scriptExecutor; BackgroundImage = @"../Resources/autotrainer.jpg"; LoadScripts(); SelectedCollection = ScriptCollections.FirstOrDefault(); }
public SessionViewModel(Dispatcher dispatcher, ITrainingSession trainingSession, IHostedScriptExecutor scriptExecutor, string scriptFile) { this.dispatcher = dispatcher; this.trainingSession = trainingSession; this.scriptExecutor = scriptExecutor; this.scriptFile = scriptFile; this.trainingSession.Trainer.Spoke += TrainerOnSpoke; this.trainingSession.Viewer.PictureChanged += ViewerOnPictureChanged; }
public SessionViewModel(Dispatcher dispatcher, ITrainingSession trainingSession, IHostedScriptExecutor scriptExecutor, string scriptFile) { _dispatcher = dispatcher; _trainingSession = trainingSession; _scriptExecutor = scriptExecutor; _scriptFile = scriptFile; _trainingSession.Trainer.Spoke += TrainerOnSpoke; _trainingSession.Viewer.PictureChanged += ViewerOnPictureChanged; }
internal void RunStarterGeneration() { _generation.Run(); if (_epochAction != null) { LoggerFactory.GetLogger().Log(LogLevel.Info, "Getting best performer"); _bestPerformerOfEpoch = _epochAction.UpdateBestPerformer(_generation, 0); } else { _bestPerformerOfEpoch = GetBestPerformerOfGeneration(); } }
public void RunSimulation() { RunStarterGeneration(); for (int epoch = 1; epoch < _evolutionConfig.NumEpochs; epoch++) { for (int generation = 0; generation < _evolutionConfig.GenerationsPerEpoch; generation++) { if (generation == 0) { LoggerFactory.GetLogger().Log(LogLevel.Info, $"Creating next generation with top performer with eval: {_bestPerformerOfEpoch.GetSessionEvaluation()}"); createNextGeneration(_bestPerformerOfEpoch); } else { createNextGeneration(null); } _generation.Run(); IEnumerable <double> evals = _generation.GetEvalsForGeneration().OrderByDescending(d => d); var evalsTotalCount = evals.Count(); if (_evolutionConfig.NumTopEvalsToReport > 0) { evals = evals.Take(_evolutionConfig.NumTopEvalsToReport); } var sb = new StringBuilder(); foreach (var t in evals.OrderBy(d => d)) { sb.AppendLine($"eval: {t}"); } LoggerFactory.GetLogger().Log(LogLevel.Info, sb.ToString()); LoggerFactory.GetLogger().Log(LogLevel.Info, $"count: {evalsTotalCount}"); LoggerFactory.GetLogger().Log(LogLevel.Info, $"Epoch: {epoch}, Generation: {generation}"); } if (_epochAction != null) { LoggerFactory.GetLogger().Log(LogLevel.Info, "Updating best performer"); _bestPerformerOfEpoch = _epochAction.UpdateBestPerformer(_generation, epoch); } else { _bestPerformerOfEpoch = GetBestPerformerOfGeneration(); } SaveBestPerformer(epoch); } }
public HostedScriptExecutor(ITrainingSession session) { _script = new ScriptCsHost(); _script.Root.Executor.Initialize(new List<string>(), new List<IScriptPack>() {new PersonalTrainerScriptPack(session)}); _script.Root.Executor.AddReferenceAndImportNamespaces(new[] { typeof (TrainingSession), typeof (Metronome), typeof (Sequencer), typeof (Voice.Trainer), typeof (Timer.SessionTimer), typeof (Picture), typeof (IContentViewer), typeof (IContentCollection), typeof (PictureInfo), typeof (ExtensionMethods) }); }
public HostedScriptExecutor(ITrainingSession session) { _script = new ScriptCsHost(); _script.Root.Executor.Initialize(new List <string>(), new List <IScriptPack> { new PersonalTrainerScriptPack(session) }); _script.Root.Executor.AddReferenceAndImportNamespaces(new[] { typeof(TrainingSession), typeof(Metronome), typeof(Sequencer), typeof(Trainer), typeof(SessionTimer), typeof(Picture), typeof(IContentViewer), typeof(IContentCollection), typeof(PictureInfo), typeof(ExtensionMethods) }); }
public IList <INeuralNetwork> Breed(IList <ITrainingSession> sessions, int numToBreed) { WeightedSessionList weightedSessions = new WeightedSessionList(sessions); List <INeuralNetwork> children = new List <INeuralNetwork>(); for (int bred = 0; bred < numToBreed; bred++) { // choose mother ITrainingSession session1 = weightedSessions.ChooseRandomWeightedSession(); INeuralNetwork mother = session1.NeuralNet; // choose father ITrainingSession session2 = weightedSessions.ChooseRandomWeightedSession(); INeuralNetwork father = session2.NeuralNet; INeuralNetwork child = mate(mother, father); children.Add(child); } return(children); }
public Playground(ITrainingSession x) { _ = x; }
public PersonalTrainerScriptPack(ITrainingSession session) { _session = session; }
private void createNextGeneration(ITrainingSession bestPerformer) { Stopwatch watch = new Stopwatch(); watch.Start(); int numberOfTopPerformersToChoose = (int)(_generationConfig.GenerationPopulation * 0.50); int numToBreed = (int)(_generationConfig.GenerationPopulation * 0.35); int numToGen = (int)(_generationConfig.GenerationPopulation * 0.15); if (numberOfTopPerformersToChoose + numToBreed + numToGen < _generationConfig.GenerationPopulation) { numToGen += _generationConfig.GenerationPopulation - (numberOfTopPerformersToChoose + numToBreed + numToGen); } var sessions = _generation.GetBestPerformers(numberOfTopPerformersToChoose); if (bestPerformer != null) { LoggerFactory.GetLogger().Log(LogLevel.Info, "Best performer found for creating generation"); if (sessions.All(s => s.NeuralNet.GetGenes() != bestPerformer.NeuralNet.GetGenes())) { LoggerFactory.GetLogger() .Log(LogLevel.Info, $"Best performer adding to sessions with eval {bestPerformer.GetSessionEvaluation()}"); sessions[sessions.Count - 1] = bestPerformer; sessions = sessions.OrderByDescending(s => s.GetSessionEvaluation()).ToList(); LoggerFactory.GetLogger() .Log(LogLevel.Info, $"session 0 eval: {sessions[0].GetSessionEvaluation()}"); } else { LoggerFactory.GetLogger() .Log(LogLevel.Info, $"Best performer already in generation: not adding."); } } _history.AddEval(sessions[0].GetSessionEvaluation()); var mutateChance = DetermineMutateChance(); IList <INeuralNetwork> children = _breeder.Breed(sessions, numToBreed); var newSessions = new List <ITrainingSession>(); //Allow the very top numToLiveOn sessions to be added to next generation untouched int numToLiveOn = sessions.Count / 10; var sessionsToLiveOn = sessions.Take(numToLiveOn).ToList(); newSessions.AddRange(sessionsToLiveOn); //try to mutate session that will live on 1 by 1 var mutatedTop = GetMutatedNetworks(sessionsToLiveOn.Select(s => s.NeuralNet), mutateChance); //or each session that lived on that was mutated, remove last top performer, then mutate remaining top performers in batch and add sessions = sessions.Skip(numToLiveOn).ToList(); var sessionSubset = sessions.Take(sessions.Count - mutatedTop.Count); IList <INeuralNetwork> toKeepButPossiblyMutate = sessionSubset.Select(session => session.NeuralNet).ToList(); IList <INeuralNetwork> newNetworks = getNewNetworks(numToGen, mutateChance); List <INeuralNetwork> toTryMutate = new List <INeuralNetwork>(); //try to mutate both new networks as well as all the top performers we wanted to keep toTryMutate.AddRange(toKeepButPossiblyMutate); toTryMutate.AddRange(newNetworks); bool didMutate; IList <INeuralNetwork> maybeMutated = _mutator.Mutate(toTryMutate, mutateChance, out didMutate); List <INeuralNetwork> allToAdd = new List <INeuralNetwork>(); allToAdd.AddRange(mutatedTop); allToAdd.AddRange(children); allToAdd.AddRange(maybeMutated); newSessions.AddRange(allToAdd.Select((net, sessionNumber) => new TrainingSession(net, _evaluatableFactory.Create(net), sessionNumber))); _generation = new Generation(newSessions, _generationConfig); watch.Stop(); LoggerFactory.GetLogger().Log(LogLevel.Debug, $"create generation runtime (sec): {watch.Elapsed.TotalSeconds}"); watch.Reset(); }