Beispiel #1
0
    def test_creation_of_particular_halfspaces(self):
        """Test that can create a given halfspace array representation"""
        A = np.array([[3, 3], [2, 5], [0, 6]])
        expected_halfspace = np.array(
            [
                [3.0, 3.0, -1.0],
                [2.0, 5.0, -1.0],
                [0.0, 6.0, -1.0],
                [-1.0, -0.0, 0.0],
                [-0.0, -1.0, 0.0],
            ]
        )
        halfspace = build_halfspaces(A)
        self.assertTrue(np.array_equal(halfspace, expected_halfspace))

        B = np.array([[3, 2], [2, 6], [3, 1]])
        expected_halfspace = np.array(
            [
                [3.0, 2.0, 3.0, -1.0],
                [2.0, 6.0, 1.0, -1.0],
                [-1.0, -0.0, -0.0, 0.0],
                [-0.0, -1.0, -0.0, 0.0],
                [-0.0, -0.0, -1.0, 0.0],
            ]
        )
        halfspace = build_halfspaces(B.transpose())
        self.assertTrue(np.array_equal(halfspace, expected_halfspace))
Beispiel #2
0
    def test_labelling_of_particular_vertices(self):
        A = np.array([[3, 3], [2, 5], [0, 6]])
        halfspaces = build_halfspaces(A)
        vertices = non_trivial_vertices(halfspaces)
        expected_labels = sorted(
            [set([0, 1]), set([0, 4]), set([1, 2]), set([2, 3])], key=list
        )
        labels_ = sorted((labels(v, halfspaces) for v, l in vertices), key=list)
        for label, expected_label in zip(labels_, expected_labels):
            self.assertTrue(
                np.array_equal(label, expected_label),
                msg="{} != {}".format(label, expected_label),
            )

        B = np.array([[3, 2], [2, 6], [3, 1]])
        halfspaces = build_halfspaces(B.transpose())
        vertices = non_trivial_vertices(halfspaces)
        expected_labels = sorted(
            [
                set([0, 2, 3]),
                set([0, 3, 4]),
                set([0, 1, 2]),
                set([1, 2, 4]),
                set([0, 1, 4]),
            ],
            key=list,
        )

        labels_ = sorted((labels(v, halfspaces) for v, l in vertices), key=list)
        for label, expected_label in zip(labels_, expected_labels):
            self.assertTrue(
                np.array_equal(label, expected_label),
                msg="{} != {}".format(label, expected_label),
            )
    def test_creation_of_particular_non_trivial_vertices(self):
        """Test that vertices are obtained"""
        A = np.array([[3, 3], [2, 5], [0, 6]])
        halfspaces = build_halfspaces(A)
        vertices_generator = non_trivial_vertices(halfspaces)
        self.assertIsInstance(vertices_generator, GeneratorType)

        expected_vertices = sorted(
            [
                np.array([1 / 3, 0]),
                np.array([0, 1 / 6]),
                np.array([2 / 9, 1 / 9]),
                np.array([1 / 12, 1 / 6]),
            ],
            key=lambda a: list(np.round(a, 5)),
        )

        vertices = sorted(
            (v for v, l in vertices_generator),
            key=lambda a: list(np.round(a, 5)),
        )

        for vertex, expected_vertex in zip(vertices, expected_vertices):
            self.assertTrue(all(np.isclose(vertex, expected_vertex)))

        B = np.array([[3, 2], [2, 6], [3, 1]])
        halfspaces = build_halfspaces(B.transpose())
        vertices_generator = non_trivial_vertices(halfspaces)
        self.assertIsInstance(vertices_generator, GeneratorType)

        expected_vertices = sorted(
            [
                np.array([0, 0, 1 / 3]),
                np.array([0, 1 / 8, 1 / 4]),
                np.array([0, 1 / 6, 0]),
                np.array([2 / 7, 1 / 14, 0]),
                np.array([1 / 3, 0, 0]),
            ],
            key=lambda a: list(np.round(a, 5)),
        )

        vertices = sorted(
            (v for v, l in vertices_generator),
            key=lambda a: list(np.round(a, 5)),
        )

        for vertex, expected_vertex in zip(vertices, expected_vertices):
            self.assertTrue(
                all(np.isclose(vertex, expected_vertex)),
                msg="{} != {}".format(vertex, expected_vertex),
            )
Beispiel #4
0
    def test_creation_of_particular_feasible_point(self):
        A = np.array([[3, 3], [2, 5], [0, 6]])
        halfspaces = build_halfspaces(A)
        feasible_point = find_feasible_point(halfspaces)
        self.assertTrue(
            all(np.isclose(feasible_point, np.array([0.08074176,
                                                     0.08074176]))))

        B = np.array([[3, 2], [2, 6], [3, 1]])
        halfspaces = build_halfspaces(B.transpose())
        feasible_point = find_feasible_point(halfspaces)
        self.assertTrue(
            all(
                np.isclose(feasible_point,
                           np.array([0.06492189, 0.06492189, 0.06492189]))))
 def test_creation_of_halfspaces(self, A):
     """Test that can create a bi matrix game"""
     halfspace = build_halfspaces(A)
     number_of_strategies, dimension = A.shape
     self.assertEqual(halfspace.shape,
                      (number_of_strategies + dimension, dimension + 1))
     self.assertTrue(
         np.array_equal(halfspace[number_of_strategies:, :-1],
                        -np.eye(dimension)))
 def test_creation_of_non_trivial_vertices(self, A):
     """Test that can create a bi matrix game"""
     halfspaces = build_halfspaces(A)
     vertices_generator = non_trivial_vertices(halfspaces)
     number_of_strategies, dimension = A.shape
     self.assertIsInstance(vertices_generator, GeneratorType)
     for vertex, labels_set in vertices_generator:
         self.assertEqual(len(vertex), dimension)
         for label in labels_set:
             self.assertGreaterEqual(label, 0)
             self.assertLessEqual(label, number_of_strategies + dimension)
 def test_creation_of_feasible_point(self, A):
     halfspaces = build_halfspaces(A)
     feasible_point = find_feasible_point(halfspaces)
     M, b = halfspaces[:, :-1], halfspaces[:, -1]
     self.assertTrue(all(np.dot(M, feasible_point) <= -b))