private static int DoTest(int nseed, int games, float [] coefs) { List <PlayerHolder> players = new List <PlayerHolder>(); PlayerHolder targetPlayer = new PlayerHolder(new AnalyzerPlayer(false, coefs[0], coefs[1], coefs[2], coefs[3], coefs[4])); players.Add(targetPlayer); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Greed, 2.0f, 0.4f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Greed, 1.0f, 0.3f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Greed, 0.9f, 0.2f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Normal, 2.0f, 0.5f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Normal, 1.0f, 0.4f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Normal, 0.9f, 0.3f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Normal, 0.75f, 0.3f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Benevolent, 0.9f, 0.3f))); players.Add(new PlayerHolder(new TelepatePlayer(TelepateType.Benevolent, 2.0f, 0.5f))); players.Add(new PlayerHolder(new AnalyzerPlayer(false, 0.9f, 0.9f))); players.Add(new PlayerHolder(new AnalyzerPlayer(false, 1.0f, 0.9f))); players.Add(new PlayerHolder(new AnalyzerPlayer(true, 0.9f, 0.9f))); players.Add(new PlayerHolder(new AnalyzerPlayer(true, 2.0f, 0.85f))); players.Add(new PlayerHolder(new AnalyzerPlayer(true, 0.5f, 0.5f))); //players.Add(new PlayerHolder(new AnalyzerPlayer(false, 0.9f, 0.9f))); //players.Add(new PlayerHolder(new AnalyzerPlayer(true, 0.8f, 0.6f))); //players.Add(new PlayerHolder(new AnalyzerPlayer(true, 0.75f, 0.75f))); players.Add(new PlayerHolder(new AnalyzerPlayer(false, 2.0f, 0.9f))); //players.Add(new PlayerHolder(new AnalyzerPlayer(true, 2.0f, 0.9f))); // players.Add(new PlayerHolder(new AnalyzerPlayer(true, 2.0f, 2.0f))); // players.Add(new PlayerHolder(new AnalyzerPlayer(true, 1.0f, 1.0f))); players.Add(new PlayerHolder(new ExamplePlayer())); players.Add(new PlayerHolder(new ExamplePlayer())); players.Add(new PlayerHolder(new ExamplePlayer())); players.Add(new PlayerHolder(new ExamplePlayer())); players.Add(new PlayerHolder(new ExamplePlayer())); players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new RandomPlayer(1))); players.Add(new PlayerHolder(new RandomPlayer(2))); players.Add(new PlayerHolder(new RandomPlayer(3))); players.Add(new PlayerHolder(new RandomPlayer(4))); players.Add(new PlayerHolder(new RandomPlayer(5))); // players.Add(new PlayerHolder(new SemiExamplePlayer())); // // // players.Add(new PlayerHolder(new ExamplePlayer())); //players.Add(new PlayerHolder(new ExamplePlayer())); //players.Add(new PlayerHolder(new ExamplePlayer())); // //players.Add(new PlayerHolder(new RandomPlayer())); //players.Add(new PlayerHolder(new RandomPlayer())); //players.Add(new PlayerHolder(new RandomPlayer())); // // // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // //players.Add(new PlayerHolder(new RandomPlayer())); //players.Add(new PlayerHolder(new RandomPlayer())); //players.Add(new PlayerHolder(new RandomPlayer())); // // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // //players.Add(new PlayerHolder(new SemiExamplePlayer())); //players.Add(new PlayerHolder(new SemiExamplePlayer())); // players.Add(new PlayerHolder(new SemiExamplePlayer())); // // // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // // players.Add(new PlayerHolder(new SemiExamplePlayer())); // players.Add(new PlayerHolder(new SemiExamplePlayer())); // players.Add(new PlayerHolder(new SemiExamplePlayer())); // // // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // players.Add(new PlayerHolder(new ExamplePlayer())); // //players.Add(new PlayerHolder(new SemiExamplePlayer())); //players.Add(new PlayerHolder(new SemiExamplePlayer())); // players.Add(new PlayerHolder(new SemiExamplePlayer())); players.Add(new PlayerHolder(new GreedPlayer())); players.Add(new PlayerHolder(new GreedPlayer())); players.Add(new PlayerHolder(new GreedPlayer())); players.Add(new PlayerHolder(new CooperativePlayer())); players.Add(new PlayerHolder(new CooperativePlayer())); players.Add(new PlayerHolder(new CooperativePlayer())); players.Add(new PlayerHolder(new AnalyzerPlayer(false, 0.9f, 0.9f))); Generator generator = new Generator(3, 1, 6, 10); Random random = new Random(nseed); #if !ONE List <int> seeds = new List <int>(); for (int i = 0; i < games; i++) { seeds.Add(random.Next()); } foreach (PlayerHolder playerOne in players) { foreach (PlayerHolder playerTwo in players) { if (playerOne != playerTwo) { foreach (int seed in seeds) { Random newRandom = new Random(seed); Tuple <int, int> result = Simulation(generator, 10, 5, playerOne.Player, playerTwo.Player, Logger, newRandom); playerOne.SubmitResult(result.Item1, result.Item2); playerTwo.SubmitResult(result.Item2, result.Item1); } } } } #else { Generator tempGenerator = new Generator(3, 1, 6, 10); int[] counts = new int[] { 3, 1, 1 }; int[] values1 = new int[] { 0, 1, 9 }; int[] values2 = new int[] { 0, 3, 7 }; int currentSet = -1; int currentValues1 = -1; int currentValues2 = -1; for (int i = 0; i < tempGenerator.Combinations.Count; i++) { if (Utils.ArrayEquals(counts, tempGenerator.Combinations[i].Item1)) { currentSet = i; for (int j = 0; j < tempGenerator.Combinations[i].Item2.Length; j++) { if (Utils.ArrayEquals(tempGenerator.Combinations[i].Item2[j], values1)) { currentValues1 = j; } if (Utils.ArrayEquals(tempGenerator.Combinations[i].Item2[j], values2)) { currentValues2 = j; } if (currentValues1 != -1 && currentValues2 != -1) { break; } } break; } } PlayerHolder playerOne = players[0]; PlayerHolder playerTwo = players[1]; Tuple <int, int> result = Simulation(generator, 10, 5, playerOne.Player, playerTwo.Player, Logger, random, currentSet, currentValues1, currentValues2); playerOne.SubmitResult(result.Item1, result.Item2); playerTwo.SubmitResult(result.Item2, result.Item1); } #endif players.Sort((x, y) => Comparer <int> .Default.Compare(x.Win, y.Win)); for (int i = 0; i < players.Count; i++) { Console.WriteLine("{0}: {1}", i, players[i]); } return(targetPlayer.Win + (players.IndexOf(targetPlayer) * 1000000)); }