private void Init(QAgent agent, QOption option) { if (Benchmark) { BenchmarkSave.CurrentTestID = _instance.BenchmarkID; BenchmarkSave.Runs = _instance.BenchmarkRuns; } else if (Mode == QAIMode.Testing && BenchmarkID != null && !BenchmarkID.Equals("")) { BenchmarkSave.ModelPath = _instance.BenchmarkID; } else { BenchmarkSave.CurrentTestID = agent.AI_ID().ID; BenchmarkSave.Runs = 1; } Debug.Log("Running " + BenchmarkSave.ModelPath + " in mode " + Mode); _stopwatch = Stopwatch.StartNew(); if (Tester != null) { Tester.Init(); } DontDestroyOnLoad(gameObject); switch (Mode) { case QAIMode.Imitating: { _imitation = new QImitation(); break; } default: { var qlCNN = new QLearningCNN(PrioritizedSweeping, option); _qlearning = qlCNN; _qlearning.Reset(agent); if (Remake) { _qlearning.RemakeModel(agent.GetState()); } else { _qlearning.LoadModel(); } if (VisualizeNetwork) { _visualizer = _qlearning.CreateVisualizer(); } qlCNN.CNN.ValuesComputed += (data, isTraining) => { if (NetworkValuesUpdated != null) { NetworkValuesUpdated(data, isTraining); } }; break; } } }
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; }