[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: computer-go: Authenticating the identity of a remote go-playing computer program
> If a program were deterministic, you could require the programmer to
> submit his program, and verify after the tournament that it makes the
> same moves. But most programs are not deterministic.
And that's the biggest flaw in designing a protocol. However, it
might not be completely unreasonable, since a protocol is a protocol
and must be implemented as such, to require programs to be
deterministic, but as you imply, this might not be easy for many
programs.
I believe you can eliminate anything in a program that could cause
non-determinstic behavior, without changing the nature of the program,
but the question is, "Is it worth it?."
Here are a few sources of non-determinism I know of and possible
solutions:
1. Use of random numbers.
Fix: Use psuedo random numbers
2. Use of psuedo random numbers
Fix: Publish a starting seed before the game, or before each
move if necessary.
3. Random computer state.
Fix: view this as a bug in your program and initialize all
state correctly and debug your program!
4. Dynamically adjustable time control.
Fix: This could cause your program to time out unpredictably,
based on game and timing conditions. This can be solved
by publishing "state markers" as part of your move solution.
A "state marker" is some kind of indicator that tells the
observers exactly what state the program is in. For example,
if your program always thinks exactly 60 seconds and then
produces its move, you might perhaps keep a node counter as
part of the published state, so that you know the move is not
produced until state marker n is reached, and before state marker
n+1 is reached.
5. Learning algorithms.
Fix: The problem is that your program might dynamically change
it's fundamental move selection algorithm after every move,
based on things learned during the ongoing calcuations.
This one, and similar ones are the toughest to handle
deterministically. One possibility is to checksum and
publish the starting state before each move, which is
always the general solution to any of these problems.
However, that leads to the problem of REPRODUCING the
starting state, which could be a really tough problem.
This state could be saved off in case of later disputes,
and that is a workable solution, but it seems like an
unusual requirement.