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