As residents of southern California, most of us face the realities of having to drive or ride from one place to
another on streets and freeways. Given that this is a heavily populated area, we also have to contend with
traffic. If we attempt to drive on a local freeway during rush hour, we often experience traffic jams and long
delays, requiring us to find alternative routes or simply put up with the traffic and wait.
Fortunately, technology offers at least some assistance. With ubiquitous wireless Internet connections feeding
data to powerful devices embedded into cars and available in a mobile form, we have easy access to
information that can help. Aside from providing the obvious ability to download traffic reports and maps on
demand, these devices can go a step further; given up-to-the-minute traffic information and a little computing
power, your device can actively aid you in finding the best way to get from one place to another, optimized not
only for distance, but also for the shortest driving time given the current traffic conditions. Further, if all cars
used such a system, as drivers were diverted around the scene of an accident, traffic conditions would change,
and the advice offered by drivers’ in-car or mobile devices would also change, optimally routing cars around a
traffic jam by sending different cars down different alternate paths. This way, even the alternatives might flow as
quickly as possible. (And, taking things a step further, Google has made a lot of recent progress on self-driving
cars, which can optimize the traffic problem even further.)
This is hardly science fiction; many of these features are already available on smartphones and in-car systems.
And while there are a lot of different kinds of technology you need in order to build a system like this, the core of
the problem is actually one that’s familiar to us in ICS 46. For this project, you will write a simplified version of
an important piece of such a system: given a map of streets and freeways, along with a snapshot of the current
traffic between points on the map, your program will be capable of finding the shortest distance or fastest route
to get from one location on the map to another.
Before you begin work on this project, there are a couple of chores you’ll need to complete on your ICS 46 VM
to get it set up to proceed.
Refreshing your ICS 46 VM environment
Even if you previously downloaded your ICS 46 VM, you may need to refresh its environment before
proceeding with this project. Log into your VM and issue the command ics46 version to see what version of
the ICS 46 environment you currently have stored on your VM. Note, in particular, the timestamp; if you see a
version with a timestamp older than the one listed below, you’ll want to refresh your environment by running the
command ics46 refresh to download the latest one before you proceed with this project.
If you’re unable to get outgoing network access to work on the ICS 46 VM — something that afflicts a handful of
students each quarter — then the ics46 refresh command won’t work, but an alternative approach is to
download the latest environment from the link below, then to upload the file on to your ICS 46 VM using SCP.
(See the Project #0 write-up for more details on using SCP.) Once the file is on your VM, you can run the
command ics46 refresh_local NAME_OF_ENVIRONMENT_FILE, replacing
NAME_OF_ENVIRONMENT_FILE with the name of the file you uploaded; note that you’d need to be in the
same directory where the file is when you run the command.
Creating your project directory on your ICS 46 VM
A project template has been created specifically for this project, containing a similar structure to the other
templates you’ve seen previously, including some code that is being provided as a starting point and that you
are required to work from. So you’ll absolutely need to use the project5 template for this project, as opposed to
the basic one or one from a previous project.
Decide on a name for your project directory, then issue the command ics46 start
YOUR_CHOSEN_PROJECT_NAME project5 to create your new project directory using the project5
template. (For example, if you wanted to call your project directory proj5, you would issue the command ics46
start proj5 project5 to create it.) Now you’re ready to proceed!