Hi there !
We have been discussing lately with some CG users about optimisation puzzles. At the moment there are only 4 puzzles in the category : Code of the Ring, Mars Lander, Code vs Zombies and the CG sponsored puzzle.
There is a very strong bias on the methods used depending on whether or not the validation tests are known to the players. It is (almost) no secret now that the top players on CotR and Mars Lander know the validation cases and have hard coded solutions. I won’t talk about the CG contest since I don’t know it that well. As for CvZ, all top players use a variant of el-didou’s solution (posted in the CvZ strategy topic) ie a Monte-Carlo approach.
Now it is problematic, if we want to implement state of the art optimisation methods, to be limited to 100ms. In cases like CvZ where some very neat approach could be used, the best solutions are random and require multiple submits to hit the highest scores (without talking about the submit spamming required to top the best players).
In Mars Lander and CotR however, knowing the validation cases allow players to test very neat optimisation algorithms. For instance, Mars Lander has been solved by some players using genetic algorithms, while others might have used simulated annealing + neural networks.
If reverse engineering the validation tests might be considered by some as an exploit, because “hardcoding is ugly” (statement that I totally agree with), on the other hand, having random solutions and having a submit script that spams until becoming first, is not ideal either. To be completely honest, I think the value of having validation tests for the optimisation problems is a big bonus, since it leads not only to real solvers but also very precise ones. The optimisation then really becomes optimisation and not “quick and dirty solution since you only have 100ms”.
Soooo, here is the question : Is it conceivable for CG to release officially the validation cases for CotR, CvZ and Mars Lander so that : 1- Every player plays with the same chances; 2- Avoid spamming and “dumb” methods to keep in a 100ms timeframe ?
Thanks a lot in advance