# Network Analyst (NA) - VRS - selecting most effective school buses for routing

1085
7
01-17-2013 04:21 AM
Occasional Contributor
Hi everyone,
I am currently working with Network Analyst (NA) to solve a school bus routing problem. I have the following scenario. I have one depot where all school buses are located. Drivers must be driving from that source point to various locations to pick up the students at their home in the most cost effective and logical way (it is a door-to-door service). Once the driver picks up all the students, they need to deliver them to their respective schools. I will like to solver to take into consideration the fleet capacity, the gas and maintenance of the fleet vehicles, as well as the driver???s salary. I also have a student with a wheelchair specialty.
The flee configuration is as follows:
??? 100 school buses
o      25 buses - 24 passengers
o 30 buses - 18 passengers
o 40 buses - 12 + 2 (2 wheelchairs) passengers
o 5 buses - 9 + 1 (1 wheelchair) passengers
I have noticed that when I add the fleet properties into the solver, the solver prepare the routes according the same sequence and order they are added into that table.
Is there a way to force the solver to select the most cost-effective vehicles from the fleet according to our needs taking into consideration the time windows, gasoline, fleet capacity, and salary?
Tags (2)
7 Replies
Esri Contributor
Hello Ernesto,

Yes, there is a way to get the VRP solver to do what you want.
To take capacity into account, use the PickupQuantities field in your Orders (representing students or bus stops) and the Capacities field in your Routes (representing the buses/driver/path). For both of these fields, you should have two values in one cell: one for passengers without wheelchairs and one for passengers with wheelchairs. The values need to be separated by a space. For example, if the bus has 9 seats and 1 spots for a wheelchair, the values would be entered in one cell as:
9 1
If an order represents a person who rides a wheelchair, the value would be ented as:
0 1
The Capacity Count property on the Analysis Settings tab of the Layer Properties dialog should have a value of 2. This tells the solver you want to model two capacities, which in your case represents passengers without wheelchairs and passengers with wheelchairs.

To model driver salaries, use the CostPerUnitTime field in the Routes layer. You'll need to convert their wages into the units that you set for the Time Field Units property on the Analysis Settings tab of the Layer Properties dialog. If you have hours set, you can specify a value that represents wages in \$/hour, if you have the property set to 'Minutes', you would need to set the CostPerUnitTime field values in \$/Minute.

To model gas and maintenance costs, use the CostPerUnitDistance field in the Routes layer. It functions in the same way CostPerUnitTime works. The costs are set per unit distance. You specify the distance units for the analysis in the Distance Field Units property of the Layer Properties dialog.

I hope this is helpful. Let me know if I can clarify anything.

Robert
Occasional Contributor
Definitely you did answered most of my questions but still I need one more thing to get clarified. As I mentioned, I have a fleet with particular properties. When I have used the solver, the solver returns an output where only 24 passenger vehicles are used and one 13 passenger since this is the one with specialty accommodations. This represents a problem since most of those 24 passenger vehicles are empty. The solver is only accommodating 13 or so inside these vehicles. How can I tell the solver to pick an 18 passenger vehicle instead of the 24 passenger on those cases?
Esri Contributor
You'll want to make sure that the larger vehicles are 'penalized' more than the smaller vehicles. The way you do that is by making them more expensive to run, as should be the case in the real world.

In your Routes attribute table, what are the cost field values? Specifically, look at the FixedCost, CostPerUnitTime, and CostPerUnitDistance fields (and, optionally, CostPerUnitOvertime). The one field you'll want to focus on the most is CostPerUnitDistance, since that tends to vary the most across vehicles sizes--larger vehicles tend to consume more fuel per mile than smaller vehicles. So make sure the CostPerUnitDistance is higher for the larger vehicles.

You could also add FixedCosts and penalize the usage of vehicles. This would help you fill more buses to capacity since the solver would find it more expensive to send out lots of buses than sending out fewer buses and driving for longer times.

Robert
Occasional Contributor
Hello,

I had to modify a little bit the scenario described above. Currently, I am working a scenario in order to optimize a school bus route. The fleet service consists of picking each student, one by one, at their particular home. Once the driver pick up the last student from his route, he needs to deliver them to their respective school. Obviously this needs to happen in the most cost efficient way. Each driver is assigned a school bus according to the number of students he needs to pick up. All drivers will be departing from their respective houses and returning there at the end of the working day. Like any scenario of this type, there are time windows that need to be honored and students with special requirements, e.g. wheelchair, which needs to be attended.

