The MATLAB Blockbuster Contest has come to an end. We hope you enjoyed it as much as we did. Thanks to all the participants and spectators who have helped make the contest a success, and congratulations to all our winners!
Francois Glineur, we don't have your e-mail address and haven't heard back from you. Please drop us an e-mail if you read this so we can send you your prize and add a short winner's blurb.
Tim is a third time Grand Prize winner having also won this title in the Sudoku and Ants Contest. Congratulations Tim, this is the first time the MATLAB Contest has seen a third-time Grand Prize winner! Will he win the next Grand Prize as well? You will have to wait until next time to find out.
Tim is from the U.S. and lives near The MathWorks headquarters in Massachusetts. Read more about Tim from the Sudoku and Ants Winners Page. He is pictured here with his wife, Mrs. Cyclist. Read on to hear about his contest experience.
Although I had a few small improvements throughout the contest, the clincher was replacing "nthroot" with my function "a37". I did this substitution in the leaders as the deadline approached, and also in several entries in the queue. I was quite lucky to have selected Hannes and Cobus' obfuscated "sirroN kcuhC 4" as one of those entries.
The very first time that nthroot(x,n) appeared in a leading entry, I submitted the obvious tweak x.^(1/n), as did several others. I was perplexed that it gave different (and worse) results. Yi Cao mentioned this phenomenon in the newsgroup thread.
I dug into the nthroot source code, and saw that in addition to taking the root, it also does one iteration of Newton's method. I figured that a stripped-down version of nthroot would be a good tweak to save for later in the contest.
My first try at tweaking "sirroN kcuhC 4", which was called "typ", actually failed. My stripped-down version was a bit too naked, because it returned NaN's where x==0. That caused problems elsewhere in the code. "typ2" had the version of a37 that was purely x.^(1/n), which was winning because I got:
- (1) the speedup of Hannes and Cobus' algorithmic improvement
- (2) the weird benefit of obfuscation (which I have yet to understand)
- (3) the speedup of x.^(1/n) over nthroot, due to removal of error-checking and other niceties, and
- (4) the blindingly lucky difference in results between those two functions
A final note: My contest entries tend to have names arising from my stream-of-consciousness. "typ" stands for "Thank you, Peter", which is the one line that Chuck Norris has in his cameo appearance in the film "Dodgeball: A True Underdog Story".
Hannes and Cobus are veteran contestants. The dynamic duo have also won a prize in the Ants Contest. Both of them are from Pretoria, South Africa and work as electronic engineers at Denel Aerospace Systems.
Hannes and Cobus have written the Blockbuster Contest Final Analysis explaining their code, on which the winning entry was developed. Thanks very much guys!
Markus is from Germany. He is currently a scientific associate and Ph.D. student at the University of Stuttgart. His research area is automotive radar. Markus completed his undergraduate degree at the University of Bochum and also spent four months in Princeton, New Jersey as an intern at Siemens.
Markus has been using MATLAB since 1999. Today, he works mainly in MATLAB and uses it for larger projects implementing classes and objects. The Blockbuster contest is the first contest that Markus has participated in. He has certainly done very well for a first time player!
In this contest, I was able to take advantage of an image processing project I worked on during my studies. There my task was to find straight edges in images. A good preprocessing step after edge-filtering and thresholding was to find clusters of edge points (in that case diagonally connected points were also neighbors). At that time I took an existing clustering algorithm and improved it, so that it was able to count the number of points in the clusters without needing extra memory.
When I reviewed this algorithm at the beginning of this contest, I really needed some time to understand what I did some years before. Re-implementing it in MATLAB (sorry, the old version was in C) was simple, as only direct neighbors were allowed in the blockbuster problem. Using this clustering algorithm to find the largest cluster (in terms of number of points times value) and popping it resulted in a very quick algorithm that took position six during darkness. I won the twilight phase by expanding the algorithm to check which two subsequent moves would be able to kill the most points.
The clustering algorithm was able to work with a single matrix as memory because it saved two numbers in one cell. These numbers could be decoded by mod(x,y)- and floor(x/y)-operations. Counting the number of points in a second matrix allowed me to win the Tuesday Leap prize, as it avoided the mod- and floor-operations for the small prize of some additional memory. I wonder why no one found this obvious tweak before. Does this mean that no one really understood what the algorithm did?
Anyway, I was very lucky to win the Tuesday leap. If I had submitted my code four minutes later, then my score would have been compared to a new leader and my improvement would have decreased from 4.78 to only 1.83 points.
-- Markus Buehren
Anders is from Finland and is currently a student at bo Akademi where he is pursuing his masters degree in Mathematics. Anders uses MATLAB as a convenient tool for matrix calculations and data analysis.
My winning entry (I didn't start the fire6) contained only one little tweak of the parameter zzz1004 aka bustedScoreFactor. This had been done earlier in imre83 by Imre Polik, resulting in a better score but not good enough in terms of time. Fifteen minutes later the scrambling wars began and surprisingly nobody else remembered to tweak that particular parameter.
So I waited until five minutes before the deadline, took the current leader (Rotten to the Root by Nick Howe) and sent in a few variations on the parameter. The honor goes to the people that implemented genuinely new ideas. I will try to do some of that next time.
-- Anders Skjäl
Jim is from the United States and lives in Detroit, MI (the automotive hub in the U.S.). Jim works for Visteon, the second-largest automotive component supplier in the U.S., as the team leader for the HMI Software Subsystem.
Jims team uses MATLAB extensively for HMI software development on automotive radios, navigation modules, instrument clusters, voice modules, and other electronic devices. Specifically they use Stateflow for HMI Logic design and auto-code generation. The team also uses Simulink as their PC simulation environment so that all their HMI source code is tested on the computer before it is flashed onto hardware.
The contest was so fun that I'm considering making the next contest a week long "project" for my team at work. Now that the contest is over I can finally get some sleep and see my family again :-).
-- Jim Mikola
David is a professor in the department of Electrical and Computer Engineering at McMaster University. His main research is computational vision. David uses MATLAB in his research lab for running visual psychophysics and brain imaging experiments as well as data analysis and computational modeling, and simulations.
David is also a repeat contest winner, having also won a prize in the Ants Contest. Congratulations David, on another win!
I got a late start in the Blockbuster contest and missed the Darkness phase, but I caught up to a respectable 9th place during the Twilight phase. It was a very interesting competition once we entered Daylight and there were lots of opportunities to tweak and improve each other's code.
I made the biggest contributions on Saturday, Sunday, Monday, and Tuesday (Contest Statistics), and I'm proud to be recognized as the Big Sunday Push Winner. One research assistant in my lab teased me by saying, "It's nice they give out various coloured ribbons in your nerd competition." In any case I enjoyed competing with the different skills and strategies of others, finishing second to Markus in the Tuesday Leap, and second to Mihi for Best Result.
I think it was about 7pm on Wednesday, two hours after the contest deadline, when my entry came to the front of the queue and took the lead, though I knew there was no reason to celebrate, because by that time I already realized there were superior entries from Mihi and Hannes&Cobus still waiting in the queue. They had a good strategy to hold back their improved submissions until just before the deadline. Apparently they didn't cut it close enough, since Tim Vaughan still had time to tweak their code and submit the winning entry with nine minutes to spare.
It was fun to participate in such a hotly contested competition. I am looking forward to the next one.
-- David Jones