Programming, problem solving, and algorithms

CPSC 203, 2025 W2

March 24, 2026

Announcements

Travelling Salesperson Problem (TSP)

Maps: Running Errands

You’ve got 9 errands to run. What order do you do them in?

Determine the least cost route through a set of given locations, returning to the start.

Travelling Salesperson Problem (TSP)

“Given a list of cities, and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?”

  • Classic problem on graphs

  • First known mention was in 1930

  • ________________________________________

Why is the problem so hard?

Suppose you have 6 locations. How many different candidate solutions are there? Generalize to k locations?

________________________

 

________________________

 

________________________

 

________________________

 

________________________

Demo Blog

https://medium.com/data-science/around-the-world-in-90-414-kilometers-ce84c03b8552

Why This Matters

There are lots of applications:

  • 📦 UPS/FedEx/Amazon Delivery Millions saved by reducing even 1km per driver per day.
  • 🍔 UberEats/DoorDash/Skip Multi-stop pickup/delivery with time windows.
  • 🧬 DNA Sequencing & Genome Assembly Ordering fragments relies on TSP-like reconstruction.
  • 🚌 School Bus Routing Minimize buses, fuel, and time while meeting constraints.
  • 🧪 Medical Lab Sample Pipelines Robotic arms schedule efficient multi-station workflows.
  • ❄️ Snowplow & Garbage Truck Routing Efficiently cover every street in a city.
  • 🏭 Factory Robots & CNC Machines Optimizing tool paths reduces waste, heat, and wear.
  • ✈️ Airline Crew Scheduling Complex daily routing: crews must return to base, meet rest rules.
  • 🌍 City Infrastructure Planning Utility inspections, meter reading, streetlight repair routes.
  • 🚑 Ambulance & Emergency Routing Minimize response times; life-critical optimization.

Plan for Code

Steps to assemble our solution:

 

  1. ________________________________________

  2. ________________________________________

  3. ________________________________________

  4. ________________________________________

  5. ________________________________________

2. Create pairwise distances

What structure should we use?

dist['Vancouver']['Bellingham'] -> int path['Vancouver']['Bellingham'] -> list

example: dist['Van']['Bel'] = nx.shortest_path(G, 'Van', 'Bel', weight='length')

3. Create all possible orders

tours = list(itertools.permutations(list(dferrands['node'])))

Tour Distance

We assemble each candidate solution as an arrangement of all of the errands:

Ex: A D B E F C

How do we find the total distance if we do the errands in the suggested order?

What Does lambda Do?

dferrands['latlong'] = dferrands.apply(
                lambda row: ox.geocode(row['errand']),
                axis=1
              )

Goal: Create a new column (latlong) and fill it with coordinates for each errand in the dataframe.

How it works:

  • df.apply(..., axis=1): Run a function once for each row.

  • lambda row: ox.geocode(row['errand']): A tiny inline function. Read it as: “Given a row, look up the place name in row['errand'],geocode it, and return the (lat, lon).”

  • The returned value becomes the entry in the new latlong column.

Why lambda? We only need this function once, so we write it right where it’s used.

Demo

PrairieLearn Activity