public void PlayGameWithHundredRewardAndGameOver() { var boxes = new List <Reward> { Reward.Hundred, Reward.GameOver }; var additionalRewards = new List <AdditionalReward> { AdditionalReward.Five }; var simulationDriver = new SimulationDriver(100_000, boxes, additionalRewards); var avg = simulationDriver.Run(); Assert.Equal(55, avg, 0); var gamesGenerator = new GamesGenerator(); gamesGenerator.Generate(RewardListToBoxes(boxes), additionalRewards); Assert.Equal(55, gamesGenerator.AverageScore.ToDouble(), 0); }
private void Test(List <Reward> boxes, List <AdditionalReward> additionalRewards) { var simulationDriver = new SimulationDriver(50_000_000, boxes, additionalRewards); var avg = simulationDriver.Run(); var gamesGenerator = new GamesGenerator(); gamesGenerator.Generate(RewardListToBoxes(boxes), additionalRewards); foreach (var game in gamesGenerator.Games .OrderBy(s => s.GameKey)) { // System.Console.WriteLine($"{game.GameKey}, Probability: {game.Probability} ({game.Probability.ToDouble()})"); } System.Console.WriteLine(); // var stats = simulationDriver.Stats(); var stat = gamesGenerator.Games.Select(g => g.GameKey) .Union(simulationDriver.Statistics.Keys) .ToHashSet() .Select(k => new Stat { GameKey = k }) .ToDictionary(s => s.GameKey); foreach (var s in simulationDriver.Statistics) { stat[s.Key].Count = s.Value; } foreach (var game in gamesGenerator.Games) { stat[game.GameKey].Probability = game.Probability; } System.Console.WriteLine("Stats:"); // foreach (var s in stat) // { // if (!s.Value.Probability.HasValue) // { // Console.WriteLine($"{s.Value.GameKey} Count: {s.Value.Count} ({(double)s.Value.Count / simulationDriver.Games.Count})"); // } // else if (!s.Value.Count.HasValue) // { // Console.WriteLine($"{s.Value.GameKey} Probability: {s.Value.Probability} ({s.Value.Probability?.ToDouble()})"); // } // else // { // // var prob = s.Value.Probability?.ToDouble(); // // var sim = (double)s.Value.Count / simulationDriver.Games.Count; // // Console.WriteLine($"{s.Value.GameKey} Probability: {s.Value.Probability} ({s.Value.Probability?.ToDouble()}), Count: {s.Value.Count} ({(double)s.Value.Count / simulationDriver.Games.Count})"); // } // } System.Console.WriteLine($"All: {stat.Count()}"); System.Console.WriteLine($"All simulation games: {simulationDriver.Statistics.Values.Sum()}"); System.Console.WriteLine($"No probability: {stat.Where(x => !x.Value.Probability.HasValue).Count()}"); System.Console.WriteLine($"No simulation: {stat.Where(x => !x.Value.Count.HasValue).Count()}"); foreach (var g in stat.Where(x => !x.Value.Count.HasValue)) { System.Console.WriteLine(g.Key); } System.Console.WriteLine($"Probability: {gamesGenerator.AverageScore.ToDouble()}"); System.Console.WriteLine($"Simulation: {avg}"); Assert.InRange(avg - gamesGenerator.AverageScore.ToDouble(), -0.5, 0.5); }