Subversion Repositories Games.Chess Giants

Rev

Rev 110 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
110 pmbaty 1
command synopsis
2
 
3
!command....................... passes command to a shell.
4
adaptive NPS a b c d........... enables adaptive hash mode.
5
alarm on|off................... turns audible alarm on/off.
6
analyze........................ analyze a game in progress.
7
annotate....................... annotate game
8
autotune....................... SMP search tuning (help autotune for details)
9
batch on|off................... on disables async I/O for batch file usage
10
bench.......................... runs performance benchmark.
11
black.......................... sets black to move.
12
book........................... controls book
13
cache=n........................ sets tablebase cache size.
14
clock.......................... displays/adjusts chess clock times.
15
display........................ displays chess board.
16
display [n].................... sets display options
17
draw accept|decline............ decline always declines.
18
draw offer|nooffer............. nooffer never offers a draw.
19
draw dynamic <0|1>............. enables/disables dynamic draw scores.
20
echo........................... echos output to display.
21
edit........................... edit board position.
22
egtb........................... enables endgame database probes.
23
egtbd.......................... set min remaining depth to allow probes.
24
epdhelp........................ info about EPD facility.
25
end............................ terminates program.
26
evaluation..................... adjust evaluation terms.
27
exit........................... restores STDIN to keyboard.
28
force move..................... forces specific move.
29
hash n......................... sets transposition table size.
30
                                 (n bytes, nK bytes or nM bytes).
31
hashp n........................ sets pawn hash table size.
32
history........................ display game moves.
33
import filename................ imports learning data (.lrn files).
34
info........................... displays program settings.
35
input filename................. sets STDIN to filename, reverts back on exit.
36
kibitz n....................... sets kibitz mode n on ICS.
37
learn n|clear.................. enables/disables learning (100 = default).
38
                                 clear clears all learned information
39
level moves time inc........... sets ICS time controls.
40
linelength n................... sets line length to n.  A really large value
41
                                will produce 1 line PVs, making parsing easier
42
list........................... update/display GM/IM/computer lists.
154 pmbaty 43
lmp base scale................. LMP pruning move counts
44
lmr min max bias moves scale... LMR reduction matrix generator
110 pmbaty 45
load file title................ load a position from problem file, starting
46
                                with line containing title, ending on exit.
47
log on|off..................... turn logging on/off.
48
mode normal|tournament......... toggles tournament mode.
49
move........................... initiates search (same as go).
50
name........................... sets opponent's name.
51
new............................ initialize and start new game.
52
null m n....................... null move R = M + depth / n.
53
noise n........................ no status until n nodes searched.
54
operator seconds............... sets operator time per move.
55
output long|short.............. sets move display format to long or SAN
56
perf........................... times the move generator/make_move.
57
perft.......................... tests the move generator/make_move.
58
personality save|load fn....... saves/loads a personality file.
59
pgn option value............... set PGN header information.
60
phash n........................ sets path hash table size.
61
ponder on|off.................. toggle pondering off/on.
62
ponder move.................... ponder "move" as predicted move.
63
rating a b..................... sets Crafty rating to a, opponent to b
64
                                (affects draw score/contempt)
65
read [filename]................ read moves in (from [filename] if given.)
66
reada [filename]............... read moves in (from [filename]]) and append.
67
                                 (appends to current game history.)
68
reset n........................ reset game to move n.
69
resign......................... ends current game recording Crafty as winner.
70
resign m n..................... set resign threshold to m pawns.
71
                                 n = # of moves before resigning.
72
savegame [filename]............ saves game in PGN format (to filename).
73
savepos [filename]............. saves position in FEN string (to filename).
74
score.......................... print evaluation of position.
75
screen [filename] margin....... screen a file of EPD positions by searching them
76
                                and culling positions with score outside the
77
                                window {-margin, margin} (use st=n to set time)
78
sd n........................... sets absolute search depth.
79
search move.................... search specified move only.
80
selective min max.............. set null move depths.
81
setboard FEN................... sets board position to FEN position.
82
settc.......................... set time controls.
83
show book...................... toggle book statistics.
84
skill n........................ set skill level to n
85
smp............................ sets SMP parameters (help smp for details)
86
sn n........................... sets absolute search node limit.
87
speech on|off.................. enables (disables) audio output.
88
st n........................... sets absolute search time.
89
swindle on|off................. enables/disables swindle mode.
90
tags........................... list PGN header tags.
91
test file [N].................. test a suite of problems.
92
time........................... time controls.
93
timebook....................... out of book time adjustment
94
trace n........................ display search tree below depth n.
95
usage percentage............... adjusts Crafty's time usage up or down.
96
whisper n...................... sets ICS whisper mode n.
97
white.......................... sets white to move.
98
wild n......................... sets ICS wild position (7 for now).
99
xboard......................... sets xboard compatibility mode.
100
 
101
Type "help command" to see more detailed help information, if it is
102
available.  Note that help is not available for all possible commands.
103
<end>
104
 
105
<analyze>
106
The analyze command puts Crafty into a mode where it will search forever
107
in the current position.  When a move is entered, crafty will make that
108
move, switch sides, and again compute, printing analysis as it searches.
109
You can back up a move by entering "back" or you can back up several
110
moves by entering "back n".  Note that n is the number of moves, counting
111
each player's move as one (ie n plies, not n full moves).
112
<end>
113
 
114
<annotate>
115
annotate[h|t] filename side moves margin time [n]
116
 
117
Filename is the input file with game moves, while the output will be
118
written to filename.can.  The input file is PGN-compatible with one
119
addition, the ability to request that alternative moves also be
120
analyzed at any point.  To do this at the point where you have
121
alternative moves, simply include them in braces {move1, move2},
122
and Crafty will then search them also.
123
 
