def fitness(self): """fitness""" if self.fitness_value is not None: return self.fitness_value simulator = Simulator( { 'Challenger': Table( corner=self.param[0], c=self.param[1], a1=self.param[2], a2=self.param[3], b1=self.param[4], b2=self.param[5], b3=self.param[6], x=self.param[7], o1=self.param[8], o2=self.param[9], ), 'Opponent': Table(), }, './ga_setting.json', ) simulator.start() print(simulator) self.fitness_value = ((simulator.result_ratio['Challenger'] - simulator.result_ratio['Opponent']) + 100) / 2 return self.fitness_value
def test_simulator_multi_process_parallel_by_game(self): json_file = './simulator_setting2.json' simulator_setting = { "board_size": 4, "matches": 5, "processes": 2, "parallel": "game", "random_opening": 0, } with open(json_file, 'w') as f: json.dump(simulator_setting, f) players_info = { 'AlphaBeta1': _AlphaBeta(depth=2, evaluator=Evaluator_TPW()), 'AlphaBeta2': _AlphaBeta(depth=2, evaluator=Evaluator_TPW()), } simulator = Simulator(players_info, json_file) os.remove(json_file) with captured_stdout() as stdout: simulator.start() print(simulator) lines = stdout.getvalue().splitlines() self.assertEqual(lines[0], "processes 2") self.assertEqual(lines[1], "") self.assertEqual(lines[2], "Size : 4") self.assertEqual( lines[3], " | AlphaBeta1 AlphaBeta2 " ) self.assertEqual( lines[4], "-------------------------------------------------------------------------------" ) self.assertEqual( lines[5], "AlphaBeta1 | ------ 50.0% " ) self.assertEqual( lines[6], "AlphaBeta2 | 50.0% ------ " ) self.assertEqual( lines[7], "-------------------------------------------------------------------------------" ) self.assertEqual(lines[8], "") self.assertEqual( lines[9], " | Total | Win Lose Draw Match") self.assertEqual( lines[10], "------------------------------------------------------------") self.assertEqual( lines[11], "AlphaBeta1 | 50.0% | 5 5 0 10") self.assertEqual( lines[12], "AlphaBeta2 | 50.0% | 5 5 0 10") self.assertEqual( lines[13], "------------------------------------------------------------")
def test_simulator_white_win_parallel_by_game(self): json_file = './simulator_setting.json' simulator_setting = { "board_size": 4, "matches": 10, "processes": 1, "parallel": "game", "random_opening": 0, } with open(json_file, 'w') as f: json.dump(simulator_setting, f) class WhiteWin(AbstractStrategy): def next_move(self, color, board): depth = board._black_score + board._white_score - 4 move = None if depth == 0: move = (1, 0) elif depth == 1: move = (0, 0) elif depth == 2: move = (0, 1) elif depth == 3: move = (2, 0) elif depth == 4: move = (3, 0) elif depth == 5: move = (0, 2) elif depth == 6: move = (0, 3) elif depth == 7: move = (3, 2) elif depth == 8: move = (2, 3) return move players_info = { 'WhiteWin1': WhiteWin(), 'WhiteWin2': WhiteWin(), } simulator = Simulator(players_info, json_file) os.remove(json_file) with captured_stdout() as stdout: simulator.start() print(simulator) lines = stdout.getvalue().splitlines() self.assertEqual(lines[0], "processes 1") self.assertEqual(lines[1], "WhiteWin1 WhiteWin2 10") self.assertEqual(lines[2], " - WhiteWin1 WhiteWin2 5") self.assertEqual(lines[3], " - WhiteWin1 WhiteWin2 10") self.assertEqual(lines[4], "WhiteWin2 WhiteWin1 10") self.assertEqual(lines[5], " - WhiteWin2 WhiteWin1 5") self.assertEqual(lines[6], " - WhiteWin2 WhiteWin1 10") self.assertEqual(lines[7], "") self.assertEqual(lines[8], "Size : 4") self.assertEqual( lines[9], " | WhiteWin1 WhiteWin2 " ) self.assertEqual( lines[10], "-------------------------------------------------------------------------------" ) self.assertEqual( lines[11], "WhiteWin1 | ------ 50.0% " ) self.assertEqual( lines[12], "WhiteWin2 | 50.0% ------ " ) self.assertEqual( lines[13], "-------------------------------------------------------------------------------" ) self.assertEqual(lines[14], "") self.assertEqual( lines[15], " | Total | Win Lose Draw Match") self.assertEqual( lines[16], "------------------------------------------------------------") self.assertEqual( lines[17], "WhiteWin1 | 50.0% | 10 10 0 20") self.assertEqual( lines[18], "WhiteWin2 | 50.0% | 10 10 0 20") self.assertEqual( lines[19], "------------------------------------------------------------")
def test_simulator_draw(self): json_file = './simulator_setting.json' simulator_setting = { "board_size": 4, "matches": 10, "processes": 1, "random_opening": 0, } with open(json_file, 'w') as f: json.dump(simulator_setting, f) class Draw(AbstractStrategy): def next_move(self, color, board): depth = board._black_score + board._white_score - 4 move = None if depth == 0: move = (1, 0) elif depth == 1: move = (0, 0) elif depth == 2: move = (0, 1) elif depth == 3: move = (0, 2) elif depth == 4: move = (0, 3) elif depth == 5: move = (2, 3) elif depth == 6: move = (1, 3) elif depth == 7: move = (2, 0) elif depth == 8: move = (3, 3) elif depth == 9: move = (3, 2) elif depth == 10: move = (3, 0) elif depth == 11: move = (3, 1) return move players_info = { 'Draw1': Draw(), 'Draw2': Draw(), } simulator = Simulator(players_info, json_file) os.remove(json_file) with captured_stdout() as stdout: simulator.start() print(simulator) lines = stdout.getvalue().splitlines() self.assertEqual(lines[0], "processes 1") self.assertEqual(lines[1], "Draw1 Draw2") self.assertEqual(lines[2], " - Draw1 Draw2 5") self.assertEqual(lines[3], " - Draw1 Draw2 10") self.assertEqual(lines[4], "Draw2 Draw1") self.assertEqual(lines[5], " - Draw2 Draw1 5") self.assertEqual(lines[6], " - Draw2 Draw1 10") self.assertEqual(lines[7], "") self.assertEqual(lines[8], "Size : 4") self.assertEqual( lines[9], " | Draw1 Draw2 " ) self.assertEqual( lines[10], "-------------------------------------------------------------------------------" ) self.assertEqual( lines[11], "Draw1 | ------ 0.0% " ) self.assertEqual( lines[12], "Draw2 | 0.0% ------ " ) self.assertEqual( lines[13], "-------------------------------------------------------------------------------" ) self.assertEqual(lines[14], "") self.assertEqual( lines[15], " | Total | Win Lose Draw Match") self.assertEqual( lines[16], "------------------------------------------------------------") self.assertEqual( lines[17], "Draw1 | 0.0% | 0 0 20 20") self.assertEqual( lines[18], "Draw2 | 0.0% | 0 0 20 20") self.assertEqual( lines[19], "------------------------------------------------------------")