public void Test_Leduc() { GameDefinition gd = XmlSerializerExt.Deserialize <GameDefinition>( Props.Global.Expand("${bds.DataDir}ai.pkr.metastrategy/leduc-he.gamedef.xml")); string[] strategyFilesRel = new string[] { "eq-LeducHe-0-s.xml", "eq-LeducHe-1-s.xml" }; string[] StrategyFilesAbs = new string[gd.MinPlayers].Fill(i => Path.Combine(_testResDir, strategyFilesRel[i])); StrategyTree[] strategiesOrig = new StrategyTree[gd.MinPlayers].Fill(i => XmlToStrategyTree.Convert(StrategyFilesAbs[i], gd.DeckDescr)); ChanceTree ct = CreateChanceTreeByGameDef.Create(gd); ActionTree at = CreateActionTreeByGameDef.Create(gd); GameValue gv1 = new GameValue { ActionTree = at, ChanceTree = ct, Strategies = strategiesOrig }; gv1.Solve(); for (int p = 0; p < gd.MinPlayers; ++p) { StrategyTree[] strategiesMerged = new StrategyTree[gd.MinPlayers].Fill(i => XmlToStrategyTree.Convert(StrategyFilesAbs[i], gd.DeckDescr)); // Merge strategy to the stategy at postion p. for (int pSrc = 0; pSrc < gd.MinPlayers; ++pSrc) { if (p == pSrc) { continue; } MergeStrategies.Merge(strategiesMerged[p], strategiesMerged[pSrc], pSrc); } // Copy strategy at position p to the other positions for (int pCopy = 0; pCopy < gd.MinPlayers; ++pCopy) { strategiesMerged[pCopy] = strategiesMerged[p]; } GameValue gv2 = new GameValue { ActionTree = at, ChanceTree = ct, Strategies = strategiesMerged }; gv2.Solve(); Assert.AreEqual(gv1.Values, gv2.Values); } }
void MergeAndSaveStrategies(string runDir, string suffix, StrategyTree[] strategies, IChanceAbstraction[] chanceAbstractions) { for (int p = 1; p < strategies.Length; ++p) { for (int p1 = 0; p1 < p; ++p1) { if (chanceAbstractions[p1] == chanceAbstractions[p]) { MergeStrategies.Merge(strategies[p1], strategies[p], p); strategies[p] = null; } } } for (int p = 0; p < strategies.Length; ++p) { if (strategies[p] == null) { continue; } string fileName = Path.Combine(runDir, string.Format("strategy-{0}{1}.dat", p, suffix)); strategies[p].Write(fileName); //VisStrategyTree.Show(strategies[p], fileName + ".gv"); } }