Eighth Programming Assignment: RoboSetter Genetic Algorithm


Description

My genetic algorithm attempts to evolve reasonable bouldering problems out of random sequences of holds. A bouldering problem is a short rock climbing route. This particular program assumes the bouldering wall being set on is about 15 feet high and 15 feet wide. The wall is thus represented as a 15x15 grid of bolt holes.

Some general principles used in the general boulder problem algorithm are that better routes use a reasonable number and variety of holds with a variety of orientations, start near the bottom of the wall and end near the top, have holds placed within a reasonable distance of each other (but not too close), and generally progress up the wall.

Some general principles used in the dyno boulder problem algorithm are that better dyno routes use fewer holds than a general route, tend towards slopers and jugs as holds (trying to avoid finger injuries sustained dynoing to crimps), place holds far apart, and generally progress up the wall.

While this program does evolve routes that get slightly better through generations, it's really just a very simple proof-of-concept sort of project. I do not include any logic for placing footholds, and the mechanics of generating random routes could be improved upon. Even the highly evolved routes can have undesirable traits. In addition, boulder problems are hard to create general rules for. There are plenty of great routes that break all the rules I created. In the future, I would probably change my focus to top rope routes. Roped routes really do have to progress upwards and not too far sideways. This is not a flexible rule. I think this would have better demonstrated the potential of a GA for climbing routes. There are a lot of aspects of my algorithm that I would rework should I continue developing it, but this very basic start was fun, and a good learning experience.


Some Helpful Visuals

This section includes visuals with respect to hold types, RoboSetter's best and worst demo routes, and some boulder problems. It is intended to provide some background for those unfamiliar with climbing styles and vocabulary, and hopefully contextualize RoboSetter's routes to help understand the evolution from worst to best.

Hold and Route Visualizations


Code

Genetic RoboSetter Code (Tasks 1-11)

Hold/Route Object Code (Tasks 1-11)


Demos

Task 1: Hold Demo

Task 2: Route Mutation Demo

Task 3: Route Crossover Demo

Task 4: Mutation & Crossover Demo Programs

Task 5: Fitness Metric Demo

Task 6: Individual Class Demo

Task 7: Population Class Demo

Task 8: Incorporating Mutation Demo

Task 9: Copy Demo

Task 10: Population Crossover Demo

Task 11a: The Genetic Algorithm Demo: General Boulder Route

Task 11b: The Genetic Algorithm Demo: Dyno Boulder Route