- Improved move generator performance
- Improved EvalPawn(), EvalPawnRace(), and CalculateImbalance()
- Improved Passed Pawn Extension
- Added the null-move value to the TT
- The oldest entry is now replaced when a cluster is full
- Tried faster sorting methods
- Added some tuned values (WIP)
- Reuse checks in Quiescent Search when available
- Tuned and/or tapered many parameters
- Improved locality for some data structures
- Fixed an issue in Eval_KNB_VS_K()
- Improved Eval_KBB_VS_KN() performance
- Fixed some nasty issues in Eval_KR_VS_KP()
- Improved bishop and knight outpost evaluation
- Improved passed pawn candidate evaluation
- Fixed the isolated pawn penalty
- GenerateKings() was not symmetric!
- Improved the fifty-move rule and draw probability
- No king safety checks in pawn endings
- Slightly changed knight and bishop pair evaluation
- Promotion is now taken into account for MVVLVA in the move picker
- Check extensions now avoid search explosions by counting every two plies
- Fixed a singular move issue
- Added quiet-move pruning
- Removed the pawn cache; bitboards are now used
Saturday, October 10, 2026
ChessKISS 2.1, Autumn version
Saturday, September 19, 2026
ChessKISS 2.0 arrives before the end of the summer
Three days left until Autumn (well, here it's still summer for at least another 30 days). To celebrate it (...), I've been quite busy over the last month creating a much better (still amateur) chess engine.
The result is version 2.0, which I believe is quite an advanced version of a chess engine that still needs tuning (WIP).
So, what's new since 1.9?
Performance improvements everywhere (move generator, hash generator, Quiescence)
Improved SEE
Better king defense/attack
Lazy SMP with worker voting
Improvements in repetitions, threats, killer moves and move generator
In threat evaluation, reverse the order of the pieces (minor > major)
Better time management
Some values tuned
Added evasion pruning in Quiescence
New endgames: KQ vs KP, KP vs KP, KRB vs KR, KRN vs KR, KQ vs QRB
Added rook vs bishops in EvalUndeveloped()
Added singular extensions
New settings: CPU=0 // auto and Debug=0 // default
Added pondering
Fixed a long-standing bug where a move from a missed aspiration window could be used
Refactored cache code
LMR table is now dynamic rather than having only two entries
Improved outposts for bishops and knights
More use of bitboards in TEvaluation.EvalPassers() and TEvaluation.EvalPawnRace() instead of loops
Improved check extension performance
PawnOn7thExt extension on PV is now ONE ply (previously half a ply)
Scores are now returned rather than beta
GenerateAttacksDefends() is now fully implemented with bitboards
You can download it here: ChessKISS 2.0
Monday, February 21, 2022
ChessKISS 1.8c 22/02/22
- Use Gaviota endgame or similar.
- Bitboards in x-ray (soma parts of the engine still not use bitboards) since this is the method that consume the mode CPU
- Multi cpu, SMP?
- Knight pair bonus was not taken into account
- Move generator for slice pieces is now done with bitboards
- New board.IsDiscoverCheck()
- Now apertures are saved correctly
- Now captures take info from friendly blockers
- If evassion move is equal to hashmove then it is discarded
- Added Reverse futility pruning
- New pawn islands penalty
- When a command is not recogniced then no exception is thrown
Tuesday, December 21, 2021
ChessKISS 1.8a, final?
- Draw Probability is scored as middle/ending Score
- Pawn storm does not take into account pawns on 2 row
- Fixed some negative arrays...
- Rook or queen on seventh do not longer take into account if king is on second row
- Minor fixes in piece pairs
- A long lasting bug with pawn cache, shame on me...
- Now cache history is increased while on iterative iteration
- Pawn hash is only calculated when moving pawns
- Lazy margin is now dynamic based on game phase
- Bonus time increased when PV changes in root
- Zobrist calculation performance improved a bit
- Board.evaluate() improved performance
- Now cache stores scores as tapered
- Now queen has a penalty if can only do one movement
- Don't timeout in root nodes
- Some functions reordered in order to make inline work better
- cache.AddScore() improved when cluster is full
- New penalty when king cannot move
- Piece index evaluation performance improved
- IsRepetition() performance improved
- Aspiration window is now dynamic
Sunday, November 14, 2021
Chesskiss 1.8 is out after 6 years...
- Lazy eval improved
- Fixed some issues in pawn evaluation
- New now pawn penalty when ending
- Some performance gains...
- New recapture extension
- Pawn cache improved
- Evaluation performance improved a bit
- New book
- Seems book moves were not very random
- Some bugs fixed here and there
- Now rook and knight pairs are also evaluated
- Now root nodes are evaluated differently
- Time for move is calculated differently
Thursday, February 16, 2017
ChessKISS still alive
Nothing spectacular, but hey..., I think soon I will try to create a new version, let's see
Found binary at OneDrive
62ND AMATEUR SERIES
Final Standings
39.0 - ChessKiss 1.7c 64-bit
36.0 - Dorpsgek Cosmopolitan 2 64-bit
30.5 - Isa 1.9.51 64-bit
29.0 - Obender 03.2016 64-bit
25.5 - Blitzkrieg rev337 64-bit
22.5 - Barbarossa 0.4.0 DJ 64-bit
21.5 - Cinnamon 2.0 64-bit
20.0 - BigLion 2.23x
MARCH OF THE MINNOWS
Final Standings
19.0 - ChessKiss 1.7c 64-bit
19.0 - Obender 03.2016 64-bit
15.5 - Blitzkrieg rev337 64-bit
15.0 - RamJet 0.13
14.5 - NGplay 9.86 64-bit
14.5 - Napoleon 1.6.0b 64-bit
13.5 - Isa 1.9.51 64-bit
13.5 - Soldat III 0.178 64-bit
13.0 - Cinnamon 2.0 64-bit
10.5 - BigLion 2.23x
10.5 - Ecce 1.0 64-bit
8.5 - Abbess 2016.11.12
8.0 - Smash 1.0 3 64-bit
Saturday, July 4, 2015
ChessKISS 1.7c, finally!
- Optimized TPiece.SetTo() and TPiece.GetColorPiece()
- TMove, removed GetIndex(), optimized SetTo()
- TMoveGenerator.GenerateCastlingMoves() fixed
- TEvaluation, fixed some issues with outpost and corners
- TBoard.States optimized a bit, no need for Index
- New overloaded TUtils.Switch()
- New TScore.Null()
- TPiece.SetIndex() improved
- New TMove.SetFrom()/SetFromTo()
- TBoard, backup()/restore() improved, new PieceValue()
- TBoard.IsPinned() removed
- Now uses polyglot book
- TChessboard.CanTraverse() uses faster approach to get the offset
- TMoveGenerator.GeneratePawnCaptures() and MovesToSquare() improved a bit
- TSearch.AlphaBeta() improved a bit
- Improved a bit the performance in history
- Trying to speedup the moving generation with new silly ideas
- Now killers are part of the stack in search
- History is updated when the cache is hit (makes sense)
- New see() approach, let's see, also now return zero when move is castling
Thursday, February 7, 2013
World Regional Teams Challenge
IvanHoe 9.46h 64-bit
Hannibal 1.2 64-bit
Deep Junior 13.3 64-bit
Scorpio 2.7.5 64-bit
RedQueen 1.1.1 64-bit
LittleThought 1.052 64-bit
Natwarlal 0.14
Capivara LK 0.08b03a 64-bit
WESTERN EUROPE
Houdini 3 64-bit
Shredder 12 64-bit
Nemo 1.0.1 64-bit
DiscoCheck 3.7.1 64-bit
Philou 3.7.1 64-bit
iCE 0.3
Gibbon 2.57a 64-bit
Adam 3.3
USA/CANADA
Komodo 5 64-bit
Naum 4.2 64-bit
Thinker 5.4d Inert 64-bit
Crafty 23.5 64-bit
SlowChess Blitz WV2.1
Djinn 0.971 64-bit
Myrddin 0.86 64-bit
Chesley r323
SOUTHERN EUROPE
Bouquet 1.6 64-bit
Chiron 1.5 64-bit
MinkoChess 1.3 64-bit
Dirty 5Sep2012 64-bit
Rodin 5.1
Danasah 5.00
Betsabe II 1.28 64-bit
ChessKiss 1.7 64-bit
UK/SCANDINAVIA
Stockfish 2.3.1 64-bit
Hiarcs 14
Texel 1.01 64-bit
Frenzee 3.5.16 64-bit
Francesca MAD 0.19
Pupsi2 0.09
Mediocre 0.5
Beowulf 2.4a 64-bit
EASTERN EUROPE
Critter 1.6a 64-bit
Sting SF 2 64-bit
Booot 5.1.0
Cheng3 1.07 64-bit
Rodent 0.16 64-bit
Pawny 0.3.1 64-bit
Bagatur 1.3a 64-bit
Atak 6.8
RUSSIA
Strelka 5.5 64-bit
Gull II 64-bit
Quazar 0.4 64-bit
Bison 9.11 64-bit
GreKo 9.7 64-bit
Ifrit m1.8 64-bit
Zeus 1.29
Shallow 1.0 64-bit
INVITATION TEAM (to eliminate the bye)
Rybka 4.1 64-bit
Vitruvius 1.11C 64-bit
Tornado 4.88 64-bit
Arasan 15.1 64-bit
Tucano 1.04
Delphil 2.9g 64-bit
Tigran 2.3 64-bit
Vajolet 1.62.1
64.5 - Southern Europe
62.0 - Western Europe
61.5 - US/Canada
59.0 - Rest Of The World
54.5 - Eastern Europe
51.5 - Invitation Team
48.0 - Russia
47.0 - UK/Scandinavia
8.5 - Bouquet 1.6 64-bit
6.0 - Chiron 1.5 64-bit
7.0 - MinkoChess 1.3 64-bit
8.5 - 5Sep2012 64-bit
7.5 - Rodin 5.1
9.5 - Danasah 5.00
8.5 - Betsabe II 1.28 64-bit
9.0 - ChessKiss 1.7 64-bit
Tuesday, January 29, 2013
Latest tournament of ChessKISS that I'm aware of
24.0 - ECE 12.01
24.0 - Rhetoric Lite
23.0 - ChessKiss 1.7 64-bit
20.0 - Shallow 1.0 64-bit
19.5 - Adam 3.3
19.5 - Myrddin 0.85 64-bit
17.0 - Vajolet 1.62.1
15.0 - FireFly 2.5.13 64-bit
14.0 - Cupcake 1.0
13.0 - ProChess 1.02AD
12.5 - Soldat III 0.172
12.0 - Dabbaba 6.52
7.0 - Jabba 13032012
7.0 - BSC 3.9# 32-bit
7.0 - Bubble 1.5
5.5 - AdroitChess 0.3 32-bit
Friday, May 4, 2012
Latest tournament
AMD-PHENOM-3100, 2012.04.09 - 2012.05.01
Score SB TJ If KM Ca Na Ch Ma Bi Bi Fr Ge Wa Ri Su J. Yo Ro Va TS Za Di Nu Ma CM
--------------------------------------------------------------------------------------------------------------------
1: TJchess 1.1-x64 43.0 / 46 924.25 XX 1= 11 11 1= 1= 11 11 1= 11 01 11 11 11 11 11 11 11 11 11 11 11 11 11
2: Ifrit m1.5-x64-JA 40.5 / 46 827.50 0= XX =1 10 1= 11 0= 11 11 11 11 11 11 11 11 1= 11 11 11 11 11 11 11 11
3: KMTchess-121-x64-JA 38.0 / 46 746.25 00 =0 XX 01 11 10 11 1= 11 10 11 11 11 10 11 11 11 11 11 11 11 11 11 11
4: Capivara LK 0.08a09 37.0 / 46 728.75 00 01 10 XX 01 11 1= 11 10 1= 11 01 11 11 01 11 11 11 11 11 11 11 11 11
5: Nagaskaki 5.12 33.5 / 46 614.75 0= 0= 00 10 XX 10 =1 =0 1= 1= 10 11 == 11 11 =1 11 11 11 11 11 11 11 11
6: ChessKISS 1.5b-x64 33.5 / 46 596.00 0= 00 01 00 01 XX 01 =0 0= 11 10 11 11 11 11 11 11 11 11 11 11 11 11 11
7: Matant 5.04 33.0 / 46 604.00 00 1= 00 0= =0 10 XX 0= 01 11 11 1= 11 11 11 11 11 0= 11 11 11 11 11 11
8: BikJump 2.01-x64 32.0 / 46 578.00 00 00 0= 00 =1 =1 1= XX 11 0= =1 10 =1 11 11 1= 11 11 == 11 11 11 11 11
9: BigLion 2.23w 29.0 / 46 506.00 0= 00 00 01 0= 1= 10 00 XX 0= 01 11 11 1= 11 10 11 =1 10 11 11 11 11 11
10: FrankWalter 1.08 27.5 / 46 470.75 00 00 01 0= 0= 00 00 1= 1= XX 10 01 == =1 11 11 01 11 11 11 11 11 10 11
11: Gerbil 0.2 25.5 / 46 416.25 10 00 00 00 01 01 00 =0 10 01 XX 0= =0 10 11 =1 =1 11 10 11 11 11 11 11
12: Warrior 1.0.3 24.5 / 46 388.50 00 00 00 10 00 00 0= 01 00 10 1= XX 11 == 10 11 =1 01 11 1= =1 11 11 11
13: RivalChess 1.18 23.5 / 46 333.00 00 00 00 00 == 00 00 =0 00 == =1 00 XX 01 11 =1 11 == 11 11 11 11 11 11
14: Surprise 4.3-b13JA 21.0 / 46 290.25 00 00 01 00 00 00 00 00 0= =0 01 == 10 XX 00 11 1= 01 =1 11 11 11 11 11
15: J.S.BAM 0.52 19.5 / 46 251.00 00 00 00 10 00 00 00 00 00 00 00 01 00 11 XX =1 1= 10 11 11 11 =1 11 11
16: Yoda 2.09 17.5 / 46 226.25 00 0= 00 00 =0 00 00 0= 01 00 =0 00 =0 00 =0 XX 01 =1 =1 =1 11 11 11 11
17: Roce 0.0390 17.0 / 46 187.75 00 00 00 00 00 00 00 00 00 10 =0 =0 00 0= 0= 10 XX 01 11 11 11 11 11 11
18: Vapor 0.01-r12 15.5 / 46 223.75 00 00 00 00 00 00 1= 00 =0 00 00 10 == 10 01 =0 10 XX 00 11 11 == =1 =1
19: TSCP 1.81 15.0 / 46 179.25 00 00 00 00 00 00 00 == 01 00 01 00 00 =0 00 =0 00 11 XX 10 11 11 11 11
20: Zadrexsaurus 0.41 9.5 / 46 65.50 00 00 00 00 00 00 00 00 00 00 00 0= 00 00 00 =0 00 00 01 XX =1 11 11 11
21: Dimitri 2.01 7.0 / 46 36.00 00 00 00 00 00 00 00 00 00 00 00 =0 00 00 00 00 00 00 00 =0 XX 11 11 11
22: Numpty Omega 3.5 / 46 31.25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 =0 00 00 == 00 00 00 XX =1 =0
23: Marquis 0.1.6 3.0 / 46 40.00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 =0 00 00 00 =0 XX ==
24: CMCChess 2.27-uci 3.0 / 46 16.00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 =0 00 00 00 =1 == XX
--------------------------------------------------------------------------------------------------------------------
552 games: +255 =64 -233
Oh well, 5th of 24th, I expected a better result, but is not that bad, slowly improving...
Friday, April 20, 2012
ChessKISS 1.6
What's new?
20/04/12, 1.6 Some enhancements
-General
Asserts added (only in debug version)
Renaming...
-Endgame
New KN vs KP
Fixed error in KB vs KP
-See
Fixed an Enpassant issue
-Bitboards
New class TBitboardHelper
New steps to include some kind of magic bitboards
-Board
IsPinned() now handles two variants of attacks
-Definitions
New hash type htNone
-Search
Avoid check explosion
Now killers work by play rather than by depth
History and killers not updated when in check
Fixed a silly bug in the dynamic aspiration window >=2 should be > 2
Changes in extension: check only extended when non bad captures or in PV, added winning captures in PV
Pruning of non capture evasions
-Move
New SetType()
-PV
Minor changes...
-See
Early exit
Saturday, February 4, 2012
ChessKISS 1.5a, maintenance version...
What's new?
04/02/12, 1.5a maintenance version
-Board
The engine now checks if PopCnt is available (that stop the engine crashing on machines with no SSE4)
The endings are not longer based on strings but on hash
-Cache
beta hits updated the history entries
-MoveGenerator
CanTraverse() tweek a bit, it could discard valid moves
-PV
New unit, not used yet
-Search
Killers updated when a bet cache is hit
Saturday, July 23, 2011
ChessKISS 1.3 and last?
From readme:
23/07/11, 1.3 update and last?
-Board
PawnIsPassed() function
Seems that three fold repetition bug is solved
New IsRepetition() function
LoadReplay() moved from TEngine
Repetition issue solved
Fixed an error on FEN parsing en passant
-Cache
Main entry does not used pack data anymore
-Engine
A difficult error fixed when game finish in a draw under some conditions (null move was send to XBoard rather than draw command)
Replay removed for practicity
-Evaluation
EvalPassers() tunned a bit
Silly error when pawn on second row with rooks and queens
-History
Added gains concept
-MoveGenerator
Uses new lookup tables for faster movements
Improved move generation speed (still slow with the current architecture)
GenerateEvassions() is now totally operative
-MovePicker
Added singular phase
Gains used
-Moves
New Compress() function that removed duplicated moves
New IndexOf()
-Repetitions
Unit removed
-Search
Added singular extensions (somehow :-)
Added history gains
Added passed pawns to extensions
Check status is saved in the stack for the next recursive call
Fixed small issue in the IsDraw() calls
-Settings
Added singular extension
Sunday, November 14, 2010
Chess, good and bad feelings
In the last tournament (I don't play engines that I know they always win, what for?, they are design by clever people for many many years with a lot of chess knowledge and help from chess experts) ChessKISS was lucky enough to win all matches, but does that means that ChessKISS is better than other engines?, no!, that's why ELO exists, you have to play hundrens of games in order to balance your ELO.
Arena tournament
| Rank | Engine | Author | Country | Rating | Score | % | Ch | Pu | Ts | Ms | Pi | Bi | S-B |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ChessKISS | Abel Belzunces | Spain | 2200 | 5.0/5 | 100.0 | · ·· ·· | 1-0-0 | 1-0-0 | 1-0-0 | 1-0-0 | 1-0-0 | 10,00 |
| 2 | Pulsar2009-9b | Mike Adams | USA | 2200 | 4.0/5 | 80.0 | 0-1-0 | · ·· ·· | 1-0-0 | 1-0-0 | 1-0-0 | 1-0-0 | 6,00 |
| 3 | Tscp181 | Tom Kerrigan | USA | 2200 | 3.0/5 | 60.0 | 0-1-0 | 0-1-0 | · ·· ·· | 1-0-0 | 1-0-0 | 1-0-0 | 3,00 |
| 4 | Mscp | Marcel van Kervinck | Netherlands | 2200 | 1.5/5 | 30.0 | 0-1-0 | 0-1-0 | 0-1-0 | · ·· ·· | 1-0-0 | 0-0-1 | 1,25 |
| 5 | Piranha | Martin Villwock | Germany | 2200 | 1.0/5 | 20.0 | 0-1-0 | 0-1-0 | 0-1-0 | 0-1-0 | · ·· ·· | 1-0-0 | 0,50 |
| 6 | BigLion | Matthias Gemuh | Cameroon | 2200 | 0.5/5 | 10.0 | 0-1-0 | 0-1-0 | 0-1-0 | 0-0-1 | 0-1-0 | · ·· ·· | 0,75 |
Wednesday, October 13, 2010
A new victim, BigLion
I created last night a tournament among all available engines, I will show the results in another post.
Monday, October 11, 2010
Tiny chess VS Roce
I'm quite happy about that
Saturday, October 9, 2010
Tiny chess VS Tscp181
Today the engine made a mistake against Tscp181 in this position:
As you can see whites have more pieces in the board, but the oponent manage to promote the pawn at a4, so at the end he won, I will have revisit the section code that analizes open ranks.
Today the results were:
- TinyChess 1,5
- Tscp 2,5
Friday, October 8, 2010
GPU chess
http://gpuchess.blogspot.com/
Good luck!
Tuesday, October 5, 2010
Tiny chess in action
11:20:31, Send: 1 57 0 43 Ngf3
11:20:31, Send: 2 0 0 227 Ngf3 Ngf6
11:20:31, Send: 3 57 0 503 Ngf3 Ngf6 Nbc3
11:20:31, Send: 4 0 31 2208 Ngf3 Ngf6 Nbc3 Nbc6
11:20:31, Send: 5 27 31 4100 Ngf3 Ngf6 Nbc3 Nbc6 e3
11:20:31, Send: 6 13 141 12055 Nbc3 Nbc6 d4 Ngf6 e4 e6
11:20:31, Send: 7 29 500 39259 Nbc3 Nbc6 Ngf3 Ngf6 e3 d5 Bfd3
11:20:33, Send: 8 10 1734 137817 Nbc3 Ngf6 Ngf3 Nbc6 e3 d5 Bfb5 Bcd7
11:20:36, Send: 9 24 2438 246414 Nbc3 Ngf6 Ngf3 Nbc6 d4 d5 Bcf4 Bcf5 e3
11:20:45, Send: 10 31 9594 624118 Nbc3 Nbc6 Ngf3 e6 e4 Bfb4 Bfd3 Bbxc3 dxc3 Ngf6
As the engines goes deeper it might change the chain of moves, as you can see it starts with Ngf6 and ends selecting Nbc6 (even if the score if worse), BTW this is the so called "Iterative Deepining"