124
Side can be b/w/bw to indicate whether to annotate only the white
125
side (w), the black side (b) or both (bw).  Side can also be the
126
players name, where Crafty will then use the players name and the
127
PGN tags to discover which you want the annotation done for.
128
 
129
Moves indicates which moves to annotate.  A single value says start
130
at the indicated move and go through the entire game.  A range (20-30)
131
annotates the given range only.
132
 
133
Margin is the difference between the search value for the move played
134
in the game, and the best move crafty found, before a comment is
135
generated (pawn=1.0).
136
 
137
Time is the time limit per move in seconds.
138
 
139
If the optional "n" is appended, this produces N best moves/scores/PV's,
140
rather than just the very best move.  It won't display any move that
141
is worse than the actual game move played, but you can use -N to force
142
Crafty to produce N PV's regardless of how bad they get.
143
 
144
Using 'annotateh' produces an HTML file with bitmapped board displays
145
where analysis was displayed.
146
 
147
Using "annotatet" will cause the output to be written in a LaTex (.tex)
148
format.
149
<end>
150
 
151
<autotune>
152
The autotune command can be used to configure various SMP search parameters 
153
for your specific hardware and target time limit.  Note that before you run
154
this command, you MUST set the max number of threads you want to use (most
155
likely the number of physical processor cores on your machine.)  Crafty 
156
actually runs a parallel search over a small set of positions repeatedly, and
157
to properly tune things, it needs to use the max configuration you will ever
158
want to use.  If you forget, autotune will refuse to run.  The command is:
159
 
160
autotune <time> <accuracy>
161
 
162
The <time> argument tunes the parallel search stuff for this time limit.  The
163
only real place where this might be useful is for very fast vs very slow time
164
limits, since a fast search probably needs to be a bit more aggressive if it
165
is going to have any hope of using multiple threads.  Once you get to a time
166
limit of 30 - 60 seconds, going further wont help at all and can GREATLY
167
increase the run-time of the automatic tuning code.
168
 
169
<accuracy> is simply a number that tells Crafty how many times to run a test
170
for a specific tuning option.  It will run this many tests and then use the
171
average of the run times for the timing value.  Four (4) provides pretty
172
good accuracy, anything less than four often runs afoul of SMP non-determinism
173
and it can make wrong decisions.  8-16 are better but these will take some time
174
to run so be prepared.  Crafty will give you an estimate of the expected run-
175
time once it calibrates the benchmark to the time limit you specified.
176
 
177
Once AutoTune() finishes, it will append the necessary commands to the .craftyrc
178
file to set the optimal values for each option.  If you run this multiple times,
179
you will accumulate cruft at the bottom of the .craftyrc file.  Since the last
180
commands override the earlier ones, it will work, but if you do run it more than
181
once you might consider an edit to clean it up.
182
 
183
This can burn some time so it is an ideal command to run overnight where you can
184
crank up accuracy and get pretty optimal settings.
185
 
186
Note:  This is more effective for larger numbers of threads/cores.  On a machine
187
with 8 or fewer cores, the default values are probably as good as anything.  But
188
as the number of cores climbs, autotune can find better settings depending on 
189
the hardware.
190
<end>
191
 
192
<book>
193
You can use the following commands to customize how the program uses
194
the opening book(book.bin and books.bin).  Typically, book.bin contains
195
a large opening database made from GM games.  Books.bin is a short,
196
customized book that contains selected lines that are well-suited to
197
Crafty's style of play.  The flags can further refine how this small
198
book file is used to encourage/avoid specific lines.
199
 
200
binfile create filename [maxply] [mp] [wpc]
201
 
202
This command creates a new book by first removing the old binary file.
203
it then will parse filename and add the moves to the binary book
204
filename given as binfile.
205
 
206
maxply is the max length of book moves stored from any single PGN
207
game in the input file.
208
 
209
mp means a particular move must appear in at least that many games
210
to be stored in the book file.
211
 
212
wpc is the relative winning percentage.  50 means exclude any book move
213
that doesn't have at least 50% as many wins as losses.
214
 
215
book mask accept chars
216
 
217
Sets the accept mask to the flag characters in chars (see flags below.)
218
Any flags set in this mask will include either (a) moves with the flag
219
set, or (b) moves with no flags set.
220
 
221
book mask reject chars
222
 
223
Sets the reject mask to the flag characters in chars (see flags below.)
224
Any flags set in this mask will reject any moves with the flag set (in
225
the opening book.)
226
 
227
book off turns the book completely off.
228
 
229
book random 0|1 disables/enables randomness.  Book random 0 takes the set
230
of book moves and searches them for about 1/10th of the normal search time
231
and lets the search choose which move to play.  Any move not in the book
232
file will not be considered or played.
233
 
234
bookw weight v
235
 
