Ejemplo n.º 1
0
 def testBothDirections(self):
     # Find shortest path of simple test digraph
     alg_obj = BiDirectional(self.G, self.max_res, self.min_res)
     with self.assertLogs('cspy.algorithms.bidirectional') as cm:
         alg_obj.name_algorithm(U=self.max_res[0], L=self.min_res[0])
     self.assertRegex(cm.output[0], 'dynamic')
     path = alg_obj.run()
     self.assertEqual(path, ['Source', 'A', 'B', 'C', 'Sink'])
Ejemplo n.º 2
0
 def test_bidirectional(self):
     alg = BiDirectional(self.G, self.max_res, self.min_res, elementary=True)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertTrue(alg.consumed_resources == self.consumed_resources)
     self.assertTrue(
         all(e in self.G.edges() for e in zip(alg.path, alg.path[1:])))
Ejemplo n.º 3
0
 def testBackward(self):
     # Find shortest path of simple test digraph
     alg_obj = BiDirectional(self.G,
                             self.max_res, [-1, 0],
                             direction='backward')
     with self.assertLogs('cspy.algorithms.bidirectional') as cm:
         alg_obj.name_algorithm()
     self.assertRegex(cm.output[0], 'backward')
     path = alg_obj.run()
     self.assertEqual(path, ['Source', 'A', 'B', 'C', 'Sink'])
Ejemplo n.º 4
0
 def test_bidirectional_random(self, _, seed):
     alg = BiDirectional(self.G,
                         self.max_res,
                         self.min_res,
                         seed=seed,
                         elementary=True)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertTrue(all(alg.consumed_resources == self.consumed_resources))
Ejemplo n.º 5
0
 def test_bidirectional(self):
     """
     Test BiDirectional with randomly chosen sequence of directions
     for a range of seeds.
     """
     alg = BiDirectional(self.G,
                         self.max_res,
                         self.min_res,
                         elementary=False)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertEqual(alg.consumed_resources, self.consumed_resources)
Ejemplo n.º 6
0
 def test_bidirectional_backward(self):
     """
     Find shortest path of simple test digraph using BiDirectional
     algorithm with only backward direction.
     """
     alg = BiDirectional(self.G,
                         self.max_res,
                         self.min_res,
                         direction='backward',
                         elementary=True)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertTrue(all(alg.consumed_resources == self.consumed_resources))
Ejemplo n.º 7
0
 def test_bidirectional_random(self, _, seed):
     """Test BiDirectional with randomly chosen sequence of directions
     for a range of seeds.
     """
     alg = BiDirectional(self.G,
                         self.max_res,
                         self.min_res,
                         REF_forward=self.custom_REF_forward,
                         REF_backward=self.custom_REF_backward,
                         seed=seed)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertTrue(all(alg.consumed_resources == self.consumed_resources))
Ejemplo n.º 8
0
 def test_bidirectional(self):
     """
     Test BiDirectional with randomly chosen sequence of directions
     for a range of seeds.
     """
     alg = BiDirectional(self.G,
                         self.max_res,
                         self.min_res,
                         elementary=True)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertEqual(alg.consumed_resources, self.consumed_resources)
     self.assertTrue(
         all(e in self.G.edges() for e in zip(alg.path, alg.path[1:])))
Ejemplo n.º 9
0
 def testBiDirectional(self, _, seed):
     """
     Find shortest path of simple test digraph using BiDirectional
     """
     bidirec = BiDirectional(self.G, self.max_res, self.min_res, seed=seed)
     bidirec.run()
     path = bidirec.path
     cost = bidirec.total_cost
     total_res = bidirec.consumed_resources
     # Check path
     self.assertEqual(path, ['Source', 2, 1, 'Sink'])
     # Check attributes
     self.assertEqual(cost, -10)
     self.assertTrue(all(total_res == [3, 2]))
     self.assertTrue(all(e in self.G.edges() for e in zip(path, path[1:])))
Ejemplo n.º 10
0
 def testBiDirectionalBothDynamic(self):
     """
     Find shortest path of simple test digraph using the BiDirectional
     algorithm for a range of seeds.
     Note the first argument is required to work using parameterized and unittest.
     """
     bidirec = BiDirectional(self.G, self.max_res, self.min_res)
     # Run and test results
     bidirec.run()
     path = bidirec.path
     cost = bidirec.total_cost
     total_res = bidirec.consumed_resources
     self.assertEqual(path, ['Source', "A", 'Sink'])
     self.assertEqual(cost, 0)
     self.assertTrue(all(total_res == [2, 12]))
