Algorithm Round 2

The Algorithm invitational highlights the pure skill of an individual's ability to solve a problem.

Scoring
Scoring

 

Scoring for Imagine Cup Algorithm Round 2 is based on the performance of your submitted algorithm.

You will have until May 2, 2008 at midnight GMT (May 3 0:00 GMT) to work on your algorithm. During this period you can test your algorithm as many times as you wish, using either a local test application or by uploading to the official benchmark server, and using a set of practice matrices. After May 2, we will take the algorithm which you have designated as your best algorithm and run it against a final series of 32x32 matrices. These final matrices will be randomly generated, and their exact configuration will not be known in advance. Your final score will be determined by your algorithm’s performance against this final series of matrices. The formula used will be

Score = 1000 * ( Average((FinalCellTemp - 20) ^ 1.5) + A * time ) / NumTests

where

FinalCellTemp is the final temperature of each cell.

A is a constant (currently 1)

Time is the running time of your algorithm across all matrices, in seconds, as measured on the benchmark server. This counts all time spent inside your PlaceFarms method, including any time required by calls you make to the simulation engine.

NumTests is the number of matrices that the algorithm was run on. This is 1 when using the Client Runner and 100 when using the benchmark server.

The six contestants with the lowest (best) scores will advance to the finals.

 

Competition rules

Contestants must adhere to the following rules of competition, in addition to the general rules of the Imagine Cup Competition. We reserve the right to disqualify anyone who, in our opinion, has violated these rules.

  1. All work must be exclusively that of the individual contestant.
  2. Each contestant may work on and submit only one assembly (multiple accounts are not allowed).
  3. Scores must be achieved only through the use of well-behaved .NET assemblies which focus exclusively on optimizing the average cell temperature and running time. It is prohibited to attempt, by any means, to manipulate the operation or scoring on the benchmark server other than through such well-behaved assemblies.

Additionally, submitted assemblies must conform to the following restrictions:

  1. The assemblies must be .NET 2.0 managed assemblies which expose a PlaceFarms() method.
  2. The submitted algorithm must be "clean", defined as follows: They must use only a single execution thread on the processor and up to 256 MB of memory to determine the optimal series of farm movements for a given atmosphere matrix. To the extent a submitted assembly achieves a higher score than other assemblies, it must do so based strictly on the quality of its algorithm, and in particular its ability to produce a better set of farm movements and/or do it in less time, operating in the same conditions as the other assembly.

    In particular, the following techniques are explicitly disallowed:
    • Multithreaded solutions.
    • Any access to machine resources other than the processor and memory, including files, registry, or network resources.
    • Any technique which effectively calculates farm movement for a particular test without being included in the timing results.
    • Any saving of state across test runs.
    • Any attempt to manipulate the runtime priority of the thread or of other machine processes.
    • Any attempt to discover or manipulate the runtime environment of the assembly.
    • Any attempt to manipulate assembly results and score other than via a "clean" algorithm, as defined above.


    To help enforce this rule, contestants must supply buildable source for their assemblies on request.
  1. Your assembly must conform to the following restrictions, when run on the benchmark server (for practice runs as well as the final run):
    • Total "in process" time (time spent within your PlaceFarms method) must be less than 20 seconds per test matrix.
    • Total clock time for running your assembly must be less than 30 seconds per matrix.
    • Total memory used by your assembly must be less than 256 MB.
  • If your assembly exceeds time limits for a given matrix during a batch test run, all subsequents tests for that run will be canceled.