コード例 #1
0
        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));
        }