diff options
| author | John Wiegley <johnw@newartisans.com> | 2008-08-29 02:42:58 -0400 |
|---|---|---|
| committer | John Wiegley <johnw@newartisans.com> | 2008-08-29 02:42:58 -0400 |
| commit | 7e5230b8ffe32cfe7c1ec31d37c40684893aa787 (patch) | |
| tree | 182101ebdd0429321339ca54a49aae0f559a5fe2 /EPD.txt | |
| parent | 9cd4c61d4ddbe87f461e402c754ea37782674bfd (diff) | |
Changed to using an autoconf/automake setup for building. This precipitated
many changes to the code, including:
- documentation has been moved into doc/
- the chess-eco opening moves are pre-generated from chess-eco.ps into
chess-eco.fen, so users don't have to wait around for it to build
- no longer using lispdoc to auto-gen function stubs in chess.texi,
this means that chess-maint.el and lispdoc.el are gone
Diffstat (limited to 'EPD.txt')
| -rw-r--r-- | EPD.txt | 1317 |
1 files changed, 0 insertions, 1317 deletions
diff --git a/EPD.txt b/EPD.txt deleted file mode 100644 index 906826c..0000000 --- a/EPD.txt +++ /dev/null @@ -1,1317 +0,0 @@ -EPD_Spec: Extended Position Description Specification - -Revised: 1995.11.26 - -Technical contact: sje@mv.mv.com (Steven J. Edwards) - -1: Introduction - -EPD is "Extended Position Description". It is a standard for describing -chess positions along with an extended set of structured attribute -values using the ASCII character set. It is intended for data and -command interchange among chessplaying programs. It is also intended -for the representation of portable opening library repositories and for -problem test suites. - -EPD is an open standard and is freely available for use by both research -and commercial programs without charge. The only requirement for use is -that any proposed extensions be coordinated through the technical -contact given at the start of this document. - -A single EPD record uses one text line of variable length composed of -four data fields followed by zero or more operations. A text file -composed exclusively of EPD data records should have a file name with -the suffix ".epd". - -2: History - -EPD was created in 1993 and is based in part on the earlier FEN standard -(Forsyth-Edwards Notation) for representing chess positions. Compared -to FEN, EPD has added extensions for use with opening library -preparation and also for general data and command interchange among -advanced chess programs. EPD was developed by John Stanback and Steven -Edwards; its first implementation was in Stanback's commercial -chessplaying program Zarkov and its second implementation was in -Edwards' research chessplaying program Spector. So many programs have -since adopted EPD that no one knows the exact sequence thereafter. - -EPD is employed for storing test suites for chessplaying programs and -for recording the results of programs running these test suites. -Example test suites are available for researchers via anonymous ftp from -the chess.onenet.net site in the pub/chess/Tests directory. The ASCII -text file pub/chess/Tests/Manifest gives descriptions of the contents of -the various test suite files. - -EPD is used to provide a linkage mechanism between chessplaying programs -and position database programs to support the automated direction of -analysis generation. - -3: EPD tools and applications - -To encourage development of EPD capable applications, a free EPD tool -kit is available for program authors working with the ANSI C language. -To further encourage usage of EPD, a number of free applications are -also available. - -3.1: The EPD Kit - -Work is currently in progress on developing an EPD Kit. This tool kit -is a collection of portable ANSI C source code files that provide -routines to create and manipulate EPD data for arbitrarily complex -records. It is designed to handle all common EPD related tasks so as to -assist chess program developers with EPD implementation. A secondary -goal is to ensure that every implementation of EPD processing have the -same set of operational semantics. - -The EPD Kit will be made freely available to all chess software authors -without charge and can be used in both research and commercial -applications. As with EPD itself, the only requirement for use is that -any proposed extensions be coordinated through the technical contact -given at the start of this document. - -3.2: Argus, the automated tournament referee - -Work is currently in progress on developing Argus, an automated -tournament referee program for computer chess events. Argus uses IP -(Internet Protocol) communications to act as a mediator for multiple -pairs of chessplaying programs and to provide an interactive interface -for a human tournament supervisor. Argus uses the EPD Kit along with -other routines to perform the following tasks: - -1) Starting chessplaying programs (IP clients) with proper -initialization data; - -2) Relaying position/move data (using EPD) from each program to its -opponent; - -3) Providing all chess clock data as part of the relay process; - -4) Record all games using PGN (Portable Game Notation) to assist in the -production of the tournament final report; - -5) Record all moves and other transmitted data in log files for later -analysis; - -6) Detect and report time forfeit conditions; - -7) Mediate draw offers and responses between each pair of opponents; - -8) Recognize and handle game termination conditions due to draws, -resignations, time forfeits, and checkmates; - -9) Allow for chessplaying program restart and game resumption as -directed by the human supervisor; - -10) Allow for a second instance of itself to operate in observer mode to -be ready to take over in case of primary machine failure; - -11) Support display of games in progress for the benefit of the human -supervisor and for the general viewing audience. - -In its usual configuration, Argus runs on an IP network that connects it -with all of the participating machines. It acts like a Unix style -server using TCP/IP; the chessplaying programs connect to Argus as -TCP/IP clients. Unlike a typical Unix style server, it runs in the -foreground instead of the background when operated by a human -supervisor. - -One variant mode of operation allows for Argus to be started by the host -system and run in the background. This use is intended for events where -human supervision is not required. Any operating information usually -provided manually may instead be supplied by configuration files. - -Another variant mode of operation allows for Argus to mediate -communication between a single pair of chessplaying programs using -regular (unstructured) bidirectional asynchronous serial communication -instead of IP. While less reliable than IP operation, unstructured -serial communication can be used on common inexpensive hardware -platforms that lack IP support. An example would be to use common PC -machines with each chessplaying program running on a separate machine -and a third machine running Argus in serial mode. Each of the two -machines with chessplaying programs connect to the Argus machine via a -null modem cable. Note that the Argus machine needs two free serial -ports while each of the chessplaying machines needs only a single free -serial port. -The Argus program will be made freely available to all chess software -authors without charge and can be used in both research and commercial -applications. As with EPD itself, the only requirement for use is that -any proposed extensions be coordinated through the technical contact -given at the start of this document. - -3.3: Gastric, an EPD based report generator - -Work is in progress on Gastric, an application that reads EPD files and -produces statistical reports. The main use of Gastric is to assist in -the process of benchmarking chessplaying program performance on EPD test -suites. The resulting reports contain summaries of raw performance, -identification of solved/missed problems, distribution information for -node count, time consumption, and other items. Advanced functions of -Gastric may be used to produce comparative analysis of different -programs or different versions of the same program. Some work is also -planned to allow Gastric output to be used as feedback into -self-adjusting chessplaying programs. - -The Gastric program will be made freely available to all chess software -authors without charge and can be used in both research and commercial -applications. As with EPD itself, the only requirement for use is that -any proposed extensions be coordinated through the technical contact -given at the start of this document. - -4: The four EPD data fields - -Each EPD record contains four data filed that describe the current -position. From left to right starting at the beginning of the record, -these are the piece placement, the active color, the castling -availability, and the en passant target square of a position. These can -all fit on a single text line in an easily read format. The length of -an EPD position description varies somewhat according to the position -and any associated operations. In some cases, the description could be -eighty or more characters in length and so may not fit conveniently on -some displays. However, most EPD records pass among programs only and -so are not usually seen by program users. - -Note: due to the likelihood of future expansion of EPD, implementors are -encouraged to have their programs handle EPD text lines of up to 4096 -characters long including the traditional ASCII NUL character as a -terminator. This is an increase from the earlier suggestion of a -maximum length of 1024 characters. Depending on the host operating -system, the external representation of EPD records will include one or -more bytes to indicate the end of a line. These do not count against -the length limit as the internal representation of an EPD text record is -stripped of end of line bytes and instead is terminated by the -traditional ASCII NUL character. - -Each of the four EPD data fields are composed only of non-blank printing -ASCII characters. Adjacent data fields are separated by a single ASCII -space character. - -4.1: Piece placement data - -The first field represents the placement of the pieces on the board. -The board contents are specified starting with the eighth rank and -ending with the first rank. For each rank, the squares are specified -from file a to file h. White pieces are identified by uppercase SAN -(Standard Algebraic Notation) piece letters ("PNBRQK") and black pieces -are identified by lowercase SAN piece letters ("pnbrqk"). Empty squares -are represented by the digits one through eight; the digit used -represents the count of contiguous empty squares along a rank. The -contents of all eight squares on each rank must be specified; therefore, -the count of piece letters plus the sum of the vacant square counts must -always equal eight. The solidus character "/" (forward slash) is used -to separate data of adjacent ranks. There is no leading or trailing -solidus in the piece placement data; hence there are exactly seven of -solidus characters in the placement field. - -The piece placement data for the starting array is: - -rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR - -4.2: Active color - -The second field represents the active color. A lower case "w" is used -if White is to move; a lower case "b" is used if Black is the active -player. - -The piece placement and active color data for the starting array is: - -rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w - -4.3: Castling availability - -The third field represents castling availability. This indicates -potential future castling that may or may not be possible at the moment -due to blocking pieces or enemy attacks. If there is no castling -availability for either side, the single character symbol "-" is used. -Otherwise, a combination of from one to four characters are present. If -White has kingside castling availability, the uppercase letter "K" -appears. If White has queenside castling availability, the uppercase -letter "Q" appears. If Black has kingside castling availability, the -lowercase letter "k" appears. If Black has queenside castling -availability, then the lowercase letter "q" appears. Those letters -which appear will be ordered first uppercase before lowercase and second -kingside before queenside. There is no white space between the letters. - -The piece placement, active color, and castling availability data for -the starting array is: - -rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - -4.4: En passant target square - -The fourth field is the en passant target square. If there is no en -passant target square then the single character symbol "-" appears. If -there is an en passant target square then is represented by a lowercase -file character (one of "abcdefgh") immediately followed by a rank digit. -Obviously, the rank digit will be "3" following a white pawn double -advance (Black is the active color) or else be the digit "6" after a -black pawn double advance (White being the active color). - -An en passant target square is given if and only if the last move was a -pawn advance of two squares. Therefore, an en passant target square -field may have a square name even if there is no pawn of the opposing -side that may immediately execute the en passant capture. - -The piece placement, active color, castling availability, and en passant -target square data for the starting array is: - -rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - - -5: Operations - -An EPD operation is composed of an opcode followed by zero or more -operands and is concluded by a semicolon. - -Multiple operations are separated by a single space character. If there -is at least one operation present in an EPD line, it is separated from -the last (fourth) data field by a single space character. - -5.1: General format of opcodes and operands - -An opcode is an identifier that starts with a letter character and may -be followed by up to fourteen more characters. Each additional -character may be a letter or a digit or the underscore character. -Traditionally, no uppercase letters are used in opcode names that are to -be used by more than one program. - -An operand is either a set of contiguous non-white space printing -characters or a string. A string is a set of contiguous printing -characters delimited by a quote (ASCII code: 34 decimal, 0x22 -hexadecimal) character at each end. A string value must have less than -256 bytes of data. This count does not include the traditional ASCII -NUL character terminator. - -If at least one operand is present in an operation, there is a single -space between the opcode and the first operand. If more than one -operand is present in an operation, there is a single blank character -between every two adjacent operands. If there are no operands, a -semicolon character is appended to the opcode to mark the end of the -operation. If any operands appear, the last operand has an appended -semicolon that marks the end of the operation. - -Any given opcode appears at most once per EPD record. Multiple -operations in a single EPD record should appear in ASCII order of their -opcode names (mnemonics). However, a program reading EPD records may -allow for operations not in ASCII order by opcode mnemonics; the -semantics are the same in either case. - -Some opcodes that allow for more than one operand may have special -ordering requirements for the operands. For example, the "pv" -(predicted variation) opcode requires its operands (moves) to appear in -the order in which they would be played. Most other opcodes that allow -for more than one operand should have operands appearing in ASCII order. -An example of the latter set is the "bm" (best move[s]) opcode; its -operands are moves that are all immediately playable from the current -position. - -5.2: Operand basetypes - -Operand values are represented using a variety of basetypes. - -5.2.1: Identifier basetype - -Some opcodes require one of more operands that are identifiers. An -identifier is an unquoted sequence of one to fifteen characters. The -characters are selected from the upper and lower case letters, the ten -digits, and the underscore character. Most identifiers that may appear -in EPD are taken from predefined sets as explained in the sections -covering opcode semantics. - -Identifiers are most often used to select one value from a list of -possible values for a general attribute. They are also used to -represent PGN tag attributes. - -5.2.2: Chess move basetype - -Some opcodes require one or more operands that are chess moves. These -moves should be represented using SAN (Standard Algebraic Notation). If -a different representation is used, there is no guarantee that the EPD -will be read correctly during subsequent processing. In particular, EDN -(English Descriptive Notation), CCN (Computer Coordinate Notation), and -LAN (Long Algebraic Notation) are explicitly not supported. - -Chess moves are used most often in single operand operations to select -one move from the available moves. They are also used in multiple -operand operations to define a set of moves (all taken from available -moves) and in multiple operand operations to express a sequence of moves -(taken from moves available at each point in a forward sequence of -play). - -Note that some chess moves also qualify as identifiers. However, the -semantics of a particular opcode dictate the exact basetype -interpretation of its operands, so there is no ambiguity. - -5.2.3: Integer basetype - -Some opcodes require one or more operands that are integers. Some -opcodes may require that an integer operand must be within a given -range; the details are described in the opcode list given below. A -negative integer is formed with a hyphen (minus sign) preceding the -integer digit sequence. An optional plus sign may be used for -indicating a non-negative value, but such use is not required and is -discouraged. Support for integers in the range -2147483648 to -2147483647 (32 bit two's complement signed extrema) is required. - -Integers are used to represent centipawn scores and also for various -counts, limits, and totals. - -5.2.4: Floating basetype - -Some opcodes require one or more operands that are floating point -numbers. Some opcodes may require that a floating point operand must be -within a given range; the details are described in the opcode list given -below. A floating point operand is constructed from an optional sign -character ("+" or "-"), a digit sequence (with at least one digit), a -radix point (always "."), and a final digit sequence (with at least one -digit). There is currently no provision for scientific representation -of numeric values. - -The floating basetype in not in current use. - -5.2.5: Date basetype - -Some opcodes require one or more operands that represent dates. These -are given in a special date format composed of ten characters. The -first four characters are digits that give the year (0001-9999), the -fifth character is a period, the sixth and seventh characters are digits -that give the month number (01-12), the eighth character is a period, -and the ninth and tenth characters are digits that give the day number -in the month (01-31). - -The date basetype is used to specify date values in timestamps. - -5.2.6: Time of day basetype - -Some opcodes require one or more operands that represent a time of day. -These are given in a special time of day format composed of eight -characters. The first two characters are digits that give the hour -(00-23), the third character is a colon, the fourth and fifth characters -are digits that give the minute (00-59), the sixth character is a colon, -and the seventh and eighth characters are digits that give the second -(00-59). - -The time of day basetype is used to specify time of day values in -timestamps. - -5.2.7: Clock basetype - -Some opcodes require one or more operands that represent a total amount -of time as would be measured by a traditional digital clock. These are -given in a special clock format composed of 12 characters. The first -three characters are digits giving a count of days (000-999), the fourth -character is a colon, the fifth and sixth characters are digits giving a -count of hours (00-23), the seventh character is a colon, the eighth and -ninth characters are digits giving a count of minutes (00-59), the tenth -character is a colon, and the eleventh and twelfth characters are digits -giving a count of seconds (00-59). - -The clock basetype is used to specify clock values for chess clock -information. It is not used to measure time consumption for a search; -an integer count of seconds is used instead. - -5.3: Opcode mnemonics - -An opcode mnemonic used for archival storage and for interprogram -communication starts with a lower case letter and is composed of only -lower case letters, digits, and the underscore character (i.e., no upper -case letters). Mnemonics are all at least two characters long. - -Opcode mnemonics used only by a single program or an experimental suite -of programs should start with an upper case letter. This is so they may -be easily distinguished should they be inadvertently be encountered by -other programs. When a such a "private" opcode be demonstrated to be -widely useful, it should be brought into the official list (appearing -below) in a lower case form. - -If a given program does not recognize a particular opcode, that -operation is simply ignored; it is not signaled as an error. - -6: Opcode list - -The opcodes are listed here in ASCII order of their mnemonics. -Suggestions for new opcodes should be sent to the technical contact -listed near the start of this document. - -6.1: Opcode "acn": analysis count: nodes - -The opcode "acn" takes a single non-negative integer operand. It is -used to represent the number of nodes examined in an analysis or search. -Note that the value may be quite large for some extended searches and so -use of a long (four byte) representation is suggested. - -6.2: Opcode "acs": analysis count: seconds - -The opcode "acs" takes a single non-negative integer operand. It is -used to represent the number of seconds used for an analysis or search. -Note that the value may be quite large for some extended searches and so -use of a long (four byte) representation is suggested. Also note that -the special clock format is not used for this operand. Some systems can -distinguish between elapsed time and processor time; in such cases, the -processor time should be used as its value is usually more indicative of -search effort than wall clock time. - -6.3: Opcode "am": avoid move(s) - -The opcode "am" indicates a set of zero or more moves, all immediately -playable from the current position, that are to be avoided as a search -result. Each operand is a SAN move; they appear in ASCII order. - -6.4: Opcode "bm": best move(s) - -The opcode "bm" indicates a set of zero or more moves, all immediately -playable from the current position, that are judged to the best -available by the EPD writer and so each is allowable as a search result. -Each operand is a SAN move; they appear in ASCII order. - -6.5: Opcode "c0": comment (primary, also "c1" though "c9") - -The opcode "c0" (lower case letter "c", digit character zero) indicates -a top level comment that applies to the given position. It is the first -of ten ranked comments, each of which has a mnemonic formed from the -lower case letter "c" followed by a single decimal digit. Each of these -opcodes takes either a single string operand or no operand at all. - -This ten member comment family of opcodes is intended for use as -descriptive commentary for a complete game or game fragment. The usual -processing of these opcodes are as follows: - -1) At the beginning of a game (or game fragment), a move sequence -scanning program initializes each element of its set of ten comment -string registers to be null. - -2) As the EPD record for each position in the game is processed, the -comment operations are interpreted from left to right. (Actually, all -operations in an EPD record are interpreted from left to right.) -Because operations appear in ASCII order according to their opcode -mnemonics, opcode "c0" (if present) will be handled prior to all other -opcodes, then opcode "c1" (if present), and so forth until opcode "c9" -(if present). - -3) The processing of opcode "cN" (0 <= N <= 9) involves two steps. -First, all comment string registers with an index equal to or greater -than N are set to null. (This is the set "cN" though "c9".) Second, -and only if a string operand is present, the value of the corresponding -comment string register is set equal to the string operand. - -6.6: Opcode "cc": chess clock values - -The opcode "cc" is used to indicate the amount of time used for each -side at the time of the writing of the opcode to the EPD record. This -opcode always takes two values. Both values are in clock format. The -first is the amount of time consumed by White and the second is the -amount of time consumed by Black. Note that these values are not simple -integers. Also, there is no provision for recording at a resolution of -less than one second. - -This opcode is most commonly used by a mediation program as a source of -impartial time information for a pair of opposing players. - -6.7: Opcode "ce": centipawn evaluation - -The opcode "ce" indicates the evaluation of the indicated position in -centipawn units. It takes a single operand, an optionally signed -integer that gives an evaluation of the position from the viewpoint of -the active player; i.e., the player with the move. Positive values -indicate a position favorable to the moving player while negative values -indicate a position favorable to the passive player; i.e., the player -without the move. A centipawn evaluation value close to zero indicates -a neutral positional evaluation. - -Values are restricted to integers that are equal to or greater than --32768 and -are less than or equal to 32766. - -A value greater than 32000 indicates the availability of a forced mate -to the active player. The number of plies until mate is given by -subtracting the evaluation from the value 32767. Thus, a winning mate -in N fullmoves is a mate in ((2 * N) - 1) halfmoves (or ply) and has a -corresponding centipawn evaluation of (32767 - ((2 * N) - 1)). For -example, a mate on the move (mate in one) has a centipawn evaluation of -32766 while a mate in five has a centipawn evaluation of 32758. - -A value less than -32000 indicates the availability of a forced mate to -the passive player. The number of plies until mate is given by -subtracting the evaluation from the value -32767 and then negating the -result. Thus, a losing mate in N fullmoves is a mate in (2 * N) -halfmoves (or ply) and has a corresponding centipawn evaluation of -(-32767 + (2 * N)). For example, a mate after the move (losing mate in -one) has a centipawn evaluation of -32765 while a losing mate in five -has a centipawn evaluation of -32757. - -A value of -32767 indicates that the side to move is checkmated. A -value of -32768 indicates an illegal position. A stalemate position has -a centipawn evaluation of zero as does a position drawn due to -insufficient mating material. Any other position known to be a certain -forced draw also has a centipawn evaluation of zero. - -6.8: Opcode "dm": direct mate fullmove count - -The "dm" opcode is used to indicate the number of fullmoves until -checkmate is to be delivered by the active color for the indicated -position. It always takes a single operand which is a positive integer -giving the fullmove count. For example, a position known to be a "mate -in three" would have an operation of "dm 3;" to indicate this. - -This opcode is intended for use with problem sets composed of positions -requiring direct mate answers as solutions. - -6.9: Opcode "draw_accept": accept a draw offer - -The opcode "draw_accept" is used to indicate that a draw offer made -after the move that lead to the indicated position is accepted by the -active player. This opcode takes no operands. - -The "draw_accept" opcode should not appear on the same EPD record as a -"draw_reject" opcode. - -6.10: Opcode "draw_claim": claim a draw - -The opcode "draw_claim" is used to indicate claim by the active player -that a draw exists. The draw is claimed because of a third time -repetition or because of the fifty move rule or because of insufficient -mating material. A supplied move (see the opcode "sm") is also required -to appear as part of the same EPD record. The "draw_claim" opcode takes -no operands. - -The "draw_claim" opcode should not appear on the same EPD record as a -"draw_offer" opcode. - -6.11: Opcode "draw_offer": offer a draw - -The opcode "draw_offer" is used to indicate that a draw is offered by -the active player. A supplied move (see the opcode "sm") is also -required to appear as part of the same EPD record; this move is -considered played from the indicated position. The "draw_offer" opcode -takes no operands. - -The "draw_offer" opcode should not appear on the same EPD record as a -"draw_claim" opcode. - -6.12: Opcode "draw_reject": reject a draw offer - -The opcode "draw_reject" is used to indicate that a draw offer made -after the move that lead to the indicated position is rejected by the -active player. This opcode takes no operands. - -The "draw_reject" opcode should not appear on the same EPD record as a -"draw_accept" opcode. - -6.13: Opcode "eco": _Encyclopedia of Chess Openings_ opening code - -The opcode "eco" is used to associate an opening designation from the -_Encyclopedia of Chess Openings_ taxonomy with the indicated position. -The opcode takes either a single string operand (the ECO opening name) -or no operand at all. If an operand is present, its value is associated -with an "ECO" string register of the scanning program. If there is no -operand, the ECO string register of the scanning program is set to null. - -The usage is similar to that of the "ECO" tag pair of the PGN standard. - -6.14: Opcode "fmvn": fullmove number - -The opcode "fmvn" represents the fullmove number associated with the -position. It always takes a single operand that is the positive integer -value of the move number. The value of the fullmove number for the -starting array is one. - -This opcode is used to explicitly represent the fullmove number in EPD -that is present by default in FEN as the sixth field. Fullmove number -information is usually omitted from EPD because it does not affect move -generation (commonly needed for EPD-using tasks) but it does affect game -notation (commonly needed for FEN-using tasks). Because of the desire -for space optimization for large EPD files, fullmove numbers were -dropped from EPD's parent FEN. The halfmove clock information was -similarly dropped. - -6.15: Opcode "hmvc": halfmove clock - -The opcode "hmvc" represents the halfmove clock associated with the -position. The halfmove clock of a position is equal to the number of -plies since the last pawn move or capture. This information is used to -implement the fifty move draw rule. It always takes a single operand -that is the non-negative integer value of the halfmove clock. The value -of the halfmove clock for the starting array is zero. - -This opcode is used to explicitly represent the halfmove clock in EPD -that is present by default in FEN as the fifth field. Halfmove clock -information is usually omitted from EPD because it does not affect move -generation (commonly needed for EPD-using tasks) but it does affect game -termination issues (commonly needed for FEN-using tasks). Because of -the desire for space optimization for large EPD files, halfmove clock -values were dropped from EPD's parent FEN. The fullmove number -information was similarly dropped. - -6.16: Opcode "id": position identification - -The opcode "id" is used to provide a simple identification label for the -indicated position. It takes a single string operand. - -This opcode is intended for use with test suites used for measuring -chessplaying program strength. An example "id" operand for the seven -hundred fifty seventh position of the one thousand one problems in -Reinfeld's _1001 Winning Chess Sacrifices and Combinations_ would be -"WCSAC.0757" while the fifteenth position in the twenty four problem -Bratko-Kopec test suite would have an "id" operand of "BK.15". - -6.17: Opcode "nic": _New In Chess_ opening code - -The opcode "nic" is used to associate an opening designation from the -_New In Chess_ taxonomy with the indicated position. The opcode takes -either a single string operand (the NIC code for the opening) or no -operand at all. If an operand is present, its value is associated with -an "NIC" string register of the scanning program. If there is no -operand, the NIC string register of the scanning program is set to null. - -The usage is similar to that of the "NIC" tag pair of the PGN standard. - -6.18: Opcode "noop": no operation - -The "noop" opcode is used to indicate no operation. It takes zero or -more operands, each of which may be of any type. The operation involves -no processing. It is intended for use by developers for program testing -purposes. - -6.19: Opcode "pm": predicted move - -The "pm" opcode is used to provide a single predicted move for the -indicated position. It has exactly one operand, a move playable from -the position. This move is judged by the EPD writer to represent the -best move available to the active player. - -If a non-empty "pv" (predicted variation) line of play is also present -in the same EPD record, the first move of the predicted variation is the -same as the predicted move. - -The "pm" opcode is intended for use as a general "display hint" -mechanism. - -6.20: Opcode "ptp": PGN tag pair - -The "ptp" opcode is used to record a PGN tag pair. It always takes an -even number of operands. For each pair of operands (from left to -right), the first operand in the pair is always an identifier and is -interpreted as the name of a PGN tag; the second operand in the pair is -always a string and is the value associated with the tag given by the -first operand. - -Any given PGN tag name should only appear once as a tag identifier -operand in a "ptp" operation. - -6.21: Opcode "pv": predicted variation - -The "pv" opcode is used to provide a predicted variation for the -indicated position. It has zero or more operands which represent a -sequence of moves playable from the position. This sequence is judged -by the EPD writer to represent the best play available. - -If a "pm" (predicted move) operation is also present in the same EPD -record, the predicted move is the same as the first move of the -predicted variation. - -6.22: Opcode "rc": repetition count - -The "rc" opcode is used to indicate the number of occurrences of the -indicated position. It takes a single, positive integer operand. Any -position, including the initial starting position, is considered to have -an "rc" value of at least one. A value of three indicates a candidate -for a draw claim by the position repetition rule. - -6.23: Opcode "refcom": referee command - -The "refcom" opcode is used to represent a command from a referee -program to a client program during automated competition. It takes a -single identifier operand which is to be interpreted as a command by the -receiving program. Note that as the operand is an identifier and not a -string value, it is not enclosed in quote characters. - -There are seven available operand values: conclude, disconnect, execute, -fault, inform, reset, and respond. - -Further details of "refcom" usage are given in the section on referee -semantics later in this document. - -6.24: Opcode "refreq": referee request - -The "refreq" opcode is used to represent a request from a client program -to the referee program during automated competition. It takes a single -identifier operand which is to be interpreted as a request to the -referee from a client program. Note that as the operand is an -identifier and not a string value, it is not enclosed in quote -characters. - -There are four available operand values: fault, reply, sign_off, and -sign_on. - -Further details of "refreq" usage are given in the section on referee -semantics later in this document. - -6.25: Opcode "resign": game resignation - -The opcode "resign" is used to indicate that the active player has -resigned the game. This opcode takes no operands. - -The "resign" opcode should not appear on the same EPD record with any of -the following opcodes: "draw_accept", "draw_claim", "draw_decline', and -"draw_offer". - -6.26: Opcode "sm": supplied move - -The "sm" opcode is used to provide a single supplied move for the -indicated position. It has exactly one operand, a move playable from -the position. This move is the move to be played from the position. - -If a "sv" (supplied variation) operation is present on the same record -and has at least one operand, then its first operand must match the -single operand of the "sm" opcode. - -The "sm" opcode is intended for use to communicate the most recent -played move in an active game. It is used to communicate moves between -programs in automatic play via a network. This includes correspondence -play using e-mail and also programs acting as network front ends to -human players. - -6.27: Opcode "sv": supplied variation - -The "sv" opcode is used to provide zero or more supplied moves for the -indicated position. The operands are a move sequence playable from the -position. - -If an "sm" (supplied move) operation is also present on the same record -and the "sv" operation has at least one operand, then the "sm" operand -must match the first operand of the "sv" operation. - -6.28: Opcode "tcgs": telecommunication: game selector - -The "tcgs" opcode is one of the telecommunication family of opcodes used -for games conducted via e-mail and similar means. This opcode takes a -single operand that is a positive integer. It is used to select among -various games in progress between the same sender and receiver. - -Details of e-mail implementation await further development. - -6.29: Opcode "tcri": telecommunication: receiver identification - -The "tcri" opcode is one of the telecommunication family of opcodes used -for games conducted via e-mail and similar means. This opcode takes two -order dependent string operands. The first operand is the e-mail -address of the receiver of the EPD record. The second operand is the -name of the player (program or human) at the address who is the actual -receiver of the EPD record. - -Details of e-mail implementation await further development. - -6.30: Opcode "tcsi": telecommunication: sender identification - -The "tcsi" opcode is one of the telecommunication family of opcodes used -for games conducted via e-mail and similar means. This opcode takes two -order dependent string operands. The first operand is the e-mail -address of the sender of the EPD record. The second operand is the name -of the player (program or human) at the address who is the actual sender -of the EPD record. - -Details of e-mail implementation await further development. - -6.31: Opcode "ts": timestamp - -The "ts" opcode is used to record a timestamp value. It takes two -operands. The first operand is in date format and the second operand is -in time of day format. The interpretation of the combined operand values -gives the time of the last modification of the EPD record. The -timestamp is interpreted to be in UTC (Universal Coordinated Time, -formerly known as GMT). - -6.32: Opcode "v0": variation name (primary, also "v1" though "v9") - -The opcode "v0" (lower case letter "v", digit character zero) indicates -a top level variation name that applies to the given position. It is -the first of ten ranked variation names, each of which has a mnemonic -formed from the lower case letter "v" followed by a single decimal -digit. Each of these opcodes takes either a single string operand or no -operand at all. - -This ten member variation name family of opcodes is intended for use as -traditional variation names for a complete game or game fragment. The -usual processing of these opcodes are as follows: - -1) At the beginning of a game (or game fragment), a move sequence -scanning program initializes each element of its set of ten variation -name string registers to be null. - -2) As the EPD record for each position in the game is processed, the -variation name operations are interpreted from left to right. -(Actually, all operations in an EPD record are interpreted from left to -right.) Because operations appear in ASCII order according to their -opcode mnemonics, opcode "v0" (if present) will be handled prior to all -other opcodes, then opcode "v1" (if present), and so forth until opcode -"v9" (if present). - -3) The processing of opcode "vN" (0 <= N <= 9) involves two steps. -First, all variation name string registers with an index equal to or -greater than N are set to null. (This is the set "vN" though "v9".) -Second, and only if a string operand is present, the value of the -corresponding variation name string register is set equal to the string -operand. - -7: EPD processing verbs - -An EPD processing verb is a command to an EPD capable program used to -direct processing of one or more EPD files. Standardization of verb -semantics among EPD capable programs is important to helping reduce -confusion among program users and to better insure overall -interoperatibilty. - -Each EPD processing verb that requires the reading of EPD records has a -specific set of required opcodes that must be on each input record. -Each EPD processing verb that requires the writing of EPD records has a -specific set of required opcodes that must be on each output record. -Some EPD processing verbs imply both reading and writing EPD records; -these will have requirements for both input and output opcode sets. - -The names of the EPD processing verbs in this section are for use for -specification purposes only. Program authors are free to select -different names as appropriate for the needs of a program's user -interface. - -7.1: EPD verb: pfdn (process file: data normalization) - -The "pfdn" (process file: data normalization) verb reads an EPD input -file and produces a normalized copy of the data on as the EPD output -file. The output file retains the record ordering of the input file. -The noramlization is used to produce a canonical representation of the -EPD. The input records are also checked for legality. There is no -minimum set of operations requires on the input records. For each input -record, all of the operations present are reproduced in the -corresponding output record. - -The normalization of each EPD record consists of the following actions: - -1) Any leading whitespace characters are removed. - -2) Any trailing whitespace characters are removed. - -3) Any unneeded whitespace characters used as data separators are -removed; a single blank is used to separate adjacent fields, adjacent -operations, and adjacent operands. Also, a single blank character is -used to separate the fourth position data field (the en passant target -square indication) from the first operation (if present). - -4) Operations are reordered in increasing ASCII order by opcode -mnemonic. - -5) Operands for each opcode that does not require a special order of -interpretation are reordered in increasing ASCII order by external -representation. - -Data normalization is useful for making a canonical version from data -produced by programs or other sources that do not completely conform to -the lexigraphical and ordering rules of the EPD standard. It also helps -when comparing two EPD files from different sources on a line by line -basis; the non-semantic differences are removed so that different text -lines indicate true semantic difference. - -7.2: EPD verb: pfga (process file: general analysis) - -The "pfga" (process file: general analysis) verb is used to instruct a -chessplaying program to perform an analysis for each EPD input record -and produce an EPD output file containing this analysis. The output -file retains the record ordering of the input file. The current -position given by each input record is not changed; it is copied to the -output. - -Each input EPD record receives the same analysis effort. The level of -effort is indicated as a command (separate from EPD) to the analysis -program prior to the start of the EPD processing. Usually, the level is -given as a time limit or depth limit per each position. The limit can -be either a hard limit or a soft limit. A hard limit represents an -absolute maximum effort per position, while a soft limit allows the -program to spend more or less effort per position. The hard limit -interpretation is preferred for comparing programs. The soft limit -interpretation is used to help test time allocation strategy where a -program can choose to take more or less time depending on the complexity -of a position. - -Each EPD output record is a copy of the corresponding EPD input record -with new analysis added as a result of the verb processing. - -There is no minimum set of operations required for the EPD input -records. - -Each output EPD record must contain: - -1) A "pv" (predicted variation) operation. The operands of this form a -sequence of chess moves to be played from the given position. The -length of this may vary from record to record due to the level of -anaylsis effort and the complexity of each position. However, unless the -current position represents a checkmate or stalemate for the side to -move, the pv operation must include at least one move. If the current -position represents a checkmate or stalemate for the side to move, then -the pv operation still appears, but has no operands. - -2) A "ce" (centipawn evaluation) operation. The value of its operand is -the value in hundredths of a pawn of the current position. Note that -the evaluation is assigned to the position before the predicted move (or -any other move) is made. Thus, a positive centipawn score indicates an -advantage for the side to move in the current position while a negative -score indicates a disadvantage for the side to move. - -Each output EPD record may also contain: - -1) A "pm" (predicted move) operation, unless the current position -represents a checkmate or stalemate for the side to move. (If the side -to move has no moves, then the "pm" operation will not appear.) The -single operand of the "pm" opcode must be the same as the first operand -of the "pv" sequence. - -2) A "sm" (supplied move) operation, unless the current position -represents a checkmate or stalemate for the side to move. (If the side -to move has no moves, then the "sm" operation will not appear.) The -single operand of the "sm" opcode must be the same as the first operand -of the "pv" sequence. - -3) An "acn" (analysis count: nodes) operation. The single operand is -the number of nodes visited in the analysis search for the position. - -4) An "acs" (analysis count: seconds) operation. The single operand is -the number of seconds used for the analysis search for the position. - -7.3: EPD verb: pfms (process file: mate search) - -The "pfms" verb is used to conduct searches for forced checkmating -sequences. The length of the forced mate sequence is provided (outside -of EPD) to the program prior to the beginning of "pfms" processing. The -length is specified using a fullmove count. For example, a fullmove -mate length of three would instruct the program to search for all mates -in three. An analysis program reads and input EPD file and looks for -forced mates in each position where no forced mate of equal or lesser -length has been recorded. The output file retains the record ordering -of the input file. - -The action of the "pfms" command on each record is governed by the -pre-specified fullmove count and, if present on the record, the value of -the "dm" (direct mate fullmove count) operand. A particular record will -be subject to a search for a forced mate if either: - -1) There is no "dm" operation on the input record, or - -2) The value of the "dm" operand on the input record is greater than the -value of the pre-specified fullmove analysis length. - -If the analysis program finds a forced mate, it produces two additional -operations on the corresponding output EPD record: - -1) A "dm" operation with an operand equal to the pre-specified fullmove -mate length. - -2) A "pm" operation with the first move of the mating sequence as its -operand. If two or more such moves exist, the program selects the first -one it located to appear as the "pm" operand. - -The idea is that a set of positions can be repeatedly scanned by a mate -finding program with the fullmove analysis depth starting with a value -of one and being increased by one with each pass. For any given pass, -the positions solved by an earlier pass are skipped. - -The output EPD records may also contain other (optional) information -such as "acn", "acs", and "pv" operations. - -7.4: EPD verb: pfop (process file: operation purge) - -The "pfop" verb is used to purge a particular operation from each of the -records in an EPD file that contain the operation. The output file -retains the record ordering of the input file. Prior to processing, the -opcode of the operation to be purged is specified. - -The records of the input file are copied to the output file. If the -pre-specified operation is present on a record, the operation is removed -prior to copying the record to the output. - -7.5: EPD verb: pfts (process file: target search) - -The "pfts" (process file: target search) verb is similar to the "pfga" -(process file: general analysis) verb in that each position on the EPD -input file is subject to a general analysis. The difference is that -each input record contains a set of target moves and a set of avoidance -moves. Either of these two sets, but not both, may be empty. The set -of avoidance moves is given by the operands of a "am" opcode (if -present). The set of target moves is given by the operands of a "bm" -opcode (if present). - -Prior to processing the target search, the program is given a search -effort limit such as a limit on the amount of search time or search -nodes per position. The "pfts" verb causes each input EPD record to be -read, subjected to analysis, and then written to output file with the -predicted move attached with the "pm" opcode. (No "pm" operation is -added is the current position is a checkmate or stalemate of the side to -play.) - -The output EPD records may also contain other (optional) information -such as "acn", "acs", and "pv" operations. - -8: EPD referee semantics - -Communication between a chessplaying program and a referee program is -performed by exchanging EPD records. Each EPD record emitted by a -chessplaying program to be received by the referee has a "refreq" EPD -opcode with an operand that describes the request. Each EPD record -emitted by a referee to be received by a chessplaying program has a -"refcom" EPD opcode with an operand that describes the command. - -The usual operation sequence in a referee mediated event is as follows: - -1) The referee server program is started and the human event supervisor -provides it with any necessary tournament information including the -names of the chessplaying programs, the name of the event, and various -other data. - -2) The referee program completes its initialization by performing -pairing operations as required. - -3) Once the server has its initial data, it then opens a socket and -binds it to the appropriate port. It then starts listening for input -from clients. For a serial implementation, an analogous function is -performed. - -4) The competing chessplaying programs (clients) are started (if not -already running) and are given the name of the referee host machine -along with the port number. For a serial implementation, an analogous -function is performed. - -5) Each client program transmits an EPD record to the referee requesting -registration. This causes each client to be signed on to the referee. - -6) The referee program replies to each client signing on with an EPD -record commanding a reset operation to set up for a new game. - -7) The referee program sends an EPD record to each client informing each -client about the values for each of the tag values for the PGN Seven Tag -Format. - -8) For each client on the move, the referee will send an EPD record -commanding a response. This causes each receiving client to calculate a -move. If there has been a prior move, it along with the position from -which the move is played is sent. If there has been no prior move, the -current position is sent but no move is included. - -9) For each client receiving a command to respond, the current position -indicated by the record is set as the current position in the receiving -program. (It should already be the current position in the receiver.) -If a supplied move was given, it is executed on the current position. -Finally, the receiving program calculates a move. - -10) As each program on the move completes its calculation, it sends a -reply to the referee which includes the result of the calculation. The -position sent back on the reply is the result of applying the move -received on the referee record to the position on the same received -record. If a move was produced as the result of the calculation, it is -also sent. (A move will not be produced or sent if the receving client -was checkmated, or if it was stalemated, of if it resigns, or claims a -draw due to insufficient material.) - -11) As the referee receives a reply from a client, it produces a respond -command record to the client's opponent. (This step will be skipped if -an end of game condition is detected and no further moves need to be -communicated.) - -12) The referee continues with the respond/reply cycle for each pair of -opponent clients until the game concludes for that pair. - -13) For each game conclusion, the referee sends a conclude command to -each of the clients involved. - -14) When a client is to be removed from competition, it sends a sign off -request. This eliminates that program from being paired until it -re-registers with a sign on request. - -15) When the referree server is to be removed from network operations, -it will send a disconnect command to each client that is currently -signed on to the referee. - -8.1: Referee commands (client directives) - -The referee communicates the command of interest as the single operand -of the "refcom" opcode. The refcom opcode will be on each record sent -by the referee. Each possible refcom operand is sent as an identifier -(and not as a string). - -EPD records sent by the referee will include check clock data as -appropriate. Whenever a client program receives a record with the "cc" -(chess clock) opcode, the client should set the values of its internal -clocks to the values specified by the cc operands. Note that the clock -values for both White and Black are present in a cc operation. - -All EPD records carry the four data fields describing the current -position. In most cases, this position should also be the current -position of the receiving client. If the position sent by the referee -matches the client's current position, then the client can assume that -all of the game history leading to the current position is valid. Thus, -every client keeps track of the game history internally and uses this to -detect repetition draws and so there is no need for each EPD record to -contain a complete copy of the game history. - -If the position sent by the referee does not match the receiving -program's current position, then the receiving program must set its -current position to be the same as the one it received. Unless an -explicit game history move sequence is also sent on the same EPD record, -the receiving program is to assume that the new (different) position -received has no game history. In this case the receiving program cannot -check for repetition of positions prior to the new position as there -aren't any previous positions in the game. - -Each client is expected to maintain its own copy of the halfmove clock -(plies since last irreversible move; starts at zero for the initial -position) and the fullmove number (which has a value of one for the -initial position). If the referee sends a halfmove clock value or a -fullmove number which is different from that kept by the program, then -the receiving program is to treat it as a new position and clear any -game history. As noted above, a halfmove clock is sent using the "hmvc" -opcode and a fullmove number is sent using a "fmvn" opcode. - -If a supplied move (always using the "sm" opcode) is sent by the -referee, the receiving program must execute this move on the current -position. This is done after the program's current position is set to -the position sent by the referee (remember that the two will usually -match). The resulting position becomes the new current position. This -new current position is used for all further calculations. The new -current position is also the position to be sent to the referee if a -move response is commanded. When a client program produces a move to be -played, it uses the sm opcode with its operand being the supplied move. -The position sent is alwasy the position from which the supplied move is -to be played. Thus, the semantics of the current position and the -supplied move are symmetric with respect to the client and the server. - -8.1.1: Referee command: conclude - -The "conclude" refcom operand instructs the client to conclude the -current game in progress. The position sent is the final position of -the game. There is no supplied move sent. No further EPD records -concerning the game will be sent by the referee. The client should -perform any end of game activity required for its normal operation. No -response from the client is made. - -To allow for client game conclusion processing time, the referee will -avoid sending any more EPD records to a client concluding a game for a -time period set by the human supervisor. The default delay will be five -seconds. - -8.1.2: Referee command: disconnect - -The "disconnect" refcom operand instructs the client that the referee is -terminating service operations. The client should close its -communication channel with the server. This command is sent at the end -of an event or whenever the referee is to be brought down for some -reason. No further EPD records will be sent until the server is cycled. -It provides an opportunity for a client to gracefully disconnect from -network operations with the server. No supplied move is sent. The -position sent is irrelevant. No response from the client is made. - -8.1.3: Referee command: execute - -The "execute" refcom operand instructs the client to set up a position. -If a move is supplied (it usually is), then that move is executed from -the position. The sent position will usually be the receiver's current -position. This command is used only to play through the initial -sequence of moves from a game to support a restart capability. No -response is made by the receiver. - -8.1.4: Referee command: fault - -The "fault" refcom operand is used to indicate that the referee has -detected an unrecoverable fault. The reciever should signal for human -intervention to assist with corrective action. The human supervisor -will be notified by the referee regarding the nature of the fault. No -response is made by the receiver. - -A future version of the referee protocol will support some form of -automated fault recovery. - -8.1.5: Referee command: inform - -The "inform" refcom operand is used to convey PGN tag pair data to the -receiver. The "ptp" opcode will carry the PGN tag data to be set on the -receiving client. This command may be sent at any time. It will -usually be sent prior to the first move of a game. It will also be sent -after the last move of a game to communicate the result of the game via -the PGN "Result" tag pair. No response is made by the receiver. - -The main purpose for the inform referee command is to be able to -communcate tag pair data to a client without having to send a move or -other command. Note that the ptp opcode may also appear on EPD records -from the referee that are not inform commands; its operands are -processed in the same way. - -The usual information sent includes the values for the Seven Tag Roster. -The PGN tag names are "Event", "Site", "Date", "Round", "White", -"Black", and "Result". - -Future versions of the referee will likely send more than just the Seven -Tag Roster of PGN tag pairs. One probable addition will be to send the -"TimeControl" tag pair prior to the start of a game; this will allow a -receiving program to have its time control parameters set automatically -rather than manually. - -8.1.6: Referee command: reset - -The "reset" refcom operand is used to command the receiving client to -set up for a new game. Any previous information about a game in -progress is deleted. This command will be sent to mark the beginning of -a game. It will also be sent if there is a need to abort the game -currently in progress. No response is made by the receiver. - -To allow for client reset processing time, the referee will avoid -sending any more EPD records to a resetting client for a time period set -by the human supervisor. The default delay will be five seconds. - -8.1.7: Referee command: respond - -The "respond" refcom operand is used to command the receiving client to -respond to the move (if any) played by its opponent. The position to -use for calculation is the position sent which is modified by a supplied -move (if present; uses the "sm" opcode). The client program calculates -a response and sends it to the referee using the "reply" operand of the -"refreq" opcode. - -8.2: Referee requests (server directives) - -The referee communicates the command of interest as the single operand -of the "refcom" opcode. The refcom opcode will be on each record sent -by the referee. Each possible refcom operand is sent as an identifier -(and not as a string). - -8.2.1: Referee request: fault - -The "fault" refreq operand is used to indicate that the client has -detected an unrecoverable fault. The receiver should signal for human -intervention to assist with corrective action. The human supervisor -will be notified by the referee regarding the nature of the fault. No -response is made by the referee. - -A future version of the referee protocol will support some form of -automated fault recovery. - -8.2.2: Referee request: reply - -The "reply" refreq operand is used to carry a reply by the client -program. Usually, a move (the client's reply) is included as the -operand of the "sm" opcode. - -8.2.3: Referee request: sign_off - -The "sign_off" refreq operand is used to indicate that the client -program is signing off from the referee connection and no further -operations will be made on the communication channel. The channel in -use is then closed by both the referee and the client. - -A new connection must be established and a new "sign_on" referee request -needs to be made for further referee operations with the client. - -8.2.4: Referee request: sign_on - -The "sign_on" refreq operand is used to indicate that the client program -is signing on to the referee connection. This request is required -before any further operations can be made on the communication channel. -The channel in use remains open until it is closed by either side. - -9: EPD report generation semantics - -[TBD] - -EPD_Spec: EOF |
