The Spring 2008 MATLAB® Programming Contest has come to an end. It was a contest with many fun surprises with a few notable first accomplishments. Read about them in the bios and quotes below.
Thanks to all the contest participants and spectators who have helped make the Wiring Contest such a great success. It was again great fun for everyone. See you again in the Fall.
Stefan Rach, know in the contest as srach, lives in Oldenburg, a city in northern Germany. He is a psychologist and works as a research associate at the department of Psychology at the University of Oldenburg, Germany. He is also a PhD-student at the Jacobs University Bremen. His research areas are psychophysics, multisensory integration and Fechnerian Scaling.
He originally learned MATLAB during his second undergrad year in 2001. Since 2004, he has continued to use MATLAB everyday for data analysis and stochastic modeling and for preparation of experimental visual and auditory stimuli.
He is already a member of the Hall of Fame, having won Best Result by 4 PM in the Peg Solitaire Contest. This is his first Grand Champion win. Marcus Buehren, our Grand Prize winner from last Fall's Gene Splicing contest, notes in the Newsreader thread that this is the second contest in a row where the Grand Prize is being sent to Germany.
Wiring was the fifth contest I participated, but it was the first time that I had not the time to participate during Darkness and Twilight.
During the contest I mainly concentrated on decreasing run time, but did not find significant improvements. When the 1000-nodes contest arrived, it happened to me that trading off some speed for accuracy might improve score, and indeed this was the case: an additional call to the main solver routine sundayX() with a flipped board resulted in an improvement about 4000 pts. in ‘results’, while worsening the time by about 20 ms (entry "....until you can call him a man."). Interestingly, this idea was in the code of leading entries before, but disappeared and did not show up again until the final contest.
For the final contest, I prepared lots of browser tabs and picked entries by random to apply this manipulation. I applied two variations of the same strategy: (1) one additional call to Sunday() on the original board, and (2) one additional call to Sunday() on the original board plus another call to Sunday() on a left-right-flipped board.
Then I waited the deadline to approach to submit all those entries. Unfortunately, my poker face broke too early and, thus, I started submitting too early. I was done with submitting already 11.56, leaving lots of time for others to pick up entries.
Although the second alternative resulted in bigger improvements in ‘results’, it was much to slow to reach top scores. However, Alan Chalker knew the right magic number to make it the entry with the best result.
The winning entry “tweaky bird and pushy cat 21” made use of the first alternative and two other little tweaks that might have reduced run time a little bit. I am pretty happy that this entry was based on a submission that would not have made it to the top on its own ("13th generation" by Yi Cao), and furthermore, improved its score significantly (about 100 pts). Nevertheless, without Yi’s contribution and those of all other contestants, it would have been nothing. Thanks to all of you!
Big thanks to the team at MATLAB Central for organizing another great contest and all the participants for an entertaining week.
-- Stefan Rach
Tim Vaughan, also known affectionately as the "The Cyclist" and occasionally as "STodd", has been a long-time fan of the MATLAB Central Contests.
He was the Grand Prize winner for the Blockbuster, Ants and Soduku contests. If you are an avid reader of the Contest Hall of Fame, you will remember that with Blockbuster, he was the first 3-time Grand Prize Winner. In the Wiring Contest, he achieves another first as the first winner (that we know of) who didn't use MATLAB! Read his contest quote below to find out how.
Sadly, I don't have access to MATLAB in my current job, so I could only "shuffle around some commas and semicolons," as overall winner Stefan said about me. I noticed a slight inefficiency in calling the "size" command from the "mygrade" subroutine, rather than passing it in from the main function. It was easy to make the tweak in lots of other entries as the 1000 Node Challenge was closing, and I was fortunate to win that one.
Even though this tweak was well advertised (in the newsgroup thread) by Markus, it never made it into the leading entries of the main contest. I slipped it (and other execution-time tweaks) into as many other entries as I could at the end, but ultimately only managed fourth place.
-- Tim Vaughan
David Jones is a professor in the department of Electrical and Computer Engineering at McMaster University. His main research is computational vision and neuroscience. David uses MATLAB in his research lab for running visual psychophysics and brain imaging experiments as well as analyzing synaptic protein expression in the human brain, computational modeling, and simulations.
Like Tim, and Stefan, David is also a repeat contest winner, having also won prizes in the Ants, Blockbuster, and Blackbox Contests. Capturing the first five prizes is another first for this contest. David's contest quote below gives us some insights in to his truly spectacular performance in the Wiring Contest.
I want to thank the MATLAB Contest Team for dreaming up another interesting challenge in the Wiring Contest.
This was the most rewarding Contest for me so far. When my original solution won the coveted "Prince of Darkness" prize,
the people in my research lab enjoyed that with smiles and giggles. The Wiring Contest was right up my alley, since I am in the
department of Electrical and Computer Engineering. During Darkness and Twilight, I started with something very simple,
and then built up my solution incrementally. At first I used a simple path to connect pins with the highest value, and then I considered more complex paths that went around obstacles. I used a kind of flood-fill algorithm to search for the shortest path from one pin to another,
and then I realized this would also work for connecting pins to existing wires to make "T-junctions". At first, I didn't know how I was going to handle "bridges", so I just displayed a map of locations where horizontal and vertical bridges were possible, and then I realized how to incorporate them into the flood-fill algorithm. After each improvement, I used the "wiringGUI" to visualize the results and do the same kind of analysis that Lucio did on the contest blog during Twilight.
For a few days of the contest, I was up until 3am before calling it quits. During the day, I was often able to check on the contest standings
using a wireless laptop. I also found it useful to be away from the contest sometimes, to think about algorithmic improvements, rather than tweaking the current leading entry.
Even though my code became visible to everyone during Daylight, I was more familiar with the details of the leading solution so initially I could make improvements faster. Luck played an important role, since I took the Early Bird prize just 3 minutes before the deadline; my Saturday Leap of 34.150 was followed closely by a leap of 32.857 by YC (Yi Cao); and I held on to the Sunday Push prize only because the entry by SY (Sergey Yergenson) arrived 1 second after the deadline.
After that, I lost my grip on this exciting contest as other competitors came up with their own interesting improvements that ended up winning the overall contest. Several competitors who have developed very good strategies for submitting a flood of improved entries moments before the deadline. Congratulations to Stefan Rach for an impressive win.
Thanks again to the Matlab Contest Team!
-- David Jones