static void TrainMemoryQ(int size, byte qnumber, MemoryQAgent 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; agent.ProcessShortTermMemory(); if (i % saveinterval == 0) { agent.Save(savename); Console.WriteLine("Iteration: " + i); Console.WriteLine("Wins: " + wins); wins = 0; } virus = new Virus(2, size); } for (int n = 0; n < 10; n++) { MemoryQAgent ag = new MemoryQAgent(); for (int i = 0; i < 1000; i++) { agent.TellOfMemoryTo(ag); } wins = 0; opp = new BruteForceAgent(oppnumber); for (int i = 1; i <= 10000; 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)ag : opp, qnumber == 2 ? (Agent)ag : opp); wins += winner == 1 ? 1 : 0; virus = new Virus(2, size); } Console.WriteLine("After 1000 memories"); Console.WriteLine("Wins: " + wins); writer.Write(((double)wins) / 10000.0 + ";"); for (int i = 0; i < 9000; i++) { agent.TellOfMemoryTo(ag); } wins = 0; opp = new BruteForceAgent(oppnumber); for (int i = 1; i <= 10000; 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)ag : opp, qnumber == 2 ? (Agent)ag : opp); wins += winner == 1 ? 1 : 0; virus = new Virus(2, size); } Console.WriteLine("After 10000 memories"); Console.WriteLine("Wins: " + wins); writer.Write(((double)wins) / 10000.0 + ";"); for (int i = 0; i < 90000; i++) { agent.TellOfMemoryTo(ag); } wins = 0; opp = new BruteForceAgent(oppnumber); for (int i = 1; i <= 10000; 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)ag : opp, qnumber == 2 ? (Agent)ag : opp); wins += winner == 1 ? 1 : 0; virus = new Virus(2, size); } Console.WriteLine("After 100000 memories"); Console.WriteLine("Wins: " + wins); writer.WriteLine(((double)wins) / 10000.0); } writer.Close(); agent.SaveLongTermMemory("m"); }