Esempio n. 1
0
 def test_lp_smti(self):
     sizes = [5, 6, 7, 8, 9, 10, 11, 12]
     for size in sizes:
         matching = create_smp_instance(size)
         solver = LP_smti(matching)
         solver.pre_process()
         solution = solver.solve(verbose=False)
         self.assertTrue(solution.is_stable()[0])
         self.assertEqual(solution.is_stable()[1], solution.size)
Esempio n. 2
0
 def test_smp_qubo_np_bqm(self):
     sizes = [5]
     for size in sizes:
         matching = create_smp_instance(size)
         solver = QbsolvSMP(matching, mode="np")
         solver.create_qubo()
         solver_1 = QbsolvSMP(matching, mode="bqm")
         solver_1.create_qubo()
         self.assertTrue(np.array_equal(solver.qubo, solver_1.qubo.to_numpy_matrix()))
Esempio n. 3
0
    def test_smp_gs(self):
        sizes = [5, 6, 7, 8, 9, 10]
        for size in sizes:
            matching = create_smp_instance(size)

            solution_m = StandardSMP(matching).solve()
            solution_w = StandardSMP(matching, mode="w_opt").solve()
            self.assertTrue(solution_m.is_stable()[0])
            self.assertTrue(solution_w.is_stable()[0])
            self.assertEqual(solution_m.is_stable()[1], solution_m.size)
            self.assertEqual(solution_w.is_stable()[1], solution_w.size)
Esempio n. 4
0
    def test_smp_qubo_target(self):
        sizes = [10, 15, 20]
        for size in sizes:
            matching = create_smp_instance(size)
            solver = QbsolvSMP(matching)
            solver.create_qubo()
            n = solver.matching.size
            solution = solver.solve(verbose=False, target=-1.5 * n * (n - 1))

            print(size, solution.is_stable())
            self.assertTrue(solution.is_stable(mode="smp")[0])
            self.assertEqual(solution.is_stable()[1], solution.size)
Esempio n. 5
0
    def test_smp_qubo(self):
        sizes = [3, 4, 5, 6]
        for size in sizes:
            matching = create_smp_instance(size)
            solver = QbsolvSMP(matching)
            solver.create_qubo()
            n = solver.matching.size
            solution = solver.solve(verbose=False, num_repeats=300)

            print(size, solution.is_stable())
            self.assertTrue(solution.is_stable(mode="smp")[0])
            self.assertEqual(solution.is_stable()[1], solution.size)
Esempio n. 6
0
    def test_generate_all_solutions_smp(self):
        for size in range(5):
            matching = create_smp_instance(size)
            all_possibilites = ut.get_all_matches(matching.males,
                                                  matching.females,
                                                  matching.size,
                                                  mode="SMP")
            all_possibilites = list(all_possibilites)
            self.assertEqual(math.factorial(size), len(all_possibilites))
            matching.compute_all_solutions(mode="SMP")
            for match in matching.solutions:
                (stable, s_size) = Solution(matching, match).is_stable()
                self.assertTrue(stable, "solution was not stable")
                self.assertTrue(s_size == size, "solution differed in size")
                self.assertTrue(size != -1,
                                "solution had somebody matched twice")

        matching = mock_matching_smp()
        matching.compute_all_solutions()
        self.assertEqual(2, len(matching.solutions))