My questions are: how should I establish my fleet? That is, how can I assure that the VRP solver choose the most appropriate school bus and assign it to a driver according to the scenario been studied? I have to confess that I am not completely clear how to manage this condition. Since all drivers will be departing from their respective house, these houses will be representing the depots. How can I make sure that only one school bus will be departing from each house (depot)? How can I assure the solver chooses the most appropriate according to the scenario presented?

Any help will be appreciated.
Esri Contributor
Hello. The are two main things I think you need to consider: order pairs and assigning routes to depots.

To make sure students are delivered to the appropriate school, use order pairs. So for each student, you will have two stops: one at their home and one at their school. Then you link the two together with order pairs. This means you will have a figurative "stack" of stops at the schools--one for each student.

(As an aside, school districts often have requirements that limit how long a student can stay on a bus. The reason is that they don't want the student to spend hours of unproductive time on the bus each day, so they may have a limit of say 30 minutes each way. You can set the MaxTransitTime of OrderPairs to try to find a solution that complies with the time limit.)

To make sure the routes start and end at the right place--the driver's home--create depots at each driver's house. When you create your routes, assign the Routes' StartDepotName field to the appropriate depot--the one at the driver's home. Do the same for the EndDepotName. You want to make sure the route, which represents a bus, matches the type of bus the driver actually drives. That is, if the driver drives a short bus with a capacity that's less than other buses, make sure the correct depot/home is related to that bus. The same is true for any specialties, like a wheelchair lift or air brakes vs. hydraulic brakes.

Hope that helps. Let me know if I can answer any other questions.

Robert
Occasional Contributor
Hello. The are two main things I think you need to consider: order pairs and assigning routes to depots.

To make sure students are delivered to the appropriate school, use order pairs. So for each student, you will have two stops: one at their home and one at their school. Then you link the two together with order pairs. This means you will have a figurative "stack" of stops at the schools--one for each student.

(As an aside, school districts often have requirements that limit how long a student can stay on a bus. The reason is that they don't want the student to spend hours of unproductive time on the bus each day, so they may have a limit of say 30 minutes each way. You can set the MaxTransitTime of OrderPairs to try to find a solution that complies with the time limit.)

To make sure the routes start and end at the right place--the driver's home--create depots at each driver's house. When you create your routes, assign the Routes' StartDepotName field to the appropriate depot--the one at the driver's home. Do the same for the EndDepotName. You want to make sure the route, which represents a bus, matches the type of bus the driver actually drives. That is, if the driver drives a short bus with a capacity that's less than other buses, make sure the correct depot/home is related to that bus. The same is true for any specialties, like a wheelchair lift or air brakes vs. hydraulic brakes.

Hope that helps. Let me know if I can answer any other questions.

Robert

Thanks for the information! I understand the order pairs, what I am not sure how to handle in the following. Part of this analysis is helping me determine which bus to assign to each driver according to the route they need to perform. I thought NA will aid me on that task. I thought about assigning each depot three school buses with different capacities and let the NA select the one needed. Will that be possible? If possible, how can I make sure NA selects one school bus (the best one) per depot?
Esri Contributor
Oh, I see. There is a way to answer that question under a certain scenario: you are creating routes for only one school only and the cost of getting the bus back to the house after dropping students off isn't a factor. Otherwise, the solver can't optimally answer that question.

Assuming your problem fits the criteria, you can get the result by doing the following:

• Create a depot at the one school.

• Create the various routes you need along with their capacities, specialties, and so on.

• Assign the routes' EndDepotName field value to the name of the depot at the school.

• Leave the StartDepotName field value as null. This makes the start depot a 'virtual depot', meaning the route starts from an order rather than an actual depot. There can only be one virtual depot per route, so that's why the EndDepotName is specified.

• Solve to get your routes. Note that driving back to the house of the driver isn't considered in the solution.

• After you get the solution, you can assign the drivers to their nearest virtual depot (i.e. first order) of a route. The nearest route would tell them which kind of a bus the driver should park at their house.

Unfortunately, there isn't a way to assign drivers to vehicles when multiple schools are involved, that is, optimally.

There is another option for you if you have multiple schools: you could use a greedy, less-than-optimal approach of iteratively solving for each driver's house. You would do this by adding all your vehicles as routes, setting their start/end depots to one house/depot, solve, lock in the route/vehicle that was chosen, solve for the next house, lock in the vehicle, and so on until all students are picked up.

Robert