Inspired by the Optimal U.S. National Parks Centennial Road Trip work of Dr. Randal Olson, I sought out to expand on his work to include more of the National Park Service Units to line up with our trips and with Mikah Meyer's world record national parks trip. People commonly misunderstand that the National Park Service encompasses the 59 sites designated with the National Parks label, but the System actually includes six times that number when National Historic Sites, Battlefields, Monuments and others are counted.
Of course, adding another 300+ points to the Traveling Salesman Problem makes the task considerably more complicated. For one, not all of the sites are accessible by car, at least not in the way that we are traveling. Mikah was gracious enough to begin with my units database and move some points around so that even the island parks are placed at a point where they are accessible by car. This is usually a visitor center or a ferry entry point if the actual park is in water. Units that are outside the lower 48 were excluded to keep the problem manageable, and because they will likely be visited by plane or boat. Another tweak made to the alphabetical list was to place the Washington Monument at position 0 so the trek would begin there.
Finally, I wrote a web interface (this HTML page) to display the points and provide an opportunity to jump to a park unit. There is an option to view all of the route legs, but it does bog down a browser and has a lot of overhead once loaded.
There is an obvious caveat to solving the problem in this way, by using an as-the-crow-flies algorithm to solve the Traveling Salesman Problem and a road mapping tool to do the plotting. You may find a possible inefficiency in the solution with a backtrack or crisscross that doesn't make sense, but this is a concession that needed to be made to keep this problem doable for a hack like me. Ideally, we would run Randy's genetic algorithm over all 375 of the identified park unit locations. I tried it once, and it ran for 14 hours before failing. The goal here was to extend the idea to apply to all the units in the lower 48, and I think we are pretty close. Randy's map is likely more accurate, but we included far more parks in this project.
Enjoy! Be sure to check out the GitHub repo for all of the code. Many thanks to Mikah for helping formulate this idea, Randal Olson for some of the technical writeups that I read, and of course to the team who built that NEOS server and tool.