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");
     }
 }