Chess Engine Kibitz Help Page

For ACCA/ACCL computer chess tournaments and many other online computer chess tournaments, kibitzing the PV and associated info is a requirement. This rule helps ensure that no engine is being faked either by human assistance or by a cloned or commercial engine impersonating the announced engine. For the sake of others, please keep it to a reasonable length. Kibitzing is not required during pondering, just during the search process for the move presently at your engines decision.

What Information is Required

The information required is as follows (order not specified):

  1. Plies searched so far.
  2. Value of the current search. Typically printed in centipawns.
  3. PV The current searches primary variation. May be of any ledgible form: (e2e4 e7e5 g1f3 d7d6), (e4 e5 Nf3 d6), .....
Requested (not required) additional information:
  1. Time consumed so far on this moves search. Typically printed in milliseconds or centiseconds.
  2. Nodes searched so far on this move. Typically it is the sum of the interior nodes and the quiesce nodes.
    You may split this into two pieces of info: Interior nodes and quiesce nodes.
  3. NPS (nodes per second) for this move.

How To

Kibitzing the PV is fairly easy. Most engines print the PV as they run their main search already. To kibitz the PV and PV info just put an extra output statement in the program at the same place as your current PV output. I'd put an extra if statement around it so that this is only done when you turn kibitzing on. (You don't want this on against humans!) I use a simple command line parameter as input to my programs for this.

In order to get the kibitz command to a chess server, one has to wrap the tellics (literally "tell ICS") command around it. The string will look something like this:
tellics kibitz ply=8 value=120 t=500 N=1000000 NPS=200000 e2e4 e7e5 Nf3 Nc6 Bc4 Bc5 Nc3 Nf6

The command will look something like the following:
cout << "tellics kibitz ply=" << ply << " value= " << value << " t=" << timeused << " N=" << TotalNodes << " NPS=" << nodespersecond << " " << PVSTRING << "\n";

OR

printf("tellics kibitz ply=%d value=%d t=%d N=%d NPS=%d %s\n",ply,value,timeused,TotalNodes,nodespersecond,PVString);

How Much Kibitzing To Output

The rule reads: "You may kibitz a few plies before the final ply, but keep it to a minimum .....". You are not required to output more than the last PV.

Personally, I only kibitz the final move, but some prefer more. Too much blocks all the chatter on the computer discussion channel that most of us prefer to participate in. Trying to balance these two constraints creates some gotchas. The issues stem from the time control being Game in T.

  1. Kibitzing PV only after T amount of time. The issue is you may not kibitz at all in the last moves of a long match.
  2. Kibitzing PV only after N ply of search. Same issue as above or you'll kibitz too much.

These issues lead us to a heuristic: start kibitzing when half the time per move is consumed. This should work well and you may adjust it.