I wrote a Python application that satisfies the requirements for assignment 1 of a course at Missouri Science and Technology. This is my second time through the class; the first time around, I completed all the programs
and none of the papers
. Writing the programs is interesting; discursively relating every tedious facet of the theory underlying those programs is not when the only other person to read the work is the grader. According to the university, the English curriculum is so defective that the computer science department must take up the slack. Today's students are functionally illiterate and such Sisyphean tasks do something to fill the student mind with something other than skittles, sex, and rum.
Fortunately, my excellent programs and total disregard for the university's priorities, in combination with my combative sarcasm and vociferous complaints have apparently been rewarded: the course curriculum has been revised to ameliorate the painful, futile demand that so many extraneous reports be composed only to be thrown away. Thus, I am back for a second dose, and it's already quite tasty.
The first assignment requires my program to identify the minimum number of nodes that must be removed from the following graph in order for every node less than 10 to be unreachable from any other node less than 10, except via the reflexive, implied edge. This graph represents the simplest of four supplied data sets, being just 5KiB of text, whereas the largest is 370KiB.
A detail from the graph:
The first assignment required only random search to solve this problem. Nonetheless, I implemented an evolutionary algorithm that performs significantly better. Amusingly, the thing isn't due for ages and can not even be submitted for two more calendar days.
Labels: coding, evolutionary algorithms, graphing, school