コード例 #1
0
    def test_get_circular_routes(self):
        """
        to test add circular routes
        :return:
        """
        g = graph.Graph.build_from_parameters(5, 1000, 0.5, 2)
        mode_manager = TransportModeManager()
        bus_obj = mode_manager.get_mode("bus")
        network = TransportNetwork(g)

        routes = network.get_circular_routes(bus_obj)

        self.assertEqual(len(routes), 2)
        self.assertEqual(routes[0].nodes_sequence_i, [2, 4, 6, 8, 10, 2])
        self.assertEqual(routes[0].stops_sequence_i, [2, 4, 6, 8, 10, 2])
        self.assertEqual(routes[0].nodes_sequence_r, [])
        self.assertEqual(routes[0].stops_sequence_r, [])

        self.assertEqual(routes[1].nodes_sequence_i, [])
        self.assertEqual(routes[1].stops_sequence_i, [])
        self.assertEqual(routes[1].nodes_sequence_r, [10, 8, 6, 4, 2, 10])
        self.assertEqual(routes[1].stops_sequence_r, [10, 8, 6, 4, 2, 10])

        with self.assertRaises(exceptions.ModeIsNotValidException):
            g = graph.Graph.build_from_parameters(5, 1000, 0.5, 2)
            network = TransportNetwork(g)
            network.get_circular_routes("bus_obj")

        with self.assertRaises(exceptions.CircularRouteIsNotValidException):
            g = graph.Graph.build_from_parameters(1, 1000, 0.5, 2)
            mode_manager = TransportModeManager()
            bus_obj = mode_manager.get_mode("bus")
            network = TransportNetwork(g)
            network.get_circular_routes(bus_obj)
コード例 #2
0
    def test_get_mode_network_distance(self):

        graph_obj = Graph.build_from_parameters(2, 10, 1, 2)
        network_obj = TransportNetwork(graph_obj)
        [bus_obj, metro_obj] = TransportMode.get_default_modes()

        CI_obj = InfrastructureCost()

        circular = network_obj.get_circular_routes(mode_obj=metro_obj)
        radial = network_obj.get_radial_routes(mode_obj=bus_obj)

        for route in circular:
            network_obj.add_route(route)

        for route in radial:
            network_obj.add_route(route)

        f = defaultdict(float)
        for route in network_obj.get_routes():
            f[route.id] = 28

        mode_distance = CI_obj.get_mode_network_distance(graph_obj,
                                                         network_obj,
                                                         f=f)

        self.assertEqual(mode_distance[bus_obj], 160)
        self.assertEqual(mode_distance[metro_obj], 20)
コード例 #3
0
ファイル: main.py プロジェクト: SIDERMIT/optimizer
# tc1_bus = network_obj.get_tangencial_routes(bus, 1, True)
# tc2_bus = network_obj.get_tangencial_routes(bus, 2, True)
# dc3_bus = network_obj.get_diametral_routes(bus, 3, True)
# dc4_bus = network_obj.get_diametral_routes(bus, 4, True)
# rc_bus = network_obj.get_radial_routes(bus, True)
# r_bus = network_obj.get_radial_routes(bus)
# f_bus = network_obj.get_feeder_routes(bus)
# t1_bus = network_obj.get_tangencial_routes(bus, 1)
# t2_bus = network_obj.get_tangencial_routes(bus, 2)
# d3_bus = network_obj.get_diametral_routes(bus, 3)
# d4_bus = network_obj.get_diametral_routes(bus, 4)
# c_bus = network_obj.get_circular_routes(bus)
#
# routes = dc4_metro + tc1_bus + tc2_bus + dc3_bus + dc4_bus + rc_bus + r_bus + f_bus + t1_bus + t2_bus + d3_bus + d4_bus + c_bus

c = network_obj.get_circular_routes(bus)
d2_bus = network_obj.get_diametral_routes(bus, 2)
d1_bus = network_obj.get_diametral_routes(bus, 1)
t1_bus = network_obj.get_tangencial_routes(bus, 1)
ds2_metro = network_obj.get_diametral_routes(metro, 2, True)
r_bus = network_obj.get_radial_routes(bus)

routes = r_bus + t1_bus + ds2_metro + d2_bus + d1_bus + c

for route in routes:
    network_obj.add_route(route)

# static method to run a optimization, return optimizer object
# max_number_of_iteration set in 5
opt_obj = Optimizer.network_optimization(graph_obj,
                                         demand_obj,
コード例 #4
0
ファイル: views.py プロジェクト: SIDERMIT/backend
    def create_default_routes(self, request):
        """ create defaults routes """
        default_routes = request.data.get('default_routes', [])
        scene_public_id = request.data.get('scene_public_id')

        scene_obj = Scene.objects.select_related('city').get(
            public_id=scene_public_id)

        graph_obj = scene_obj.city.get_sidermit_graph()
        network_obj = SidermitTransportNetwork(graph_obj)

        transport_mode_dict = dict()

        try:
            route_tuple = []
            all_routes = []
            for default_route in default_routes:
                transport_mode_public_id = default_route['transportMode']
                if transport_mode_public_id not in transport_mode_dict:
                    transport_mode_obj = TransportMode.objects.get(
                        public_id=transport_mode_public_id)
                    transport_mode_dict[
                        transport_mode_public_id] = transport_mode_obj.get_sidermit_transport_mode(
                        )

                if default_route['type'] == 'Feeder':
                    route_tuple.append((network_obj.get_feeder_routes(
                        transport_mode_dict[transport_mode_public_id]),
                                        transport_mode_public_id))
                elif default_route['type'] == 'Circular':
                    route_tuple.append((network_obj.get_circular_routes(
                        transport_mode_dict[transport_mode_public_id]),
                                        transport_mode_public_id))
                elif default_route['type'] == 'Radial':
                    route_tuple.append((network_obj.get_radial_routes(
                        transport_mode_dict[transport_mode_public_id],
                        short=default_route['extension'],
                        express=default_route['odExclusive']),
                                        transport_mode_public_id))
                elif default_route['type'] == 'Diametral':
                    route_tuple.append((network_obj.get_diametral_routes(
                        transport_mode_dict[transport_mode_public_id],
                        jump=default_route['zoneJumps'],
                        short=default_route['extension'],
                        express=default_route['odExclusive']),
                                        transport_mode_public_id))
                elif default_route['type'] == 'Tangential':
                    route_tuple.append((network_obj.get_tangencial_routes(
                        transport_mode_dict[transport_mode_public_id],
                        jump=default_route['zoneJumps'],
                        short=default_route['extension'],
                        express=default_route['odExclusive']),
                                        transport_mode_public_id))
                else:
                    raise ParseError('type "{0}" is not valid.'.format(
                        default_route['type']))

            for (routes, transport_mode_public_id) in route_tuple:
                for route in routes:
                    all_routes.append(
                        dict(name=route.id,
                             transport_mode_public_id=transport_mode_public_id,
                             nodes_sequence_i=','.join(
                                 str(x) for x in route.nodes_sequence_i),
                             nodes_sequence_r=','.join(
                                 str(x) for x in route.nodes_sequence_r),
                             stops_sequence_i=','.join(
                                 str(x) for x in route.stops_sequence_i),
                             stops_sequence_r=','.join(
                                 str(x) for x in route.stops_sequence_r),
                             type=3 if route._type.value == 3 else 1))
        except SIDERMITException as e:
            raise ParseError(e)
        except TransportMode.DoesNotExist:
            raise ParseError('Transport mode does not exist')

        return Response(all_routes, status.HTTP_200_OK)