Ejemplo n.º 11
0
 def test_bidirectional_generated(self):
     """
     Test BiDirectional with the search direction chosen by the number of
     direction with lowest number of generated labels.
     """
     alg = BiDirectional(self.G,
                         self.max_res,
                         self.min_res,
                         method="generated",
                         elementary=True)
     alg.run()
     self.assertEqual(alg.path, self.result_path)
     self.assertEqual(alg.total_cost, self.total_cost)
     self.assertTrue(all(alg.consumed_resources == self.consumed_resources))
     self.assertTrue(
         all(e in self.G.edges() for e in zip(alg.path, alg.path[1:])))
Ejemplo n.º 12
0
 def testPreprocessing(self):
     # Check if negative resource costs work and whether
     # unreachable nodes are eliminated
     path = BiDirectional(self.H, [5, 20], [0, 0], preprocess=True).run()
     # check if the unreachable node has been eliminated
     self.assertTrue('B' not in self.H.nodes())
     self.assertEqual(path, ['Source', 'A', 'C', 'D', 'Sink'])
Ejemplo n.º 13
0
 def testBiDirectionalBothDynamic(self, _, seed):
     """
     Find shortest path of simple test digraph using the BiDirectional
     algorithm for a range of seeds.
     Note the first argument is required to work using parameterized and unittest.
     """
     bidirec = BiDirectional(self.G,
                             self.max_res,
                             self.min_res,
                             REF_forward=self.custom_REF_forward,
                             REF_backward=self.custom_REF_backward,
                             seed=seed)
     # Check classification
     with self.assertLogs('cspy.algorithms.bidirectional') as cm:
         bidirec.name_algorithm()
     # Log should contain the word 'dynamic'
     self.assertRegex(cm.output[0], 'dynamic')
     # Check exception for not running first
     with self.assertRaises(Exception) as context:
         bidirec.path
     self.assertTrue("run()" in str(context.exception))
     # Run and test results
     bidirec.run()
     path = bidirec.path
     cost = bidirec.total_cost
     total_res = bidirec.consumed_resources
     self.assertEqual(path, ['Source', 1, 2, 3, 4, 'Sink'])
     self.assertEqual(cost, -23)
     self.assertTrue(all(total_res == [5, 30, 1]))
Ejemplo n.º 14
0
    def testBiDirectionalBackward(self):
        """
        Find shortest path of simple test digraph using the BiDirectional
        algorithm with only backward direction.
        """
        bidirec = BiDirectional(self.G,
                                self.max_res,
                                self.min_res,
                                direction='backward')
        # Check classification
        with self.assertLogs('cspy.algorithms.bidirectional') as cm:
            bidirec.name_algorithm()
        # Log should contain the word 'backward'
        self.assertRegex(cm.output[0], 'backward')

        bidirec.run()
        path = bidirec.path
        cost = bidirec.total_cost
        total_res = bidirec.consumed_resources
        # Check path and other attributes
        self.assertEqual(path, ['Source', 2, 5, 'Sink'])
        self.assertEqual(cost, 1)
        self.assertTrue(all(total_res == [3, 3]))
        self.assertTrue(all(e in self.G.edges() for e in zip(path, path[1:])))
        self.assertEqual(self.max_res, [len(self.G.edges()), 6])
        self.assertEqual(self.min_res, [0, 0])
Ejemplo n.º 15
0
Archivo: sub.py Proyecto: torressa/cspy
 def _solve_cspy(self):
     # Solve subproblem with exact algorithm
     log.info(" Solving subproblem for aircraft {}".format(self.k))
     G = deepcopy(self.G_pre)
     n_edges = len(G.edges())
     crew_ub = AIRLINES_DATA[self.airline]['crew_budget']
     max_res = [
         n_edges, 0.0, self.max_FH, crew_ub, MAX_CREWD1, MAX_CREWD2, 0.0, 1.0
     ]
     min_res = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
     bidirec = BiDirectional(G,
                             max_res,
                             min_res,
                             direction='both',
                             preprocess=True,
                             REF=self.REF)
     bidirec.run()
     path = bidirec.path
     self.shortest_path = [(edge[2]['data'], edge[2]['weight'])
                           for edge in G.edges(data=True)
                           if edge[0:2] in zip(path, path[1:])]
     return self.shortest_path
