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; } } }
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; }
public void Reset() { Debug.Log("Resetting"); _remake = false; _learnAllStories = false; _benchmark = false; _mode = QAIMode.Runnning; }
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 } }
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; }
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(); } }
public void SetMode(QAIMode mode) { _mode = mode; }
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; } }