コード例 #1
0
        private void SetupTest()
        {
            var sceneSetup = Tester.SetupNextTest(Agent);

            //Run Test if tester have set up scene
            if (sceneSetup)
            {
                _testIsRunning = true;
                //End test run if tester says its over.
            }
            else
            {
                Tester.OnRunComplete();
                _testIsOver = true;
                if (Benchmark && BenchmarkSave.HaveRunsLeft)
                {
                    RemakeManager();
                    ModeOverride = QAIMode.Learning;
                    Mode         = QAIMode.Learning;
                    BenchmarkSave.NextRun();
                    Application.LoadLevel(Application.loadedLevel);
                }
                else
                {
                    EditorApplication.isPlaying = false;
                }
            }
        }
コード例 #2
0
        private void EndOfEpisode()
        {
            if (_sceneIsOver)
            {
                return;
            }
            if (_qlearning.Iteration >= Terminator)
            {
                _qlearning.SaveModel();
                BenchmarkSave.WriteRunTime(_stopwatch.Elapsed.TotalSeconds);
                Debug.Log("Learning over after " + _stopwatch.Elapsed.TotalSeconds + " secounds");
                if (Benchmark)
                {
                    Debug.Log("Running Tester");

                    ModeOverride = QAIMode.Testing;
                    _qlearning.LoadModel();
                    Application.LoadLevel(Application.loadedLevel);
                }
                else
                {
                    EditorApplication.isPlaying = false;
                    EditorApplication.Beep();
                }
            }
            else
            {
                Application.LoadLevel(Application.loadedLevel);
                _qlearning.Iteration++;
            }
            _sceneIsOver = true;
        }
コード例 #3
0
 public void Reset()
 {
     Debug.Log("Resetting");
     _remake          = false;
     _learnAllStories = false;
     _benchmark       = false;
     _mode            = QAIMode.Runnning;
 }
コード例 #4
0
        private void PlayModeChange()
        {
            if (_started && !EditorApplication.isPlayingOrWillChangePlaymode && EditorApplication.isPlaying)
            {
                // Stop is called within the playmode scene

                if (_currentStory != null)
                {
                    Debug.Log("Saving imiation data");
                    var imitation = QAIManager.SaveImitation("Imitation set " + (_currentStory.ImitationExperiences.Count + 1));
                    _currentStory.ImitationExperiences.Add(imitation);
                    _currentStory.Save(STORY_PATH);
                }
                _currentStory = null;
            }
            if (_started && !EditorApplication.isPlaying)
            {
                // Stop is called within the editor scene
                _started = false;

                // Do something that should happen on stop
                _init = false;
                Init();

                _mode = QAIMode.Runnning;
                _manager.ModeOverride = _mode;
                _currentStory         = null;

                _learningStory++;
                if (_learnAllStories && _learningStory < _stories.Count)
                {
                    Debug.Log("Starting next learning story");
                    _remake     = false;
                    _forceStart = true;
                    _mode       = QAIMode.Learning;
                }
                else
                {
                    _learnAllStories = false;
                    _benchmark       = false;
                    _learningStory   = 0;
                    _remake          = false;
                }
            }
            if (_starting && EditorApplication.isPlaying)
            {
                // Start is called within the playmode scene
                _starting = false;
                _started  = true;

                // Do something that should happen on start
            }
        }
コード例 #5
0
        private void Init()
        {
            if (_init)
            {
                return;
            }
            _init = true;

            _manager = CreateManager();
            _agent   = _manager.ActiveAgent;
            _tester  = _manager.Tester;
            _mode    = _manager.Mode;
            _remake  = _manager.Remake;
            _term    = _manager.Terminator;
            Directory.CreateDirectory(STORY_PATH);
            _stories      = QStory.LoadForScene(STORY_PATH, EditorApplication.currentScene); // Should read this when serialization works
            _currentStory = _currentStory == null ? null : _stories.Find(s => s.Id == _currentStory.Id);
            _benchmark    = _manager.Benchmark;
        }
