875 lines of code and 55 hours. Evolutionary Computing was one of the most challenging courses I have taken at SCSU. These statistics come from our final project, which was a month-long research project. Our assignment was to build on previous projects and produce a 5-page paper suitable for publication at a conference.
I learned a lot while completing this project. My project studied spanning trees on complete graphs, and how to evolve them using a genetic algorithm. Maybe in a follow-up post I’ll introduce these concepts. For now, I want to show what I learned while writing those 875 lines of Python code.
- Write a testing function for non-trivial tests. I was checking something by hand, and thought my program wasn’t working. Then I ended up spending several hours debugging something that was not in fact a bug.
- Dropbox is an automated version control. Several times I used it to retrieve an old version of a file that I had not committed. This came in very handy.
- In vim, you can do
:edit!
to reload a file from disk. (documentation here) - Time estimating is important when running your jobs on other people’s machines.
- I learned how to profile code using cProfile. On Ubuntu, cProfile can be found in package
python-profiler
.
Git
In git, you can choose to commit only certain changes in a file. It can be done by using git gui
. The GUI basically shows you the output of git diff
for the changed files in your repo, and you can right click on a line in the diff and choose “Stage Line For Commit.”
I only used this a few times, but it is a lot better than doing the following:
$ cp dandelion.tex dandelion.tex.bak $ git checkout -- dandelion.tex $ #manually copy over the changes that you do want to commit $ git add dandelion.tex $ git commit -m "This is the hard way"
LaTeX
When writing tables in LaTeX, you must put the label in the caption in order for it to refer to a specific table number. If you don’t, your ref
will only refer to the number of the section. Here is a working code snippet:
The times can be seen in Table ref{wallclock}. begin{table} caption{Wall clock times in seconds for a single run of the genetic algorithm using the PyPy interpreter. label{wallclock} } begin{tabular}{l r} ... end{tabular} end{table}
Comments are closed.