def test_p_median(self):
        """
        Test topology:

        A ---- B ---- C ----[HIGH DIST] --- D --- E --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        nx.add_path(t, "ABCDEF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("C", "D")])
        distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
        allocation, facilities, cost = algorithms.compute_p_median(
            distances, 2)
        self.assertDictEqual(
            {
                "A": "B",
                "B": "B",
                "C": "B",
                "D": "E",
                "E": "E",
                "F": "E",
            }, allocation)
        self.assertSetEqual(set("BE"), facilities)
        self.assertEqual(4, cost)
예제 #2
0
    def test_p_median_unsorted(self):
        """

        Test topology:

        A ---- C ---- B ----[HIGH DIST] --- E --- D --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        nx.add_path(t, "ACBEDF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("B", "E")])
        distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
        allocation, facilities, cost = algorithms.compute_p_median(
            distances, 2)
        assert {
            "A": "C",
            "B": "C",
            "C": "C",
            "D": "D",
            "E": "D",
            "F": "D",
        } == allocation
        assert set("CD") == facilities
        assert 4 == cost
예제 #3
0
 def test_p_median_3(self):
     # Test topology:
     #
     # A ---- C ---- B ----[HIGH DIST] --- E --- D --- F
     #
     # Expected facilities: 1, 4
     t = fnss.Topology()
     nx.add_path(t, "ACBEDF")
     fnss.set_weights_constant(t, 1)
     fnss.set_weights_constant(t, 2, [("B", "E")])
     distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
     allocation, facilities, cost = algorithms.compute_p_median(
         distances, 3)
     assert cost == 3
예제 #4
0
    def test_p_median_4(self):
        """
        Test topology:

        A ---- C ---- B ----[HIGH DIST] --- E --- D --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        nx.add_path(t, "ACBEDF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("B", "E")])
        distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
        allocation, facilities, cost = algorithms.compute_p_median(distances, 4)
        self.assertEqual(2, cost)
예제 #5
0
    def test_p_median_4(self):
        """
        Test topology:

        A ---- C ---- B ----[HIGH DIST] --- E --- D --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        t.add_path("ACBEDF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("B", "E")])
        distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
        allocation, facilities, cost = algorithms.compute_p_median(distances, 4)
        self.assertEqual(2, cost)
예제 #6
0
    def test_p_median(self):
        """
        Test topology:

        A ---- B ---- C ----[HIGH DIST] --- D --- E --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        nx.add_path(t, "ABCDEF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("C", "D")])
        distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
        allocation, facilities, cost = algorithms.compute_p_median(distances, 2)
        self.assertDictEqual({"A": "B", "B": "B", "C": "B", "D": "E", "E": "E", "F": "E", }, allocation)
        self.assertSetEqual(set("BE"), facilities)
        self.assertEqual(4, cost)
예제 #7
0
    def test_p_median_6(self):
        """
        Test topology:

        A ---- C ---- B ----[HIGH DIST] --- E --- D --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        nx.add_path(t, "ACBEDF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("B", "E")])
        distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
        allocation, facilities, cost = algorithms.compute_p_median(
            distances, 6)
        assert {i: i for i in "ABCDEF"} == allocation
        assert set("ABCDEF") == facilities
        assert 0 == cost
예제 #8
0
    def test_p_median_6(self):
        """
        Test topology:

        A ---- C ---- B ----[HIGH DIST] --- E --- D --- F

        Expected facilities: 1, 4
        """
        t = fnss.Topology()
        t.add_path("ACBEDF")
        fnss.set_weights_constant(t, 1)
        fnss.set_weights_constant(t, 2, [("B", "E")])
        distances = nx.all_pairs_dijkstra_path_length(t, weight='weight')
        allocation, facilities, cost = algorithms.compute_p_median(
            distances, 6)
        self.assertDictEqual({i: i for i in "ABCDEF"}, allocation)
        self.assertSetEqual(set("ABCDEF"), facilities)
        self.assertEqual(0, cost)
예제 #9
0
 def test_p_median(self):
     # Test topology:
     #
     # A ---- B ---- C ----[HIGH DIST] --- D --- E --- F
     #
     # Expected facilities: 1, 4
     t = fnss.Topology()
     nx.add_path(t, "ABCDEF")
     fnss.set_weights_constant(t, 1)
     fnss.set_weights_constant(t, 2, [("C", "D")])
     distances = dict(nx.all_pairs_dijkstra_path_length(t, weight='weight'))
     allocation, facilities, cost = algorithms.compute_p_median(
         distances, 2)
     assert allocation == {
         "A": "B",
         "B": "B",
         "C": "B",
         "D": "E",
         "E": "E",
         "F": "E",
     }
     assert facilities == set("BE")
     assert cost == 4