I can not go into a lot of detail on my app, (Signed an NDA), but I have spent over a year in optimizing transporting handicapped kids to school. What makes this "interesting" is that I can start with any home, but have to end up at the school. Determining which location to start at is "fun". Also there are both time and capacity limitations which might require more than 1 vehicle. The "Traveling Salesperson" is easy to solve if there are very few stops. (3-5). but it gets exponentially harder (longer) as you add more nodes.
Determining the "outliers" (Stops with no nearby neighbors) can help optimizing the logic and knowing what angle the vehicle is traveling vs. the angle to the final destination (the school) can also be used to optimize.
What we do is unique, by computing the optimal routing EACH day, since on different days different students are attending school. A lot of the logic is in SQL Server stored procedures. An average day, with 300 students going to 90 different schools, takes about 1 minute to compute the routing. (Of course, the routing is only 1/2 of the problem. Now comes reusability. After dropping off the kids at the first school, can the same driver / van pick up kids for a different school.
Good luck, this will keep your brain working for a while. I found that I had to use a "peel the onion" approach. Start with simple rules, get that working then add additional logic.
Bruce