private void GenerateNGram() { if (blackBoard.ConfigUI.Config.HeiarchalEnabled) { grammar = NGramFactory.InitHierarchicalNGram( blackBoard.ConfigUI.Config.N, blackBoard.ConfigUI.Config.HeiarchalMemory); simpleGrammar = NGramFactory.InitHierarchicalNGram( blackBoard.ConfigUI.Config.N, blackBoard.ConfigUI.Config.HeiarchalMemory); } else if (blackBoard.ConfigUI.Config.BackOffEnabled) { grammar = NGramFactory.InitHierarchicalNGram( blackBoard.ConfigUI.Config.N, blackBoard.ConfigUI.Config.BackOffMemory); simpleGrammar = NGramFactory.InitHierarchicalNGram( blackBoard.ConfigUI.Config.N, blackBoard.ConfigUI.Config.BackOffMemory); } else { grammar = NGramFactory.InitGrammar(blackBoard.ConfigUI.Config.N); simpleGrammar = NGramFactory.InitGrammar(blackBoard.ConfigUI.Config.N); } for (int i = 0; i <= blackBoard.ProgressIndex; ++i) { if (blackBoard.ConfigUI.Config.UsingTieredGeneration || blackBoard.ProgressIndex == i) { JsonObject tierInfo = blackBoard.GameFlow[i].AsJsonObject; JsonArray tierLevels = tierInfo[FlowKeys.LevelNames].AsJsonArray; foreach (string levelName in tierLevels) { List <string> columns = LevelParser.BreakMapIntoColumns(levelName); columns.RemoveAt(columns.Count - 1); // remove flag at the end List <string> simpleColumns = LevelParser.BreakColumnsIntoSimplifiedTokens( columns, blackBoard.ConfigUI.Config.Game); levelColumns.Add(columns); simplifiedLevelColumns.Add(simpleColumns); NGramTrainer.Train(grammar, columns, skipFirst: true); NGramTrainer.Train(simpleGrammar, simpleColumns, skipFirst: true); if (blackBoard.ProgressIndex != i) { grammar.UpdateMemory(blackBoard.ConfigUI.Config.TieredGenerationMemoryUpdate); levelColumns.Clear(); simplifiedLevelColumns.Clear(); } } } } }