private static int NUMTESTS = 5; //previously 20 public ISMCTSPlayer(Perspective perspective) : base(perspective) { playeridx = perspective.GetIdx(); plays = new Dictionary <Tuple <CardGame, int>, int>(new InfoSetComparison(playeridx)); wins = new Dictionary <Tuple <CardGame, int>, double>(new InfoSetComparison(playeridx)); movestatetree = new Dictionary <Tuple <CardGame, int>, Tuple <CardGame, int>[]>(new InfoSetComparison(playeridx)); }
// CODE FOR UPDATING STATISTICS FOR HEURISTICS public void RecordHeuristics(double[][] inverseRankSums) { if (perspective.GetWorld() != null) { double[] inverseRankSum = inverseRankSums[perspective.GetIdx()]; double[] myLeadView = new double[inverseRankSums.Length]; // WHAT DOES WRS stand for? double[] wrs = new double[inverseRankSum.Length]; for (int item = 0; item < inverseRankSum.Length; ++item) { wrs[item] = ((numPlayers - (1.0 / inverseRankSum[item])) / (numPlayers - 1)); } (var minidx, var maxidx) = MinMaxIdx(inverseRankSum); var max = wrs[maxidx]; var min = wrs[minidx]; double avg = 0; for (int i = 0; i < wrs.Length; i++) { avg += wrs[i]; } avg /= (double)wrs.Length; var variance = Math.Abs(max - min); perspective.GetWorld().AddInfo(variance, avg, wrs[maxidx]); for (int i = 0; i < myLeadView.Length; i++) { myLeadView[i] = ((numPlayers - (1.0 / inverseRankSums[i][maxidx])) / (numPlayers - 1)); //Console.WriteLine("Converted " + inverseRankSums[i][maxidx] + " into " + myLeadView[i]); } perspective.AddLeadsList(new Tuple <int, double[]>(perspective.GetIdx(), myLeadView)); leadList.Add(max); } }