def test_PSOLB_random(self): """ Check if solution computed by PSOL + edge removal is included in the full solution computed by Zielonka's algorithm. """ print("test psolb random") not_solved_size = [] for i in range(5, self.number_of_random + 5): g = gen.random(i, i / 2, 1, i / 3) winning_region_0, winning_region_1 = zielonka.strong_parity_solver_no_strategies( g) resulting_arena, fatal_region_0, fatal_region_1 = fatal.psolB( g, [], []) self.assertTrue(elem in winning_region_0 for elem in fatal_region_0) self.assertTrue(elem in winning_region_1 for elem in fatal_region_1) # if the game is completely solved by PSOL if set(winning_region_0) == set(fatal_region_0) and set( winning_region_1) == set(fatal_region_1): self.fully_solved_random += 1 else: not_solved_size.append(i) print("Number of random games fully solved by PSOLB = " + str(self.fully_solved_random)) print("Size of games not solved = " + str(not_solved_size) + "\n")
def test_recursive_single_priority_random(self): """ Check if solution computed by the recursive algorithm is correct. We create random parity games and transform them into generalized parity games by using a copy of the first priority function as a second priority function. """ print("test recursive single priority random") for i in range(5, self.number_of_random + 5): g = gen.random(i, i / 2, 1, i / 3) winning_region_0, winning_region_1 = zielonka.strong_parity_solver_no_strategies( g) computed_winning_0, computed_winning_1 = recursive.generalized_parity_solver( g) self.assertTrue(set(winning_region_0) == set(computed_winning_0)) self.assertTrue(set(winning_region_1) == set(computed_winning_1))
def random_games(i): # for some reason this does not work for indices < 5 j = i + 5 return generators.random(j, j, 1, j / 3)