236
Sets weight for book ordering.  (Weights are freq (frequency), eval
237
(evaluation) and learn (learned scores).
238
 
239
book width n
240
 
241
Specifies how many moves from the sorted set of book moves are to be
242
considered.  1 produces the best move from the set, but provides little
243
randomness.  99 includes all moves in the book move set.
244
 
245
Flags are one (or more) members of the following set of characters:  {?? ?
246
= ! !! 0 1 2 3 4 5 6 7 8 9 A B C D E F} Normally, ?? means never play, ?
247
means rarely play, = means drawish opening, ! means good move, !! means
248
always play, and 0-F are user flags that a user can add to any move in the
249
book, and by setting the right mask (above) can force the program to either
250
always play the move or never play the move.  The special character * means
251
all flags and is probably dangerous to use.  Flags are added to a move by
252
entering the move and a / or \ followed by the flags.  / means add the flags
253
to the move preserving other flags already there while \ means replace any
254
flags with those following the \.
255
 
256
The format of the book text (raw data) is as follows:
257
 
258
[title information] (required)
259
1. e4 e5 2. Nf3 Nc6 3. ... (a sequence of moves)
260
[title information for next line] (required)
261
1. e4 e6 ...
262
end (optional)
263
<end>
264
 
265
<clock>
266
clock crafty-time [opponent-time]
267
 
268
clock is primarily intended to be used in a computer chess tournament 
269
where the games are played on a real chess board using a real chess
270
clock, rather than through some automatic interface that manages the
271
time automatically.
272
 
273
crafty-time is the amount of time left on Crafty's clock, expressed in
274
minutes, or in hh:mm format.  Crafty will convert this to its internal
275
representation correctly.
276
 
277
opponent-time is the amount of time left on the opponent's clock, 
278
expressed in the same way.  This is option and is not required as
279
Crafty does not use this information during the game although it
280
does keep up with it.
281
 
282
After entering this command, you should probably type "clock" to be
283
sure things look correct.
284
 
285
Note that the "operator" command sets a time per move overhead for the
286
operator, and that this affects the actual time used as expected.  IE in
287
the above clock setting, assuming the operator has allowed 10 seconds per
288
move, crafty will "hide" 35 * 10 seconds and not use it for searching, which
289
gives the operator time to actually make the moves and press the real clock
290
button.  It is CRITICAL that the clock command be used from time to time to
291
keep Crafty's internal clock in sync with the real clock.  If you use the
292
operator command, the clock value should match the real chess clock exactly,
293
if you choose to not use the operator time and fudge the chess clock time
294
yourself, that will work as well, but it is more prone to errors.
295
<end>
296
 
297
 
298
<display>
299
display moveinfo  -> display move time/results/etc.
300
display pv        -> display principal variation.
301
display fail      -> display fail high / low moves.
302
display stats     -> display search statistics.
303
display moves     -> display root moves as they are searched.
304
display info      -> display general information messages.
305
display ply1      -> display ply-1 move list/sorting info.
306
display movelist  -> display move list after each iteration.
307
 
308
For the above options, they can be preceded by a "no" to disable them, or
309
omit the "no" to enable them.  "display all" will show all current display
310
settings
311
<end>
312
 
313
<draw>
314
draw offer|nooffer determines whether Crafty will automatically offer
315
draws when it believes that result is appropriate.
316
 
317
draw accept|decline determines whether Crafty will automatically accept
318
draw offers when they are made, or if it will automatically decline them
319
no matter what the current score is.
320
 
321
draw dynamic 1|0 enables(disables) dynamic draw score computation based on
322
the rating difference between Crafty and the opponent (usually obtained by
323
the "rating" command from xboard.  If set to 0, this is disabled and the
324
default draw score (aka contempt factor) is set to zero (0).
325
<end>
326
 
327
<lists>
328
list name +name -name ...
329
 
330
The lists are as follows:
331
 
332
AK  Auto-Kibitz list.  If crafty plays any opponent named in this list
333
while playing on a chess server, it will kibitz the usual analysis as
334
the game is played.  Not advised for human opponents as they do not
335
like the "noise".
336
 
337
B  Blocker list.  If you notice a player repeatedly trying to block the
338
position to get easy draws, put his name in this list.  Players in this
339
list get special "anti-human" scoring turned up louder than usual to 
340
combat this strategy.
341
 
342
C  Computer list.  This is not needed on ICC as xboard/winboard both
343
tell crafty it is playing a computer opponent.  However, if your GUI
344
does not do this, you can put the name of the computer opponents you
345
frequently play in this list and if the GUI sends the "name" command
346
properly, crafty will figure out that it is playing a computer.
347
 
348
GM/IM lists are obvious.  This identifies players that are strong 
349
enough that Crafty should resign or offer draws sooner than normal,
350
rather than hoping for a blunder in lost or drawn positions.
351
 
352
SP  Special Player list.  Names in this list can be used to specify 
353
a unique opening book (to replace books.bin, not book.bin) for this
354
particular opponent, as well as specifying a personality file to use
355
rather than the default crafty.cpf.  The format of this particular
356
list is:
357
 
358
list SP +name [book=filename] [personality=filename]
359
 
360
<end>
361
 
154 pmbaty 362
<lmp>
363
 
364
lmp base scale
365
 
366
This commands tunes the LMP move count thresholds.  The array it produces
367
is indexed by depth, and defines the number of moves at that remaining
368
depth that must be searched before late move pruning can kick in.
369
 
370
The basic formula looks like this:
371
 
372
moves = base + depth ^ scale
373
 
374
Bigger valuse for base and scale make LMP more conservative, smaller values
375
make it more aggressive and risky.
376
 
110 pmbaty 377
<lmr>
378
 
379
lmr min max dscale mscale scale
380
 
381
This command tunes the LMR reduction matrix.  The values are used to
382
set the reduction matrix, which is indexed by depth remaining and moves
383
searched so far at this ply.  This is an array of 32 rows, 64 columns, 
384
where the rows correspond to remaining depth and the columns correspond
385
to total moves searched so far at this ply.
386
 
387
The basic calculation looks like this:
388
 
389
  r[depth][moves] = (log(depth) * dscale + log(moves) * mscale) / scale
390
 
391
Increasing dscale makes the reduction amount favor depth more, increasing
392
mscale makes the reduction amount favor moves searched more.  The "scale"
393
value is used to limit the speed at which the reductions grow.
394
 
395
Note that NO reduction can be less than min nor greater than max, from
396
the lmr command.  When you use this command, it will display a compressed
397
version of the 32x64 array like this:
398
 
399
 
400
 
401
                 LMR reductions[depth][moves]
402
  ----------------------moves searched-----------------
403
 |       2  6 10 14 18 22 26 30 34 38 42 46 50 54 58 62
404
 |  3:   1  1  1  1  1  2  2  2  2  2  2  2  2  2  2  2
405
 |  5:   1  1  2  2  2  2  2  2  3  3  3  3  3  3  3  3
406
 d  7:   1  1  2  2  2  3  3  3  3  3  3  3  3  3  4  4
407
 e  9:   1  1  2  2  3  3  3  3  3  3  4  4  4  4  4  4
408
 p 11:   1  2  2  3  3  3  3  3  4  4  4  4  4  4  4  4
409
 t 13:   1  2  2  3  3  3  4  4  4  4  4  4  4  4  4  5
410
 h 15:   1  2  2  3  3  3  4  4  4  4  4  4  5  5  5  5
411
   17:   1  2  3  3  3  4  4  4  4  4  4  5  5  5  5  5
412
 l 19:   1  2  3  3  3  4  4  4  4  4  5  5  5  5  5  5
413
 e 21:   1  2  3  3  4  4  4  4  4  5  5  5  5  5  5  5
414
 f 23:   1  2  3  3  4  4  4  4  5  5  5  5  5  5  5  5
415
 t 25:   1  2  3  3  4  4  4  5  5  5  5  5  5  5  5  6
416
 | 27:   1  2  3  3  4  4  4  5  5  5  5  5  5  6  6  6
417
 | 29:   1  2  3  4  4  4  4  5  5  5  5  5  5  6  6  6
418
 | 31:   1  2  3  4  4  4  5  5  5  5  5  5  6  6  6  6
419
 
420
Notice that the depth (# of rows) only displays every other row to make
421
the display fit on a normal screen.  The moves searched show every fourth
422
value since there are 2x as many columns as rows.  However, even though
423
you don't see the missing rows/columns, the values are there.
424
<end>
425
 
426
<mode>
427
 
428
This command influences how the book is used.
429
 
430
mode normal is the default.
431
 
432
mode tournament tells crafty to behave differently while in book.
433
Specifically, when it is pondering, it generates all of the opponent
434
moves and looks them up in the opening book.  If it finds a book
435
reply, it eliminates that opponent move from the list.  It then does
436
a 1/10th normal time search for the opponent, but ONLY considers those
437
moves it did not have a book reply for.  It then takes the result of
438
that search and ponders that move, so that hopefully if the opponent
439
plays a move not in our book, we will already be thinking.
440
 
441
The more useful place, however, is where we play a book move that takes
442
the opponent out of book, and he spends a significant amount of time
443
thinking and plays a pretty obvious move.  Since we ponder the best move
444
of his that we don't have a book move for, we have a good chance of 
445
pondering the right move and saving time on our clock.
446
<end>
447
 
448
<mode>
449
null <min> <divisor>
450
 
451
This command allows you to customize the null-move search parameters.  The
452
formula Crafty uses is as follows:
453
 
454
  R = <min> + depth / <divisor>
455
 
456
The default values are 3 and 10.  When remaining depth is < 10, the R value
457
is 3.  If remaining depth is > 10 and < 19, R=4, and so forth.  Smaller
458
divisor values make R ramp up quicker and the null-move pruning will become
459
more aggressive.  Overall depth will increase pretty quickly, but this can
460
also hide certain types of tactics as well, so going too far turns out to
461
be dangerous.
462
<end>
463
 
464
<personality>
465
personality load|save filename <or> personality n v
466
 
467
perspath path-to-personality-directory
468
 
469
Crafty "personality" files (.cpf files) contain information that 
470
affects three components of Crafty.
471
 
472
You can use the "selective" command to adjust the null-move R (min
473
and max) values.  The default values are 2 and 3, and reducing them
474
will reduce Crafty's playing strength to some fairly significant
475
degree.
476
 
477
You can use the "extension" command to adjust the search extension
478
values.  Reducing these will "dumb down" the search and make crafty
479
tactically (but not positionally) weaker.  They can be set all the
480
way down to 0.00 if you choose.
481
 
482
You can use the evaluation command to adjust some global evaluation
483
weights (ie turn down total pawn scoring, or king safety, etc.) or
484
you can use this command to adjust individual scoring values, from
485
the value of pieces, to specific scoring terms for each piece such 
486
as the value of a doubled pawn or whatever.
487
 
488
Once you find settings you like, you can use "personality save 
489
filename" to save all of the above settings in one file.  Later you
490
can use "personality load filename" to restore those settings prior
491
to playing a game.
492
 
493
One final note is that you can save to the specific file "crafty.cpf"
494
and your settings will become the _default_ each time you start
495
Crafty, until you either remove the file, load another personality,
496
or save a new default personality.
497
 
498
You can have as many different personality files as you want, and to
499
keep them from getting jumbled up, you can put them in a separate
500
directory and add the "perspath" to your .craftyrc/crafty.rc file to
501
point Crafty to the directory where the personality files belong.
502
 
503
personality item# value [value ... value]
504
 
505
The personality command allows you to change specific evaluation
506
or search numbers when you want.  The first thing you should do is
507
type "personality list" to show all the possible values.  The format
508
looks like this when displayed:
509
 
510
White(1): personality list
511
 
512
 
513
==================================================
514
=         search options                         =
515
==================================================
516
  1  check extension                             1
517
  2  null-move reduction                         3
518
  3  null-move adaptive divisor                 10
519
  4  LMR min distance to frontier                1
520
  5  LMR min reduction                           1
521
  6  LMR max reduction                           7
522
  7  LMR formula depth bias                   2.00
523
  8  LMR formula moves searched bias          1.00
524
  9  LMR scale factor                         2.65
525
==================================================
526
=         search options (continued)             =
527
==================================================
528
 11  prune depth                                 6
529
 12  prune margin [remain_depth]          
530
 
531
==================================================
532
=         raw piece values                       =
533
==================================================
534
 21  pawn value                               -100 (mg)     100 (eg)
535
 22  knight value                             -325 (mg)     325 (eg)
536
 23  bishop value                             -325 (mg)     325 (eg)
537
 24  rook value                               -500 (mg)     500 (eg)
538
 25  queen value                             -1050 (mg)    1050 (eg)
539
==================================================
540
=         miscellaneous scoring values           =
541
==================================================
542
 31  wtm bonus                                   5 (mg)       8 (eg)
543
 32  draw score                                  1
544
 ... etc
545
 
546
The first number is the personality term ID #.  To change the
547
value of a pawn from the default 100 to 50, you would type
548
the following command:
549
 
550
pers 21 50 50
551
 
552
 
553
And now pawns are worth 1/2 of what they were prior to the
554
command.  Note that unless you specifically save the setting
555
with the "personality save" command, once you exit Crafty
556
the pawn value will return to 100 the next time you start it
557
up.  You can, of course, put such commands in the .craftyrc/
558
crafty.rc file, but it is simpler to use the personality
559
command instead (type "help personality" for more information).
560
 
561
Note that some evaluation terms have a list of numbers as they
562
are indexed by something.  When you change one of these terms,
563
you must give _exactly_ the correct number of values, or the
564
command will produce an error without changing anything. 
565
 
566
Some of the values are 8 X 8 matrices of values, where the
567
values correspond to the chess board as viewed with square
568
a1 on the bottom left.  You must type the values in in order
569
as they appear on the screen.  Crafty will shift things as
570
needed.  IE for a piece/square table for knights, the first
571
value displayed is for a8, so the first value you enter must
572
also be for a8.  Many of these matrices have black/white 
573
counter-parts.  You enter the white values, Crafty will
574
mirror those to reflect the _same_ values but from the black
575
side of the board.  This will be done automatically.
576
 
577
Non 8 X 8 matrices are just dumped in order from element zero
578
to N.  You enter those the same way.  IE the way it prints them
579
out is the way you enter them, reading from top-to-bottom, and
580
left-to-right.
581
 
582
If you come up with an interesting personality, feel free to make
583
it available to everyone, and if it is particularly attractive, it
584
can become part of the "distributed" crafty personalities once this
585
has been released.
586
<end>
587
 
588
<settc>
589
settc moves crafty-time opponent-time
590
 
591
settc is primarily intended to be used in a computer chess tournament 
592
where the games are played on a real chess board using a real chess
593
clock, rather than through some automatic interface that manages the
594
time automatically.
595
 
596
moves is the number of moves left to the next time control from Crafty's
597
perspective.  IE if the time control is 60 moves in 120 minutes (a normal
598
time control for the WCCC) and crafty has actually made 25 moves in the
599
current game, then the correct "moves" value would be 35, as there are
600
exactly 35 moves to be made before the next time control is reached.
601
 
602
crafty-time is the amount of time left on Crafty's clock, expressed in
603
minutes, or in hh:mm format.  Crafty will convert this to its internal
604
representation correctly.
605
 
606
opponent-time is the amount of time left on the opponent's clock, 
607
expressed in the same way.
608
 
609
After entering this command, you should probably type "clock" to be
610
sure things look correct.
611
 
612
Note that the "operator" command sets a time per move overhead for the
613
operator, and that this affects the actual time used as expected.  IE in
614
the above clock setting, assuming the operator has allowed 10 seconds per
615
move, crafty will "hide" 35 * 10 seconds and not use it for searching, which
616
gives the operator time to actually make the moves and press the real clock
617
button.  It is CRITICAL that the clock command be used from time to time to
618
keep Crafty's internal clock in sync with the real clock.  If you use the
619
operator command, the settc value should match the real chess clock exactly,
620
if you choose to not use the operator time and fudge the chess clock time
621
yourself, that will work as well, but it is more prone to errors.
622
<end>
623
 
624
<smp>
625
smp commands are used to control the SMP search.  
626
 
154 pmbaty 627
smpaffinity <n> <p> is used to enable or disable processor affinity.  "-1"
110 pmbaty 628
disables affinity and lets threads run on any available core.  If you use an
629
integer <n> then thread zero will bind itself to cpu <n> and each additional
630
thread will bind to the next higher cpu number.  This is useful if you try to
631
run two copies of crafty on the same machine, now you can cause one to bind
632
to the first <n> cores, and the second to the last <n> cores.  For the first
633
instance of Crafty, you would use smpaffinity=0, and for the second
634
smpaffinity=8, assuming you are running 8 threads per copy on a 16 cpu machine.
635
If you get this wrong, you can have more than one thread on the same cpu which
636
will significantly impact performance.              
637
 
154 pmbaty 638
The second parameter is used to help Crafty identify physical vs logical cores.
639
On a typical 20 core intel machine, processors 0 - 19 are on physical cores,
640
then 20-39 map back to those same physical cores, but different logical
641
(hyperthreaded) processors.  "1" is the correct value for this system.  For an
642
IBM Power 8 machine with dual 10-core chips, processors 0 through 7 are on
643
physical core 0, then 8 through 15 are on physical core 1, etc.  A value of "8"
644
will map threads to physical cores correctly as each thread is spaced on the
645
current processor core + 8, which is correct.
646
 
110 pmbaty 647
smpmt <n> sets the total number of allowable threads for the search.  The
648
default is one (1) as Crafty does not assume it should use all available
649
resources.  For optimal performance this should be set to the number of
650
physical cores your machine has, which does NOT include hyperthreaded cores.
651
 
652
smpgroup <n> sets the maximum number of threads at any single split point to
653
<n>, with the exception of split points fairly close to the root  where ALL
654
threads are allowed to split together ignoring this limit.  Note that this is
655
ignored in the first 1/2 of the tree (the nodes closer to the root).  There
656
it is actually good to split and get all active threads involved.
657
 
658
smpmin <n> avoids splitting when remaining depth < n.  This is used to balance
659
splitting overhead cost against the speed gain the parallel search produces.
660
The default is currently 5 (which could change with future generations of
661
Intel hardware) but values between 4 and 8 will work.  Larger values allow
662
somewhat fewer splits, which reduces overhead, but it also increases the
663
percentage of the time where a thread is waiting on work.
664
 
665
smpnuma <n> enables (a) or disables (0) NUMA mode.  This defaults to zero, 
666
which is best for most users.  If you have a multiple-socket machine, or one
667
that is NUMA even though it only has one socket, you should enable this.  This
668
will cause Crafty to split the hash tables across all NUMA nodes to prevent
669
the formation of "hot spots" that would cause unnecessary conflicts.
670
 
671
smproot <n> enables (1) or disables (0) splitting the tree at the root.  This
672
defaults to 1 which produces the best performance by a signficiant margin. 
673
But it can be disabled if you are playing with code changes.
674
 
675
smpnice <1/0> enables or disables the "nice facility".  With smpnice=1, at the
676
end of a search (non-pondering) the extra threads will terminate rather than sit
677
in a busy spin loop burning cpu cycles.  smpnice=0 is slightly more efficient
678
but will result in 100% of the machine being used whether the search is running
679
or waiting on input.
680
 
681
smpnodes <n> sets the number of NUMA nodes on your hardware.  This is used to
682
try to split with threads on the same node when practical, to improve memory
683
access time.
684
 
685
smpgsd sets the minimum depth required to allow a gratuitous split.  A
686
gratuitous split is a split done when no threads are idle, and is a sort of
687
preemptive attempt to have work ready for processors as they become idle.  If
688
this value is set too small, overhead will climb, if it is set too large, then
689
gratuitous splits will be rare and thread wait time will climb.
690
 
691
smpgsl sets the maximum number of gratuitous splits allowed per thread.  There
692
is little point in having many split points that are not really being used, it
693
adds to overhead without any real benefit.  If you are running on 32 cores, 
694
then setting this beyond 4 will really be massive overkill since any of the 32
695
threads will be able to spontaneously split up to N times each, for a total of
696
32 * N gratuitous splits.  That's probably excessive.
697
<end>
698
 
699
<test>
700
test filename [N] [unsolved_file]
701
 
702
Test is used to run a suite of test positions in a batch run.  filename is
703
the name of the file in crafty test format.  [N] is an optional parameter
704
that is used to shorten the test time.  If crafty likes the solution move
705
for [N] consecutive iterations, it will stop searching that position and
706
consider it correct.  This makes a Win At Chess 60 second run take just a few
707
minutes, for example.  
708
 
709
The "crafty format" requires three lines per position.  The first line must
710
be a "title" line and is used to identify each position.  The second line is
711
a "setboard" command to set the position.  The third line is a line that
712
begins with "solution", and then is followed by one or more solution moves.
713
If a position is correct only if a particular move or moves is *not* played,
714
enter the move followed by a "?", as in Nf3?, which means that this position
715
will be counted as correct only if Nf3 is not played.
716
 
717
Note that this command may refer to a normal EPD test file as well and 
718
Crafty will run that test in the same way, but Crafty will notice it is an
719
EPD test file rather than a "crafty" test file and handle it appropriately.
720
 
721
A new option to this command is of the form "test filename <margin>" where
722
<margin> is greater than 10 (which means it will not be an early exit counter.)
723
In this case, Crafty takes that value as a score margin.  It will read in the
724
FEN/EPD records silently, do a search, and if the absolute value of the final
725
score is less than <margin>, the FEN/EPD is written to a new file,
726
"filename.screened".  I use this to create an opening position file for
727
cluster testing where I can create a set of positions using the -DPOSITIONS
728
compile option, and then test the resulting "openings.epd" file that creates
729
to cull those that are too unbalanced so that the same side wins no matter
730
what the skill level.
731
 
732
The [unsolved_file] parameter is optional.  If specified, any position that is
733
not solved is written to this file so that you can extract "hard" positions and
734
use just those for testing later to save time.  At one second per move on a
735
slow machine, the WAC test positions (300) will produce maybe 15 unsolved
736
positions.  On good hardware, it might miss five or less.  At 5 seconds per 
737
move, it will usually miss maybe 2-3.  At 60 seconds per move, it will 
738
generally only miss #230 which appears to have no solution after much computer
739
analysis (the supposed winning move also draws).
740
<end>
741
 
742
<time>
743
Time controls whether the program uses CPU time or wall-clock time for
744
timing.  For tournament play, it is safer to use wall-clock timing, for
745
testing it may be more consistent to use CPU timing if the machine is
746
used for other things concurrently with the tests being run.  (Note that
747
this is not recommended when using a multiprocessor machine, CPU time in
748
a parallel search increases at N times the normal time rate where N is the
749
number of processors being used).
750
 
751
Time is also used to set the basic search timing controls.  The general
752
form of the command is as follows:
753
 
754
time nmoves/ntime/[nmoves/ntime]/[increment]
755
 
756
nmoves/ntime represents a traditional first time control when nmoves is
757
an integer representing the number of moves and ntime is the total time
758
allowed for these moves.  The [optional] nmoves/ntime is a traditional
759
secondary time control.  Increment is a feature related to ICS play and
760
emulates the Fischer clock where increment is added to the time left
761
after each move is made.
762
 
763
As an alternative, nmoves can be "sd" which represents a sudden death
764
time control of the remainder of the game played in ntime.  The optional
765
secondary time control can be a sudden-death time control, as in the
766
following example:
767
 
768
time 60/30/sd/30
769
 
770
This sets 60 moves in 30 minutes, then game in 30 additional minutes.
771
An increment can be added if desired.
772
<end>
773
 
774
<timebook>
775
This command is used to adjust the time crafty uses for the first few
776
moves out of book.  The first few non-book moves are often critical,
777
but the usual search time limit will be somewhat short since Crafty
778
wants to average the time left over the moves remaining until the
779
next time control.  This command allows the user to influence how the
780
time is allocated on the first few moves out of book.
781
 
782
timebook <factor> <moves>
783
 
784
factor is a number expressed as a percentage, and specifies how much
785
extra time (in terms of the normal target time) to use.  For example,
786
a value of 100 says use 100% extra time, which essentially doubles
787
the target time limit.  A value of 50 says use 50% extra time, or
788
1.5X the normal target time.  This applies to the first move out of
789
book.
790
 
791
moves indicates the number of moves this extra time will be used.  The
792
extra time is uniformly "decayed" over those moves.  For example a value
793
of 10 says use the "factor" extra time on the first non-book move, then
794
9/10 of that extra time on the next move, 8/10 on the next move, until
795
after 10 moves out of book, where this is turned off.
796
 
797
timebook 100 10 therefore says use 200% of the normal time target for
798
the first move out of book, 190% for the next move out of book, until
799
it drops back to 100% where it will stick for the remainder of the
800
game after the first ten non-book move searches have been completed.
801
<end>
802
 
803
<tournament>
804
playing in a manually-operated tournament
805
 
806
1.  Starting Crafty.  This is the easiest part of the whole process.
807
All that's needed is to simply type the command "crafty".
808
 
809
2.  display.  This command displays the chess board using the standard
810
chess server style#1 board display.
811
 
812
This is most often used to confirm that the board has been set to the
813
proper position in the event that you can't continue an old game and
814
have to set up the position from scratch (explained later).  Note that
815
white is always at the bottom, regardless of whether Crafty is playing
816
black or white.
817
 
818
3.  read.  This command is used to read in a list of moves and make them
819
on the game board prior to using crafty to play that game.  There are 
820
two ways this can be used:  (a) read.  This will prompt you for a
821
white move, a black move, over and over until you type "exit" to terminate
822
read mode.  The side to move will be set according to the number of moves
823
entered, so that the next move will be for the correct side.  (b) read file.
824
This command reads, but the input comes from "file" rather than from the
825
keyboard.  Note that superfluous text is ignored, as is line numbers, times,
826
etc.  This will read in a PGN game and cull everything but the moves.
827
 
828
4.  setboard.  This command is used to set up a specific board position
829
when it's impossible to restart a game using the "crafty c" command, and
830
too many moves have been made, making the read command an unattractive
831
alternative.  This command parses a FEN-like position description (a
832
Forsythe-like notation) and sets the current board to that position.
833
 
834
The notation uses a string of alpha characters to represent the chess
835
position.  In this notation, uppercase K Q R B N P represents a white
836
piece, lowercase k q r b n p represents a black piece.  for empty
837
squares, you can use numbers 1-8 to indicate consecutive empty squares.
838
A "/" must terminate each rank after defining at most 8 square on that
839
rank, and the ranks are entered in descending order 8..1.  In this 
840
notation, then, the first square you enter is a8, then b8, .., h8, 
841
followed by a "/", then back to a7 and repeating.  After all 8 ranks
842
are entered, you need to indicate whether or not one side can castle
843
kingside or queenside by inserting at least one space character, followed
844
by a K (white can castle kingside) Q (white can castle queenside) k (black
845
can castle kingside) or Q (black can castle queenside).  After this, add
846
one more space, followed by the square of a pawn that just moved two ranks
847
and is subject to an en passant capture.  Note that if there is no
848
en passant capture possible, you do not enter this field.
849
 
850
For the above board position (display command), here's the setboard
851
command to set that position up:
852
 
853
setboard r2q1knr/pp2bppp/4b3/1BPp4/6PP/2N1P3/PP3P2/2RQK1NR/ K
854
 
855
Note that after entering the last piece on a rank, a number for the
856
remaining empty squares is *not* needed, so this could be shortened
857
to:
858
 
859
setboard r2q1knr/pp2bppp/4b/1BPp/6PP/2N1P/PP3P/2RQK1NR/ K
860
 
861
One unfortunate effect of this command is that you have just lost the
862
ability to detect repetitions of prior positions in the game, which can
863
be a critical issue.  It is _always_ better to use the read command to
864
re-enter the moves if the hardware crashes.  If you accidentally type
865
^C and terminate Crafty, you can type "crafty c" and it will continue
866
the last game, although you will need to set the time control information,
867
and anything else that is not in the .craftyrc file.
868
 
869
5.  reset <n>.  This command is used to back the game up if a different
870
move is to be tried, or if an incorrect move was entered by mistake.  It
871
depends on the current side to move, and the command "reset 13" will back
872
the game up to move 13, where the current side on move is still on move,
873
and Crafty will be positioned to read in move 13 for that side.  Note
874
that this affects the game, but not the clock or time or level, so that if
875
you back up more than a move or two, you also need to adjust the clock.
876
 
877
If you want to first change the side to move, use the "white" or "black"
878
command to set the side to move, then use the reset command to back up
879
to the move for that side.
880
 
881
6.  time.  This command is used to set the time control.  There are
882
several ways to use it, depending on the type of time control desired.
883
(a) time sd/n sets the game to sudden-death in n minutes. such as
884
game/10, game/30.  time sd/30 would set game in 30 time control.
885
(b) time moves/time smoves/stime sets the game to "moves" in "time"
886
minutes, then "smoves" in "stime" minutes.  A common setting is
887
time 40/120/20/60 for 40 moves in 2 hours, then 20 moves in one hour.
888
(c) time moves/time/sd/sdtime sets a standard first time control,
889
followed by a sudden death time control.  For example time 60/60/sd/30
890
is 60 moves in 60 minutes followed by game in 30 minutes.  (d) for any
891
of these, an optional 5th parameter can be added, which is the famous
892
"Fischer clock" increment that is added to each players time remaining
893
after he makes a move.  The increment is given in seconds rather than
894
minutes.  Note that the default should be right unless the tournament
895
modifies the T/C after the tournament starts for some reason.
896
 
897
7.  settc.  This command is used to correct time-control info after a
898
restart.  it will prompt you for how much time is left on both Crafty's
899
and the opponent's clock, and for how many more moves until crafty makes
900
the next time control.  Again, usually not needed, but there for serious
901
circumstances.  After restarting, type "clock" to display this info and
902
if it's wrong in any way, this settc command is the quickest way to fix
903
it up.
904
 
905
8.  clock.  This command is used to adjust the internal clock time as it
906
drifts away from the real chess clock as a game progresses.  The format
907
is simply "clock mins" to adjust Crafty's clock.  Or "clock cmins omins"
908
to adjust both Crafty's time and Crafty's internal time that the opponent
909
has left.  Since the current version doesn't really need the opponent's
910
clock time, it can be ignored with no side-effects.
911
 
912
Common problems and how to solve them:
913
 
914
1.  Is crafty searching or pondering?  I was not watching the screen,
915
and the window size is small enough that all I see is analysis scrolling 
916
up the screen.  This is easy.  Look at the bottom line on the screen, and
917
you will see a line that keeps changing, showing the depth, time used so
918
far, how many moves have been searched and the PV.  Look at the third
919
column what shows something like 12/30, which says that at the current
920
depth crafty has already searched 12 of the 30 legal moves at the root.
921
You will notice that there is an extra character after the 30, either a
922
"*" or "?".  If an "*" is showing, Crafty is thinking about its move.  If
923
a "?" is showing, crafty is pondering and thinks it is the opponent's move.
924
 
925
If it shows a "?" but you know it is Crafty's move, you simply missed it.
926
Scroll back up using whatever scroll mechanism your text window uses, to
927
find the move Crafty made.  Hopefully this won't happen often, but on the
928
occasional "emergency" men's room break, anything can happen.  Just remember
929
that "?" means I am pondering and it is my opponent's move, "*" means I
930
am searching and it is my move.
931
 
932
2.  I entered the wrong move, how do I fix this?  You are playing in a
933
game and at move 37, you enter Rfe1 rather than Rae1.  To correct this,
934
you have to do a couple of things.  First, Crafty is now searching, and
935
if you try to reset the position, it won't accept this command.  To stop
936
the search, type ? (followed by a <RETURN> of course) to tell Crafty to
937
"move now".  Once it displays the move it would play in response to the
938
incorrect move, it will start its "ponder search" but now the reset
939
command will work.  Simply type "r 37" to back up to move 37, then type
940
Rae1 and Crafty will continue as though nothing happened.  Pay attention
941
to the clock time after it moves and adjust if necessary (if you lost any
942
time while correcting an incorrect move.)
943
 
944
Note:  You can also use the "remove" command, which will unmake the last
945
move by each side.  Crafty has to be pondering or waiting on input for
946
this to work, just like the reset command, so if *you* typed the wrong
947
move, type "?" to make it move, then "remove" which backs up one move
948
for each side, followed by the opponent's move.  If the opponent makes
949
the wrong move on the board, and you enter it, do this same thing.  Note,
950
if the opponent screws up, you should notice whether or not crafty had
951
predicted the right move.  If it had, you should probably call the TD
952
over, back the game up one move with the remove command, then use the
953
"ponder xxx" command to tell crafty to ponder "xxx" (the move it was
954
pondering before the wrong move was made by the opponent) and then it
955
should be allowed to "sit" until the same amount of time elapses before
956
you enter the correct move.  The idea is that if the opponent screws up,
957
it should not wipe out any searching crafty did while waiting.
958
 
959
3.  The machine dies (power failure maybe).  How do I recover?  First, you
960
can stop the clock for such failures, so do that *first*.  Then, reboot the
961
machine and start crafty by typing "crafty c".  Next, type the "history"
962
command and carefully check the last move it displays against the score
963
sheet you are maintaining by hand.  If they are the same, you are ready to
964
enter a move and continue.  If there are moves missing, use the "reada"
965
command to re-enter these moves and append them to the moves already 
966
present.
967
 
968
If the continue option won't work due to a corrupted history file, you have
969
two choices.  The best choice is to restart crafty without the "c" option,
970
and then use the "read" command and enter the moves by hand so that if you
971
screw up later, the "reset" command will work correctly to let you back up.
972
If you are 100 moves into a game, this might not be practical.  In this
973
case, use the "setboard" command to enter the position.  Be careful to
974
check the position after entry using the display command, and be careful
975
to not enter the wrong move since you can't use the "reset" command to
976
back up after using the setboard command.
977
 
978
After either of the above problems, you need to set the proper time
979
control (if this is in your .craftyrc this is not needed) and then you
980
need to adjust the clock to show the proper amount of time remaining.
981
The command to display the clock is "clock".  To adjust the clock
982
use the command form "clock c-time o-time" where c-time is Crafty's
983
time remaining, and o-time is the opponent's time remaining.  These
984
can be entered as simply the number of minutes left, or in the hh:mm
985
format if preferred.  "clock 60 50" sets Crafty's clock to 60 minutes
986
left, opponent's clock to 50 minutes left.  "clock 1:15 45" sets 
987
Crafty's clock to 75 minutes remaining, opponent's clock to 45.
988
Crafty pays attention to how much time the opponent has used,
989
so be sure and get them both correct.   You should subtract 5 minutes
990
from the actual time left on the clock to give yourself a cushion.  Of
991
course, you should *never* enter "0" time left, or even worse, a negative
992
number, because Crafty will go south for the Winter if you do.  :)
993
 
994
Note that there is a "settc" command that simplifies getting the time
995
control right after a restart...  It's explained above.
996
<end>