Ejemplo n.º 16
0
    def testBiDirectionalBothDynamic(self, _, seed):
        """
        Find shortest path of simple test digraph using BiDirectional.
        """
        bidirec = BiDirectional(self.G, self.max_res, self.min_res, seed=seed)
        # Check classification
        with self.assertLogs('cspy.algorithms.bidirectional') as cm:
            bidirec.name_algorithm()
        # Log should contain the word 'dynamic'
        self.assertRegex(cm.output[0], 'dynamic')

        bidirec.run()
        path = bidirec.path
        cost = bidirec.total_cost
        total_res = bidirec.consumed_resources
        # Check path and other attributes
        self.assertEqual(path, ['Source', 2, 1, 'Sink'])
        self.assertEqual(cost, -10)
        self.assertTrue(all(total_res == [3, 2]))
Ejemplo n.º 17
0
 def testBiDirectionalForward(self):
     """
     Find shortest path of simple test digraph using the BiDirectional
     algorithm with only forward direction.
     """
     bidirec = BiDirectional(self.G,
                             self.max_res,
                             self.min_res,
                             direction='forward')
     # Check classification
     with self.assertLogs('cspy.algorithms.bidirectional') as cm:
         bidirec.name_algorithm()
     # Log should contain the word 'forward'
     self.assertRegex(cm.output[0], 'forward')
     bidirec.run()
     path = bidirec.path
     cost = bidirec.total_cost
     total_res = bidirec.consumed_resources
     self.assertEqual(path, ['Source', 'A', 'B', 'C', 'Sink'])
     self.assertEqual(cost, -13)
     self.assertTrue(all(total_res == [4, 15.3]))
Ejemplo n.º 18
0
 def testBiDirectionalBothDynamic(self):
     """
     Find shortest path of simple test digraph using the BiDirectional
     algorithm with dynamic halfway point.
     """
     bidirec = BiDirectional(self.G, self.max_res, self.min_res)
     # Check classification
     with self.assertLogs('cspy.algorithms.bidirectional') as cm:
         bidirec.name_algorithm()
     # Log should contain the word 'dynamic'
     self.assertRegex(cm.output[0], 'dynamic')
     # Check exception for not running first
     with self.assertRaises(Exception) as context:
         bidirec.path
     self.assertTrue("run()" in str(context.exception))
     # Run and test results
     bidirec.run()
     path = bidirec.path
     cost = bidirec.total_cost
     total_res = bidirec.consumed_resources
     self.assertEqual(path, ['Source', 'A', 'B', 'C', 'Sink'])
     self.assertEqual(cost, -13)
     self.assertTrue(all(total_res == [4, 15.3]))
Ejemplo n.º 19
0
    def testBiDirectionalBothDynamic(self, _, seed):
        """
        Find shortest path of simple test digraph using the BiDirectional
        algorithm for a range of seeds.
        Note the first argument is required to work using parameterized and unittest.
        """
        bidirec = BiDirectional(self.G, self.max_res, self.min_res, seed=seed)
        # Check classification
        with self.assertLogs('cspy.algorithms.bidirectional') as cm:
            bidirec.name_algorithm()
        # Log should contain the word 'dynamic'
        self.assertRegex(cm.output[0], 'dynamic')

        bidirec.run()
        path = bidirec.path
        cost = bidirec.total_cost
        total_res = bidirec.consumed_resources
        # Check path and other attributes
        self.assertEqual(path, ['Source', 2, 5, 'Sink'])
        self.assertEqual(cost, 1)
        self.assertTrue(all(total_res == [3, 3]))
        self.assertTrue(all(e in self.G.edges() for e in zip(path, path[1:])))
        self.assertEqual(self.max_res, [len(self.G.edges()), 6])
        self.assertEqual(self.min_res, [0, 0])
Ejemplo n.º 20
0
 def test_bidirectional(self):
     alg = BiDirectional(self.G, self.max_res, self.min_res)
     alg.run()
     self.assertEqual(alg.path, ['Source', "A", 'Sink'])
     self.assertEqual(alg.total_cost, 0)
     self.assertTrue(alg.consumed_resources == [2, 12])