private void OpenMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "Maze Files (*.maze)|*.maze"; if (dlg.ShowDialog() == DialogResult.OK) { _walls.Clear(); mazeSpace.Enabled = false; var loaded = MazeUtilities.LoadObject <MazeAgent>(dlg.FileName); _agentPrimary = MazeUtilities.ConvertLoadedAgent(loaded); _agentSecondary = MazeUtilities.ConvertLoadedAgent(loaded); _agentSecondary.Environment = MazeUtilities.CopyEnvironment(loaded.Environment); _agentSecondary.StartPosition = _agentPrimary.StartPosition; AgentSubscribeEvents(_agentPrimary); AgentSubscribeEvents(_agentSecondary); SetFormValuesFromMaze(); _needsRetrain = true; mazeSpace.Enabled = true; } }
private void LoadAgent(string path) { var loaded = MazeUtilities.LoadObject <MazeAgent>(path); loaded.Environment.QualitySaveFrequency = 100; PrimaryAgent = MazeUtilities.ConvertLoadedAgent(loaded); SecondaryAgent = MazeUtilities.ConvertLoadedAgent(loaded); SecondaryAgent.Environment = MazeUtilities.CopyEnvironment(loaded.Environment); SecondaryAgent.StartPosition = PrimaryAgent.StartPosition; if (PrimaryAgent.LearningStyle == QLearning.Core.LearningStyles.QLearning) { SecondaryAgent.LearningStyle = QLearning.Core.LearningStyles.SARSA; } else { SecondaryAgent.LearningStyle = QLearning.Core.LearningStyles.QLearning; } OnPropertyChanged(nameof(SelectedLearningStyle)); OnPropertyChanged(nameof(PrimaryAgent)); OnPropertyChanged(nameof(SecondaryAgent)); OnPropertyChanged(nameof(GoalPosition)); OnPropertyChanged(nameof(MazeVm)); }
private void NewAgentMaze() { PrimaryAgent = new MazeAgent(0.5, 0.5, 1000, 1000, 3); PrimaryAgent.MaximumAllowedBacktracks = 3; PrimaryAgent.MaximumAllowedMoves = 1000; PrimaryAgent.Environment = new MazeBase(1, 1, 0, 0, 200); SecondaryAgent = MazeUtilities.ConvertLoadedAgent(PrimaryAgent); SecondaryAgent.Environment = MazeUtilities.CopyEnvironment(PrimaryAgent.Environment); MazeVm = new MazeViewModel(PrimaryAgent.Environment); OnPropertyChanged(nameof(PrimaryAgent)); OnPropertyChanged(nameof(SecondaryAgent)); OnPropertyChanged(nameof(GoalPosition)); }
public void InitializeSessions() { var trainingSessions = new List <TrainingSessionEx>(); var sessions = _agent.TrainingSessions.OrderBy(e => e.Episode).ToList(); var agent = MazeUtilities.ConvertLoadedAgent(_agent); agent.Environment = MazeUtilities.CopyEnvironment(_agent.Environment); agent.AgentCompleted += Agent_AgentCompleted; for (int i = sessions.Count - 1; i >= 0; --i) { var session = new TrainingSessionEx { Episode = sessions[i].Episode, Moves = sessions[i].Moves, Quality = sessions[i].Quality, Score = sessions[i].Score }; _moves = 0; _score = 0; agent.Environment.QualityTable = session.Quality; try { agent.Run(agent.StartPosition); session.Succeeded = true; } catch { session.Succeeded = false; } session.Moves = _moves; session.Score = _score; trainingSessions.Add(session); } var selection = trainingSessions .GroupBy(g => new { g.Moves, g.Score, g.Succeeded }) .Select(t => new TrainingSessionEx() { MinEpisode = t.Last().Episode, MaxEpisode = t.First().Episode, Episode = t.Last().Episode, Moves = t.Key.Moves, Score = t.Key.Score, Succeeded = t.Key.Succeeded, Quality = t.First().Quality }); trainingSessions = selection .OrderByDescending(s => s.Succeeded) .ThenByDescending(m => m.Moves) .ThenByDescending(e => e.MinEpisode).ToList(); TrainingSessions = trainingSessions; SelectedSession = TrainingSessions.FirstOrDefault(); agent.AgentCompleted -= Agent_AgentCompleted; }