command synopsis !command....................... passes command to a shell. adaptive NPS a b c d........... enables adaptive hash mode. alarm on|off................... turns audible alarm on/off. analyze........................ analyze a game in progress. annotate....................... annotate game autotune....................... SMP search tuning (help autotune for details) batch on|off................... on disables async I/O for batch file usage bench.......................... runs performance benchmark. black.......................... sets black to move. book........................... controls book cache=n........................ sets tablebase cache size. clock.......................... displays/adjusts chess clock times. display........................ displays chess board. display [n].................... sets display options draw accept|decline............ decline always declines. draw offer|nooffer............. nooffer never offers a draw. draw dynamic <0|1>............. enables/disables dynamic draw scores. echo........................... echos output to display. edit........................... edit board position. egtb........................... enables endgame database probes. egtbd.......................... set min remaining depth to allow probes. epdhelp........................ info about EPD facility. end............................ terminates program. evaluation..................... adjust evaluation terms. exit........................... restores STDIN to keyboard. force move..................... forces specific move. hash n......................... sets transposition table size. (n bytes, nK bytes or nM bytes). hashp n........................ sets pawn hash table size. history........................ display game moves. import filename................ imports learning data (.lrn files). info........................... displays program settings. input filename................. sets STDIN to filename, reverts back on exit. kibitz n....................... sets kibitz mode n on ICS. learn n|clear.................. enables/disables learning (100 = default). clear clears all learned information level moves time inc........... sets ICS time controls. linelength n................... sets line length to n. A really large value will produce 1 line PVs, making parsing easier list........................... update/display GM/IM/computer lists. lmp base scale................. LMP pruning move counts lmr min max bias moves scale... LMR reduction matrix generator load file title................ load a position from problem file, starting with line containing title, ending on exit. log on|off..................... turn logging on/off. mode normal|tournament......... toggles tournament mode. move........................... initiates search (same as go). name........................... sets opponent's name. new............................ initialize and start new game. null m n....................... null move R = M + depth / n. noise n........................ no status until n nodes searched. operator seconds............... sets operator time per move. output long|short.............. sets move display format to long or SAN perf........................... times the move generator/make_move. perft.......................... tests the move generator/make_move. personality save|load fn....... saves/loads a personality file. pgn option value............... set PGN header information. phash n........................ sets path hash table size. ponder on|off.................. toggle pondering off/on. ponder move.................... ponder "move" as predicted move. rating a b..................... sets Crafty rating to a, opponent to b (affects draw score/contempt) read [filename]................ read moves in (from [filename] if given.) reada [filename]............... read moves in (from [filename]]) and append. (appends to current game history.) reset n........................ reset game to move n. resign......................... ends current game recording Crafty as winner. resign m n..................... set resign threshold to m pawns. n = # of moves before resigning. savegame [filename]............ saves game in PGN format (to filename). savepos [filename]............. saves position in FEN string (to filename). score.......................... print evaluation of position. screen [filename] margin....... screen a file of EPD positions by searching them and culling positions with score outside the window {-margin, margin} (use st=n to set time) sd n........................... sets absolute search depth. search move.................... search specified move only. selective min max.............. set null move depths. setboard FEN................... sets board position to FEN position. settc.......................... set time controls. show book...................... toggle book statistics. skill n........................ set skill level to n smp............................ sets SMP parameters (help smp for details) sn n........................... sets absolute search node limit. speech on|off.................. enables (disables) audio output. st n........................... sets absolute search time. swindle on|off................. enables/disables swindle mode. tags........................... list PGN header tags. test file [N].................. test a suite of problems. time........................... time controls. timebook....................... out of book time adjustment trace n........................ display search tree below depth n. usage percentage............... adjusts Crafty's time usage up or down. whisper n...................... sets ICS whisper mode n. white.......................... sets white to move. wild n......................... sets ICS wild position (7 for now). xboard......................... sets xboard compatibility mode. Type "help command" to see more detailed help information, if it is available. Note that help is not available for all possible commands. The analyze command puts Crafty into a mode where it will search forever in the current position. When a move is entered, crafty will make that move, switch sides, and again compute, printing analysis as it searches. You can back up a move by entering "back" or you can back up several moves by entering "back n". Note that n is the number of moves, counting each player's move as one (ie n plies, not n full moves). annotate[h|t] filename side moves margin time [n] Filename is the input file with game moves, while the output will be written to filename.can. The input file is PGN-compatible with one addition, the ability to request that alternative moves also be analyzed at any point. To do this at the point where you have alternative moves, simply include them in braces {move1, move2}, and Crafty will then search them also. Side can be b/w/bw to indicate whether to annotate only the white side (w), the black side (b) or both (bw). Side can also be the players name, where Crafty will then use the players name and the PGN tags to discover which you want the annotation done for. Moves indicates which moves to annotate. A single value says start at the indicated move and go through the entire game. A range (20-30) annotates the given range only. Margin is the difference between the search value for the move played in the game, and the best move crafty found, before a comment is generated (pawn=1.0). Time is the time limit per move in seconds. If the optional "n" is appended, this produces N best moves/scores/PV's, rather than just the very best move. It won't display any move that is worse than the actual game move played, but you can use -N to force Crafty to produce N PV's regardless of how bad they get. Using 'annotateh' produces an HTML file with bitmapped board displays where analysis was displayed. Using "annotatet" will cause the output to be written in a LaTex (.tex) format. The autotune command can be used to configure various SMP search parameters for your specific hardware and target time limit. Note that before you run this command, you MUST set the max number of threads you want to use (most likely the number of physical processor cores on your machine.) Crafty actually runs a parallel search over a small set of positions repeatedly, and to properly tune things, it needs to use the max configuration you will ever want to use. If you forget, autotune will refuse to run. The command is: autotune [time] [accuracy] The [time] argument tunes the parallel search stuff for this time limit. The only real place where this might be useful is for very fast vs very slow time limits, since a fast search probably needs to be a bit more aggressive if it is going to have any hope of using multiple threads. Once you get to a time limit of 30 - 60 seconds, going further wont help at all and can GREATLY increase the run-time of the automatic tuning code. [accuracy] is simply a number that tells Crafty how many times to run a test for a specific tuning option. It will run this many tests and then use the average of the run times for the timing value. Four (4) provides pretty good accuracy, anything less than four often runs afoul of SMP non-determinism and it can make wrong decisions. 8-16 are better but these will take some time to run so be prepared. Crafty will give you an estimate of the expected run- time once it calibrates the benchmark to the time limit you specified. Once AutoTune() finishes, it will append the necessary commands to the .craftyrc file to set the optimal values for each option. If you run this multiple times, you will accumulate cruft at the bottom of the .craftyrc file. Since the last commands override the earlier ones, it will work, but if you do run it more than once you might consider an edit to clean it up. This can burn some time so it is an ideal command to run overnight where you can crank up accuracy and get pretty optimal settings. Note: This is more effective for larger numbers of threads/cores. On a machine with 8 or fewer cores, the default values are probably as good as anything. But as the number of cores climbs, autotune can find better settings depending on the hardware. You can use the following commands to customize how the program uses the opening book(book.bin and books.bin). Typically, book.bin contains a large opening database made from GM games. Books.bin is a short, customized book that contains selected lines that are well-suited to Crafty's style of play. The flags can further refine how this small book file is used to encourage/avoid specific lines. binfile create filename [maxply] [mp] [wpc] This command creates a new book by first removing the old binary file. it then will parse filename and add the moves to the binary book filename given as binfile. maxply is the max length of book moves stored from any single PGN game in the input file. mp means a particular move must appear in at least that many games to be stored in the book file. wpc is the relative winning percentage. 50 means exclude any book move that doesn't have at least 50% as many wins as losses. book mask accept chars Sets the accept mask to the flag characters in chars (see flags below.) Any flags set in this mask will include either (a) moves with the flag set, or (b) moves with no flags set. book mask reject chars Sets the reject mask to the flag characters in chars (see flags below.) Any flags set in this mask will reject any moves with the flag set (in the opening book.) book off turns the book completely off. book random 0|1 disables/enables randomness. Book random 0 takes the set of book moves and searches them for about 1/10th of the normal search time and lets the search choose which move to play. Any move not in the book file will not be considered or played. bookw weight v Sets weight for book ordering. (Weights are freq (frequency), eval (evaluation) and learn (learned scores). book width n Specifies how many moves from the sorted set of book moves are to be considered. 1 produces the best move from the set, but provides little randomness. 99 includes all moves in the book move set. Flags are one (or more) members of the following set of characters: {?? ? = ! !! 0 1 2 3 4 5 6 7 8 9 A B C D E F} Normally, ?? means never play, ? means rarely play, = means drawish opening, ! means good move, !! means always play, and 0-F are user flags that a user can add to any move in the book, and by setting the right mask (above) can force the program to either always play the move or never play the move. The special character * means all flags and is probably dangerous to use. Flags are added to a move by entering the move and a / or \ followed by the flags. / means add the flags to the move preserving other flags already there while \ means replace any flags with those following the \. The format of the book text (raw data) is as follows: [title information] (required) 1. e4 e5 2. Nf3 Nc6 3. ... (a sequence of moves) [title information for next line] (required) 1. e4 e6 ... end (optional) clock crafty-time [opponent-time] clock is primarily intended to be used in a computer chess tournament where the games are played on a real chess board using a real chess clock, rather than through some automatic interface that manages the time automatically. crafty-time is the amount of time left on Crafty's clock, expressed in minutes, or in hh:mm format. Crafty will convert this to its internal representation correctly. opponent-time is the amount of time left on the opponent's clock, expressed in the same way. This is option and is not required as Crafty does not use this information during the game although it does keep up with it. After entering this command, you should probably type "clock" to be sure things look correct. Note that the "operator" command sets a time per move overhead for the operator, and that this affects the actual time used as expected. IE in the above clock setting, assuming the operator has allowed 10 seconds per move, crafty will "hide" 35 * 10 seconds and not use it for searching, which gives the operator time to actually make the moves and press the real clock button. It is CRITICAL that the clock command be used from time to time to keep Crafty's internal clock in sync with the real clock. If you use the operator command, the clock value should match the real chess clock exactly, if you choose to not use the operator time and fudge the chess clock time yourself, that will work as well, but it is more prone to errors. display moveinfo -> display move time/results/etc. display pv -> display principal variation. display fail -> display fail high / low moves. display stats -> display search statistics. display moves -> display root moves as they are searched. display info -> display general information messages. display ply1 -> display ply-1 move list/sorting info. display movelist -> display move list after each iteration. For the above options, they can be preceded by a "no" to disable them, or omit the "no" to enable them. "display all" will show all current display settings draw offer|nooffer determines whether Crafty will automatically offer draws when it believes that result is appropriate. draw accept|decline determines whether Crafty will automatically accept draw offers when they are made, or if it will automatically decline them no matter what the current score is. draw dynamic 1|0 enables(disables) dynamic draw score computation based on the rating difference between Crafty and the opponent (usually obtained by the "rating" command from xboard. If set to 0, this is disabled and the default draw score (aka contempt factor) is set to zero (0). list name +name -name ... The lists are as follows: AK Auto-Kibitz list. If crafty plays any opponent named in this list while playing on a chess server, it will kibitz the usual analysis as the game is played. Not advised for human opponents as they do not like the "noise". B Blocker list. If you notice a player repeatedly trying to block the position to get easy draws, put his name in this list. Players in this list get special "anti-human" scoring turned up louder than usual to combat this strategy. C Computer list. This is not needed on ICC as xboard/winboard both tell crafty it is playing a computer opponent. However, if your GUI does not do this, you can put the name of the computer opponents you frequently play in this list and if the GUI sends the "name" command properly, crafty will figure out that it is playing a computer. GM/IM lists are obvious. This identifies players that are strong enough that Crafty should resign or offer draws sooner than normal, rather than hoping for a blunder in lost or drawn positions. SP Special Player list. Names in this list can be used to specify a unique opening book (to replace books.bin, not book.bin) for this particular opponent, as well as specifying a personality file to use rather than the default crafty.cpf. The format of this particular list is: list SP +name [book=filename] [personality=filename] lmp base scale This commands tunes the LMP move count thresholds. The array it produces is indexed by depth, and defines the number of moves at that remaining depth that must be searched before late move pruning can kick in. The basic formula looks like this: moves = base + depth ^ scale Bigger valuse for base and scale make LMP more conservative, smaller values make it more aggressive and risky. lmr min max dscale mscale scale This command tunes the LMR reduction matrix. The values are used to set the reduction matrix, which is indexed by depth remaining and moves searched so far at this ply. This is an array of 32 rows, 64 columns, where the rows correspond to remaining depth and the columns correspond to total moves searched so far at this ply. The basic calculation looks like this: r[depth][moves] = (log(depth) * dscale + log(moves) * mscale) / scale Increasing dscale makes the reduction amount favor depth more, increasing mscale makes the reduction amount favor moves searched more. The "scale" value is used to limit the speed at which the reductions grow. Note that NO reduction can be less than min nor greater than max, from the lmr command. When you use this command, it will display a compressed version of the 32x64 array like this: LMR reductions[depth][moves] ----------------------moves searched----------------- | 2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62 | 3: 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 | 5: 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 d 7: 1 1 2 2 2 3 3 3 3 3 3 3 3 3 4 4 e 9: 1 1 2 2 3 3 3 3 3 3 4 4 4 4 4 4 p 11: 1 2 2 3 3 3 3 3 4 4 4 4 4 4 4 4 t 13: 1 2 2 3 3 3 4 4 4 4 4 4 4 4 4 5 h 15: 1 2 2 3 3 3 4 4 4 4 4 4 5 5 5 5 17: 1 2 3 3 3 4 4 4 4 4 4 5 5 5 5 5 l 19: 1 2 3 3 3 4 4 4 4 4 5 5 5 5 5 5 e 21: 1 2 3 3 4 4 4 4 4 5 5 5 5 5 5 5 f 23: 1 2 3 3 4 4 4 4 5 5 5 5 5 5 5 5 t 25: 1 2 3 3 4 4 4 5 5 5 5 5 5 5 5 6 | 27: 1 2 3 3 4 4 4 5 5 5 5 5 5 6 6 6 | 29: 1 2 3 4 4 4 4 5 5 5 5 5 5 6 6 6 | 31: 1 2 3 4 4 4 5 5 5 5 5 5 6 6 6 6 Notice that the depth (# of rows) only displays every other row to make the display fit on a normal screen. The moves searched show every fourth value since there are 2x as many columns as rows. However, even though you don't see the missing rows/columns, the values are there. This command influences how the book is used. mode normal is the default. mode tournament tells crafty to behave differently while in book. Specifically, when it is pondering, it generates all of the opponent moves and looks them up in the opening book. If it finds a book reply, it eliminates that opponent move from the list. It then does a 1/10th normal time search for the opponent, but ONLY considers those moves it did not have a book reply for. It then takes the result of that search and ponders that move, so that hopefully if the opponent plays a move not in our book, we will already be thinking. The more useful place, however, is where we play a book move that takes the opponent out of book, and he spends a significant amount of time thinking and plays a pretty obvious move. Since we ponder the best move of his that we don't have a book move for, we have a good chance of pondering the right move and saving time on our clock. null [min] [divisor] This command allows you to customize the null-move search parameters. The formula Crafty uses is as follows: R = [min] + depth / [divisor] The default values are 3 and 10. When remaining depth is < 10, the R value is 3. If remaining depth is > 10 and < 19, R=4, and so forth. Smaller divisor values make R ramp up quicker and the null-move pruning will become more aggressive. Overall depth will increase pretty quickly, but this can also hide certain types of tactics as well, so going too far turns out to be dangerous. personality load|save filename -or- personality n v perspath path-to-personality-directory Crafty "personality" files (.cpf files) contain information that affects three components of Crafty. You can use the "selective" command to adjust the null-move R (min and max) values. The default values are 2 and 3, and reducing them will reduce Crafty's playing strength to some fairly significant degree. You can use the "extension" command to adjust the search extension values. Reducing these will "dumb down" the search and make crafty tactically (but not positionally) weaker. They can be set all the way down to 0.00 if you choose. You can use the evaluation command to adjust some global evaluation weights (ie turn down total pawn scoring, or king safety, etc.) or you can use this command to adjust individual scoring values, from the value of pieces, to specific scoring terms for each piece such as the value of a doubled pawn or whatever. Once you find settings you like, you can use "personality save filename" to save all of the above settings in one file. Later you can use "personality load filename" to restore those settings prior to playing a game. One final note is that you can save to the specific file "crafty.cpf" and your settings will become the _default_ each time you start Crafty, until you either remove the file, load another personality, or save a new default personality. You can have as many different personality files as you want, and to keep them from getting jumbled up, you can put them in a separate directory and add the "perspath" to your .craftyrc/crafty.rc file to point Crafty to the directory where the personality files belong. personality item# value [value ... value] The personality command allows you to change specific evaluation or search numbers when you want. The first thing you should do is type "personality list" to show all the possible values. The format looks like this when displayed: White(1): personality list ================================================== = search options = ================================================== 1 check extension 1 2 null-move reduction 3 3 null-move adaptive divisor 10 4 LMR min distance to frontier 1 5 LMR min reduction 1 6 LMR max reduction 7 7 LMR formula depth bias 2.00 8 LMR formula moves searched bias 1.00 9 LMR scale factor 2.65 ================================================== = search options (continued) = ================================================== 11 prune depth 6 12 prune margin [remain_depth] 0 100 100 200 200 300 300 400 ================================================== = raw piece values = ================================================== 21 pawn value -100 (mg) 100 (eg) 22 knight value -325 (mg) 325 (eg) 23 bishop value -325 (mg) 325 (eg) 24 rook value -500 (mg) 500 (eg) 25 queen value -1050 (mg) 1050 (eg) ================================================== = miscellaneous scoring values = ================================================== 31 wtm bonus 5 (mg) 8 (eg) 32 draw score 1 ... etc The first number is the personality term ID #. To change the value of a pawn from the default 100 to 50, you would type the following command: pers 21 50 50 And now pawns are worth 1/2 of what they were prior to the command. Note that unless you specifically save the setting with the "personality save" command, once you exit Crafty the pawn value will return to 100 the next time you start it up. You can, of course, put such commands in the .craftyrc/ crafty.rc file, but it is simpler to use the personality command instead (type "help personality" for more information). Note that some evaluation terms have a list of numbers as they are indexed by something. When you change one of these terms, you must give _exactly_ the correct number of values, or the command will produce an error without changing anything. Some of the values are 8 X 8 matrices of values, where the values correspond to the chess board as viewed with square a1 on the bottom left. You must type the values in in order as they appear on the screen. Crafty will shift things as needed. IE for a piece/square table for knights, the first value displayed is for a8, so the first value you enter must also be for a8. Many of these matrices have black/white counter-parts. You enter the white values, Crafty will mirror those to reflect the _same_ values but from the black side of the board. This will be done automatically. Non 8 X 8 matrices are just dumped in order from element zero to N. You enter those the same way. IE the way it prints them out is the way you enter them, reading from top-to-bottom, and left-to-right. If you come up with an interesting personality, feel free to make it available to everyone, and if it is particularly attractive, it can become part of the "distributed" crafty personalities once this has been released. settc moves crafty-time opponent-time settc is primarily intended to be used in a computer chess tournament where the games are played on a real chess board using a real chess clock, rather than through some automatic interface that manages the time automatically. moves is the number of moves left to the next time control from Crafty's perspective. IE if the time control is 60 moves in 120 minutes (a normal time control for the WCCC) and crafty has actually made 25 moves in the current game, then the correct "moves" value would be 35, as there are exactly 35 moves to be made before the next time control is reached. crafty-time is the amount of time left on Crafty's clock, expressed in minutes, or in hh:mm format. Crafty will convert this to its internal representation correctly. opponent-time is the amount of time left on the opponent's clock, expressed in the same way. After entering this command, you should probably type "clock" to be sure things look correct. Note that the "operator" command sets a time per move overhead for the operator, and that this affects the actual time used as expected. IE in the above clock setting, assuming the operator has allowed 10 seconds per move, crafty will "hide" 35 * 10 seconds and not use it for searching, which gives the operator time to actually make the moves and press the real clock button. It is CRITICAL that the clock command be used from time to time to keep Crafty's internal clock in sync with the real clock. If you use the operator command, the settc value should match the real chess clock exactly, if you choose to not use the operator time and fudge the chess clock time yourself, that will work as well, but it is more prone to errors. smp commands are used to control the SMP search. smpaffinity [n] [p] is used to enable or disable processor affinity. "-1" disables affinity and lets threads run on any available core. If you use an integer [n] then thread zero will bind itself to cpu [n] and each additional thread will bind to the next higher cpu number. This is useful if you try to run two copies of crafty on the same machine, now you can cause one to bind to the first [n] cores, and the second to the last [n] cores. For the first instance of Crafty, you would use smpaffinity=0, and for the second smpaffinity=8, assuming you are running 8 threads per copy on a 16 cpu machine. If you get this wrong, you can have more than one thread on the same cpu which will significantly impact performance. The second parameter is used to help Crafty identify physical vs logical cores. On a typical 20 core intel machine, processors 0 - 19 are on physical cores, then 20-39 map back to those same physical cores, but different logical (hyperthreaded) processors. "1" is the correct value for this system. For an IBM Power 8 machine with dual 10-core chips, processors 0 through 7 are on physical core 0, then 8 through 15 are on physical core 1, etc. A value of "8" will map threads to physical cores correctly as each thread is spaced on the current processor core + 8, which is correct. smpmt [n] sets the total number of allowable threads for the search. The default is one (1) as Crafty does not assume it should use all available resources. For optimal performance this should be set to the number of physical cores your machine has, which does NOT include hyperthreaded cores. smpgroup [n] sets the maximum number of threads at any single split point to [n], with the exception of split points fairly close to the root where ALL threads are allowed to split together ignoring this limit. Note that this is ignored in the first 1/2 of the tree (the nodes closer to the root). There it is actually good to split and get all active threads involved. smpmin [n] avoids splitting when remaining depth < n. This is used to balance splitting overhead cost against the speed gain the parallel search produces. The default is currently 5 (which could change with future generations of Intel hardware) but values between 4 and 8 will work. Larger values allow somewhat fewer splits, which reduces overhead, but it also increases the percentage of the time where a thread is waiting on work. smpnuma [n] enables (a) or disables (0) NUMA mode. This defaults to zero, which is best for most users. If you have a multiple-socket machine, or one that is NUMA even though it only has one socket, you should enable this. This will cause Crafty to split the hash tables across all NUMA nodes to prevent the formation of "hot spots" that would cause unnecessary conflicts. smproot [n] enables (1) or disables (0) splitting the tree at the root. This defaults to 1 which produces the best performance by a signficiant margin. But it can be disabled if you are playing with code changes. smpnice [1|0] enables or disables the "nice facility". With smpnice=1, at the end of a search (non-pondering) the extra threads will terminate rather than sit in a busy spin loop burning cpu cycles. smpnice=0 is slightly more efficient but will result in 100% of the machine being used whether the search is running or waiting on input. smpnodes [n] sets the number of NUMA nodes on your hardware. This is used to try to split with threads on the same node when practical, to improve memory access time. smpgsd sets the minimum depth required to allow a gratuitous split. A gratuitous split is a split done when no threads are idle, and is a sort of preemptive attempt to have work ready for processors as they become idle. If this value is set too small, overhead will climb, if it is set too large, then gratuitous splits will be rare and thread wait time will climb. smpgsl sets the maximum number of gratuitous splits allowed per thread. There is little point in having many split points that are not really being used, it adds to overhead without any real benefit. If you are running on 32 cores, then setting this beyond 4 will really be massive overkill since any of the 32 threads will be able to spontaneously split up to N times each, for a total of 32 * N gratuitous splits. That's probably excessive. test filename [N] [unsolved_file] Test is used to run a suite of test positions in a batch run. filename is the name of the file in crafty test format. [N] is an optional parameter that is used to shorten the test time. If crafty likes the solution move for [N] consecutive iterations, it will stop searching that position and consider it correct. This makes a Win At Chess 60 second run take just a few minutes, for example. The "crafty format" requires three lines per position. The first line must be a "title" line and is used to identify each position. The second line is a "setboard" command to set the position. The third line is a line that begins with "solution", and then is followed by one or more solution moves. If a position is correct only if a particular move or moves is *not* played, enter the move followed by a "?", as in Nf3?, which means that this position will be counted as correct only if Nf3 is not played. Note that this command may refer to a normal EPD test file as well and Crafty will run that test in the same way, but Crafty will notice it is an EPD test file rather than a "crafty" test file and handle it appropriately. A new option to this command is of the form "test filename [margin]" where [margin] is greater than 10 (which means it will not be an early exit counter.) In this case, Crafty takes that value as a score margin. It will read in the FEN/EPD records silently, do a search, and if the absolute value of the final score is less than [margin], the FEN/EPD is written to a new file, "filename.screened". I use this to create an opening position file for cluster testing where I can create a set of positions using the -DPOSITIONS compile option, and then test the resulting "openings.epd" file that creates to cull those that are too unbalanced so that the same side wins no matter what the skill level. The [unsolved_file] parameter is optional. If specified, any position that is not solved is written to this file so that you can extract "hard" positions and use just those for testing later to save time. At one second per move on a slow machine, the WAC test positions (300) will produce maybe 15 unsolved positions. On good hardware, it might miss five or less. At 5 seconds per move, it will usually miss maybe 2-3. At 60 seconds per move, it will generally only miss #230 which appears to have no solution after much computer analysis (the supposed winning move also draws).