Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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;
        }