コード例 #6
0
        private void OnGUI()
        {
            Init();
            if (_manager == null || _manager != FindObjectOfType <QAIManager>())
            {
                _init = false;
            }

            _mode = _manager.ModeOverride;

            _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
            EditorApplication.playmodeStateChanged -= PlayModeChange;
            EditorApplication.playmodeStateChanged += PlayModeChange;

            //PROGRESS BAR
            ProgressBars();

            //SETUP
            GUILayout.Space(10);
            EditorGUILayout.LabelField("Setup");
            _agent  = (GameObject)EditorGUILayout.ObjectField("Current Agent", _agent, typeof(GameObject), true);
            _tester = (QTester)EditorGUILayout.ObjectField("Current Tester", _tester, typeof(QTester), true);
            _term   = EditorGUILayout.IntField("Iterations", _term);
            GUILayout.Space(10);

            //BUTTONS
            Buttons();
            if (GUILayout.Button("Reload all", GUILayout.Height(15)))
            {
                _init = false;
            }

            //IMITATION LEARNING
            if (_stories.Count == 0)
            {
                var newStory = new QStory();
                newStory.ScenePath = EditorApplication.currentScene;
                newStory.Save(STORY_PATH);
                _stories.Add(newStory);
            }
            var story = _stories[0];

            GUILayout.Space(20);
            EditorGUILayout.LabelField("Training data");

            //Imitation training
            EditorGUILayout.BeginHorizontal();
            GUILayout.Space(17);
            GUILayout.Label("Imitation learning");
            if (GUILayout.Button("Record"))
            {
                _mode         = QAIMode.Imitating;
                _currentStory = story;
                ChangePlayMode();
            }
            EditorGUILayout.EndHorizontal();
            foreach (var exp in story.ImitationExperiences)
            {
                EditorGUILayout.BeginHorizontal();
                GUILayout.Space(35);
                GUILayout.Label(exp.Name);
                if (GUILayout.Button("Delete"))
                {
                    story.ImitationExperiences.Remove(exp);
                    story.Save(STORY_PATH);
                    return;
                }
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.EndScrollView();

            if (_showAdvanced = EditorGUILayout.Foldout(_showAdvanced, "Advanced options"))
            {
                EditorGUI.indentLevel++;
                _visualize = EditorGUILayout.Toggle("Visualize Network", _visualize);
                _manager.PrioritizedSweeping = EditorGUILayout.Toggle("Priority Sweeping", _manager.PrioritizedSweeping);
            }


            // Set the values in the AI manager to be saved with the scene.
            if (_manager.ActiveAgent != _agent ||
                _manager.Remake != _remake ||
                _manager.Terminator != _term ||
                _manager.ActiveAgent != _agent ||
                _manager.Tester != _tester ||
                _manager.Mode != _mode ||
                _manager.VisualizeNetwork != _visualize)
            {
                EditorApplication.MarkSceneDirty();
            }

            _manager.Remake           = _remake;
            _manager.Benchmark        = _benchmark;
            _manager.Terminator       = _term;
            _manager.ActiveAgent      = _agent;
            _manager.Tester           = _tester;
            _manager.VisualizeNetwork = _visualize;
            _manager.Mode             = _mode;
            _manager.ModeOverride     = _mode;

//            _manager.OptionWindow = this;

            if (_forceStart)
            {
                _forceStart = false;
                ChangePlayMode();
            }
        }
コード例 #7
0
 public void SetMode(QAIMode mode)
 {
     _mode = mode;
 }
コード例 #8
0
        private void Buttons()
        {
            if (!_learnAllStories)
            {
                GUI.backgroundColor = Color.green;
                var start = GUILayout.Button("Start learning");
                GUI.backgroundColor = Color.white;
                var remake     = GUILayout.Button("Remake and learn");
                var testButton = GUILayout.Button("Run Tester");
                GUILayout.Space(10);
                var benchmark = GUILayout.Button("Begin Benchmark");
                GUILayout.Space(10);

                if (start || remake || benchmark)
                {
                    if (_agent == null)
                    {
                        EditorUtility.DisplayDialog("QAI", "No agent is currently set. Unable to start training.", "OK");
                    }
                    else
                    {
                        _mode            = QAIMode.Learning;
                        _learnAllStories = true;
                        _remake          = remake || benchmark;
                        _benchmark       = benchmark;
                        if (!benchmark)
                        {
                            ChangePlayMode();
                        }
                        else
                        {
                            BenchmarkDialog.OpenWindow(this, _manager);
                        }
                    }
                }

                //TESTER
                if (testButton && _manager.Tester != null)
                {
                    _mode = QAIMode.Testing;
                    _manager.BenchmarkID = null;
                    if (!Event.current.alt)
                    {
                        ChangePlayMode();
                    }
                    else
                    {
                        var path = EditorUtility.OpenFilePanel("Open brain", BenchmarkSave.TestFolder, "xml");
                        if (path.Equals(""))
                        {
                            Reset();
                        }
                        else
                        {
//							var fullFile = path.Substring(path.LastIndexOf(Path.DirectorySeparatorChar)+1);
//							var fileEnd = fullFile.LastIndexOf('-');
//							var filename = fullFile.Substring(0, fileEnd);
                            _manager.BenchmarkID = path;
                            ChangePlayMode();
                        }
                    }
                }
                else if (testButton && _manager.Tester == null)
                {
                    EditorUtility.DisplayDialog("QAI", "No tester is set. Please create a testing manager and assign it in the editor.", "OK");
                }
            }
            else
            {
                var c  = GUI.color;
                var bc = GUI.backgroundColor;
                GUI.color           = Color.white;
                GUI.backgroundColor = Color.red;
                if (GUILayout.Button("ABORT!"))
                {
                    _learnAllStories = false;
                    ChangePlayMode();
                }
                GUI.color           = c;
                GUI.backgroundColor = bc;
            }
        }