Esempio n. 1
0
        static void comRunQ()
        {
            Console.WriteLine("Q is player..?");
            byte temp3 = byte.Parse(Console.ReadLine());

            Console.WriteLine("How many games?");
            int temp1 = int.Parse(Console.ReadLine());

            Console.WriteLine("Board size?");
            int temp4 = int.Parse(Console.ReadLine());

            Console.WriteLine("Which opponent?");
            string        command = Console.ReadLine();
            StreamReader  reader  = new StreamReader("qdatafiles.txt");
            List <String> files   = new List <string>();

            while (reader.Peek() != -1)
            {
                files.Add(reader.ReadLine());
            }
            reader.Close();
            foreach (String s in files)
            {
                Console.WriteLine("Using file " + s);
                QAgent qagentm = new QAgent(temp3);
                qagentm.Load(s);
                qagentm.TurnOffExploration();
                qagentm.TurnOffLearning();
                RunQ(temp3, qagentm, command, temp1, temp4);
            }
        }
Esempio n. 2
0
        static void TrainQ(int size, byte qnumber, QAgent agent, String opponent, String logname, String savename, int iterations, int saveinterval = 360)
        {
            Virus        virus = new Virus(2, size);
            int          wins = 0, wins2 = 0;
            byte         oppnumber = qnumber == 1 ? (byte)2 : (byte)1;
            Agent        opp       = new BruteForceAgent(oppnumber);
            StreamWriter writer    = new StreamWriter(logname);

            for (int i = 1; i <= iterations; i++)
            {
                switch (opponent)
                {
                case "brute":
                    break;

                case "minimax4":
                    opp = new MinimaxAgent(4, oppnumber);
                    break;

                case "minimax3":
                    opp = new MinimaxAgent(3, oppnumber);
                    break;

                case "minimax2":
                    opp = new MinimaxAgent(2, oppnumber);
                    break;

                default:
                    opp = new BruteForceAgent(oppnumber);
                    break;
                }

                int winner = RunGame(virus, qnumber == 1 ? (Agent)agent : opp, qnumber == 2 ? (Agent)agent : opp);
                wins  += winner == 1 ? 1 : 0;
                wins2 += winner == 1 ? 1 : 0;

                if (i % 100 == 0)
                {
                    if (agent.RandomRate == 0)
                    {
                        writer.WriteLine(wins2);
                    }
                    wins2 = 0;
                }
                if (i % saveinterval == 0)
                {
                    agent.Save(savename);
                    Console.WriteLine("Iteration: " + i);
                    Console.WriteLine("Wins: " + wins);
                    wins = 0;
                    if (agent.RandomRate > 0)
                    {
                        agent.TurnOffExploration();
                        agent.TurnOffLearning();
                        for (int j = 1; j <= 1000; j++)
                        {
                            virus  = new Virus(2, size);
                            winner = RunGame(virus, qnumber == 1 ? (Agent)agent : opp, qnumber == 2 ? (Agent)agent : opp);
                            wins  += winner == 1 ? 1 : 0;
                        }
                        writer.WriteLine(wins);
                        wins = 0;
                        agent.TurnOnExploration();
                        agent.TurnOnLearning();
                    }
                }
                virus = new Virus(2, size);
            }
            writer.Close();
        }