📄 changelog
字号:
l. Added a Pinned() function to test if a piece is pinned against the King. m. Added a GenCheckEscape() routine to generate move when a king is in check. In SearchRoot(), there is no need to check if a move is legal as all root moves are legal. n. If King is in check, generate check escapes only and if there is only 1 move, extend by another move.Version 1.17 (9 Feb 98) a. Added very elementary hanging piece evaluation. b. For square of the pawn, instead of adding ValueQ - ValueP, we a fraction of ValueQ based on how far advance the pawn is. This is to encourage the pawn to advance and queen. Fix a bug in IsLegalMove() whereby an en-passant was considered illegal. c. More accurate hanging piece evaluation. d. IsLegalMove() was missing out enpassant captures. Fixed. e. Added a ptype[] variable to distinguish between pawn & bpawn; f. In Search(), initialize PVlen before checking for draws. This fix problems with illegal moves in the PV (e.g. GMG1.epd 42). g. Renamed Pinned() to PinnedOnKing(). A new Pinned() function will be written to be more generic. Minor change to SearchRoot(), the first move is also moved within the main loop, making things tidy. h. Xboard support. i. In Search(), the first move is also moved into the main loop. This is to make the code better suited for adding threat extensions. Game50 variable wasn't being properly updated; fixed. j. Trapped bishop at A7/H7/A2/H2. Rook moved before castling is now penalized. Minor optimization in eval.c. More eval tuning. k. Also promotion moves were not being sorted properly; this is fixed. l. board.ep was initialized to 0; now its -1 fixing a bug when promotion happens at A1 square (square 0). m. Instead of storing the whole board HashKey into the ttable, we now store the top 32 bits, saving memory. Same for Pawn table. n. Fix bug in backward pawn detection. Fix bug in search whereby sometimes the best move wasn't being properly set. Fortunately, this happens quite deep in the tree, so not much improvement might be seen. Change the way that scores are returned from the hash table probe to improve pruning. o. Trade down bonus implemented. Recaptures extensions modified so that only recaptures of same value & square are extended. p. In Quiesce(), check for mates as well. q. Killers at ply-2 is also used for sorting. Reduced tree size slightly (2-3%). r. Moves in the Quiesce() search were not being recorded in the PV. This is now fixed. s. Bug fix in evaluation of square of the pawn whereby if the opponent is on the move, the pawn isn't scored properly. t. Phase pick is implemented. Code seems to be working. Also bug fixes in IsLegalMove() and Evaluate().Version 1.18 (18 Mar 98) a. In MakeMove(), when a rook is captured, the castling flag has to be updated too. This also means that in genmove.c, when generating castling moves, it is not necessary to check if the rook is on its original square. However this check hasn't been removed yet. b. Add "epdsave/save" command. c. Debug code in quiesce.c wasn't being activated; fixed. d. In ttable.c, use & for calculating hashindex rather than the more expensive modulo operation. Gain a couple of percent speedup. Also fix the hashsize command so that it is also a power of 2. Also get rid of modulo operation everywhere else in the code. e. For connected pawns on 6th/7th rank only apply super bonus when the enemy only has rooks. When researching a fail high move & it fail low, immediately set alpha to -INF and research it. This assumes that the original move did not fail high. f. PhasePick() was sometimes trying out the Hashmv twice resulting in wasted time. Fixed by making Hashmv[] an array. g. Bug in trade down code fixed. Also modified the way worstscore was calculated resulting in a significant speedup in Evaluate(). Fine tune ScoreB(). h. Added a FindPins() function which returns a bitboard of all pinned pieces. This is used in eval.c for evaluating pinned pieces. i. Modify way in which sorting of captures was done. This led to a reduction in the quiescent search speeding things up slightly. j. For killers, only update them if best >= beta; this gives much improved pruning. Remove killer updates in SearchRoot(). Remove transposition lookup & updates in SearchRoot(). Got rid of pbest in SearchRoot(). k. In quiesce(), only update the PV if the score > alpha, not when score > best. When a mate in N plies have been found, at the N-1 ply, we don't search the opponent moves; we only check to see if he is mated. Simplify SearchRoot(). l. If the hash table returns an upperbound, then we don't want the move that is returned, so set Hashmv=0. This improves pruning. m. SquarePawnMask[] for pawns on 2nd rank is wrong; it is now set to mask for pawns on 3rd rank as they can advance 2 square. SwapOff() used to assume that the side to move is the one moving the piece. This has been changed to that SwapOff() can be used for any side. Bug fixed in evaluation of trapped bishop. Bug in GenCheckEscapes() whereby an e.p. capture was allowed even if the pawn is pinned; this is fixed. A nicer and bigger board. n. For endings with opposite colour bishops, half the score as they are mostly drawish. Instead of penalizing weak pawns, give bonus to pieces which attack weak enemy pawns. Lots of evaluation tuning. Commented out ShowThinking() resulting in faster search. All this has improved the nodes per second by 50%! Fix bug in MakeMove() whereby if a R captures another R, the castling flag for the captured rook is not cleared. o. Updated FindPins() to include more pin situations. Introduce a variable called computer; this hold the colour that the program plays. Make a trapped bishop part of lazy evaluation as it gives a high penalty. Promotion weren't taken into account in SortRoot(). p. A basic KPK evaluation for certain positions. Another bug in GenCheckEscape(); a promotion move to escape check isn't taken into account. Introduced a board.pmaterial[] variable which holds the pieces total value for a side. PHASE is now calculated using only pieces values. In Quiesce(), when side is in check we don't prune even if best >= beta; this is now fixed; when in check, we see if we are checkmated, if not and there is a beta cut, do it saving some branches. History was updated everytime best > alpha; now it is updated only when best >= beta, or when a score > alpha has been found. All this gives rise to improved pruning about 2-3 %. q. Some fine tuning of passed pawn eval. Add quiesce move to ttable so that it can appear in the PV.Version 1.19 (18 Jul 98) a. Found problems when PV not updated when best >= beta; changed this in both Quiesce() and Search(). b. A ValidateBoard() function. c. Bug fix in SwapOff(). In Evaluate(), position with KNN with no pawns wasn't being scored as 0; done. d. More accurate & faster hung piece evaluation. e. We skip null search when MATERIAL+ValueP <= beta instead of alpha. This makes more sense as we are only interested in beta. Also if the hash table returns an upper bound, the score < beta, so forget about doing the null test. This both gives about 6% reduction in nodes searched. f. In Search(), when doing TTGet, g0 is destroyed even though we use it in the null test later. This is fixed. Passed pawns made less valuable; increased CONNECTEDPP from 450 to 650 to compensate. g. One-reply extensions should be checked before probing the hash table otherwise, such a probe will take place at a lesser depth than it should. The algorithm to prune if no faster mate is found is also brought forward to before the hash probe. h. When all root-moves fail low, it is still a good idea to try the best move found at the last iteration first. i. Sometimes pawn-to-7th rank extensions wasn't being carried out. This is fixed; also these extensions are only done at the leaf only. If a root move is a recapture, it is extended as well. j. Bonus/penalties for rook behind/in front of passed pawn. For ending don't give bonus for rook on open files as rook behind passed pawns are stronger. k. SwapOff() wasn't handling promotion moves at all; this is now fixed. Some of the sort algorithm has to be changed to take into account the update to SwapOff. Also minor bug fix to AddXrayPiece(). l. Penalize side where a pawn base is under attack by opponent's pawn. m. At SearchRoot() we don't need to do any extensions. For recapture extensions, we only extend if it is capture of equal or more material so as to follow sacrifices (e.g QxP+ KxQ etc). n. Bonus for pawn on c6/f6 if opponent king is in the appropriate corner. o. Extension for useless interposing moves. Limit recapture extensions to below Idepth+2. p. For PV's we no longer back it up from the root. Now the whole PV is taken from the hash table except for the first move. This is a much cleaner way of managing it, saving code in search. Otherwise, the PV that is return isn't always correct and its really very difficult to fix. q. There were some bugs with HashKey calculation in move.c, init.c and hash.c. These have been fixed. The idea is that for ALL positions in a game, the HashKey must be equal to the HashKey calculated if the positions are epd-loaded. Got rid of CptrCnt[] array; I no longer use it for capture extensions. r. King position is now stored in the variable board; we no longer need to run leadz (board.b[side][king]) anymore, which takes place in quite a number of places! s. An AttackXTo() routine which generates a bitboard of all pieces of side which attack a square. This includes x-rays. Bug in GenCheckEscapes() whereby a pawn capturing a checking piece is not checked for promotion. When Idepth <= 3, we don't do null move. This allows us to catch some mates in 2 which would otherwise be pruned away by the null move. t. Added in threat extension code. A mate at any depth is better than a non-mate score, so it will replace it in the ttable. More "bug fixes", eg. sometimes null moves terminate the PV, hopefully this is all fixed in this release. u. A TTGetPV to pull the PV from the hash table. This works better than TTGet which can sometimes miss the PV due to the way the hash tables are managed. v. Bonus for fianchetto bishops. Minor change to TTPut() whereby occasionally the same position can occupy both slots but the 2nd slot has a lower draft. The 2nd slot is wasted. This is changed so that this waste will no longer occur.****************** BEGIN GNU 5 (Stuart Cracraft) ********************Version 5.00a (13 Dec 98) - integrated with WinBoard 4.0 / Xboard - post/nopost (show iterative deepening) - time controls (level, fischer, sudden-death, time, otim, etc.) - works properly with FICS (Free Internet Chess Server) - added opening book capability. - futility pruning according to Kong. - weak back rank handling for kings - canned attacks against computer's king (via opening A/H file) - penalize early minor piece repeat moves. - wingpawn advance before castling penalty. - Win-at-Chess test: 233/300 at 5 seconds per move. 14,977,757 nodes. - Convert it to properly run on a standard Unix system, not just PC's. - Make it work with "configure". - Distribute to beta-testers - eval.c - PawnSq[], make penalty for d2/e2/d7/e7 pawns KingSq, KnightSq, PawnSq improved eval.h - PINNED* worsened - BISHOP_PAIR from 40 to 25. beta tester input. - iterate.c - disable Hyatt more-time-after-book algorithm disable Chua's dont-start-every-new-iteration - this version made a 115 point rating jump (to FICS 2030).Version 5.00b (late January) search.c - Razoring. This applies at depth == 3. If we are more than a Q behind and there is no extension, then reduce the depth by 1. Extended futility pruning. At depth == 2, if we are more than 600 points behind and there is no extension, then we only look at checking moves & captures which bring the material score back to alpha. Everything else is pruned away. This is an extension of the basic futility pruning which applies at depth == 1. cmd.c - modify so that all games go to game.nnn and the log of their searches go to log.nnn where the two nnn's match. version.c - split off VERSION/etc info into version.h Makefile - make version.c depend on version.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -