Showing posts with label Chess. Show all posts
Showing posts with label Chess. Show all posts

Saturday, October 10, 2026

ChessKISS 2.1, Autumn version

This version improves many things over 2.0, I guess now ELO is between 2500 and 2600, which is not bad at all.
  • 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
You can download it at ChessKISS 2..1

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

I've three big TODO's left in this project:
  • 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?
what's new:
  • 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
Enjoy carnival!

Find the new binaries at OneDrive

Tuesday, December 21, 2021

ChessKISS 1.8a, final?

Hi

After some months of intensive debugging and tuning, I've ready the last version of the year 2021 (will see how long it takes for a new version, if any...)

what's new:

  • 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
Seems engine is stronger but who knows if that is true.

Find the new binaries at OneDrive

Merry xmas!

Sunday, November 14, 2021

Chesskiss 1.8 is out after 6 years...

The last two months I found myself looking again into the code (don't ask me why...), after some time trying to understand it then I did some improvements that today I'm publising.

From what's new:
  • 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
Don't expect a big ELO increase but at least now the code has been refactored and it would make a new release a bit easier to do.

Find the new binaries at OneDrive

Thursday, February 16, 2017

ChessKISS still alive

ChessKISS won two minor leagues, I'm very proud of this little creature :-)

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!

After three years I found some motivation to recheck the sources and try to play a bit, the version and date is not a coincidence at all.

These are the main changes:
  • 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 


Found binaries and sources at OneDrive

Thursday, February 7, 2013

World Regional Teams Challenge

It seems that ChessKISS was included on a funny world tournament as part of the Southern team, the teams were:

REST OF THE WORLD
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

Well, the southerns were the winners!

Final Standings 

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

ChessKISS was second on his team with 9 points:

SOUTHERN EUROPE 
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


Not too bad...

Final Standings

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

 WBEC Ridderkerk, 5th division Group C.
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

The new version of ChessKISS is ready to be downloaded, this version easily beats version 1.5b.

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...

It seems that I took for grant that everybody have SSE4 :-), that's why I didn't have any issue, time to deploy the patch!

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?

This project does not longer motivate me as much as it should (at least with its current architecture), let's see what the future hold...

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

It is a nice feeling to see your little creature evolve, specially if it wins, but it is really difficult to tune these creatures, I mean, you modify a tiny part of the program and the results can be catastrophic an the worse thing is that you don't even notice it until the engine starts loosing miserably against other engines, then you have to rollback all changes and start measuring and per one again, slow and painfull...

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

RankEngineAuthorCountryRatingScore%ChPuTsMsPiBiS-B
1ChessKISSAbel BelzuncesSpain22005.0/5100.0· ·· ··1-0-01-0-01-0-01-0-01-0-0 10,00 
2Pulsar2009-9bMike AdamsUSA22004.0/580.00-1-0· ·· ··1-0-01-0-01-0-01-0-0 6,00 
3Tscp181Tom KerriganUSA22003.0/560.00-1-00-1-0· ·· ··1-0-01-0-01-0-0 3,00 
4MscpMarcel van KervinckNetherlands22001.5/530.00-1-00-1-00-1-0· ·· ··1-0-00-0-1 1,25 
5PiranhaMartin VillwockGermany22001.0/520.00-1-00-1-00-1-00-1-0· ·· ··1-0-0 0,50 
6BigLionMatthias GemuhCameroon22000.5/510.00-1-00-1-00-1-00-0-10-1-0· ·· ·· 0,75

Wednesday, October 13, 2010

A new victim, BigLion

After all, the engine is not that bad...

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 Tscp181, part 2

Definitely there is an error in the check repetition code, shame on me...



Time to sleep

Tiny chess VS Roce

Today I play against this engine for the first time and we end up in a draw due to threefold repetition (I think the code does not cover properly this situation)


I'm quite happy about that

Saturday, October 9, 2010

Tiny chess VS Tscp181

I'm glad that I've reach a point in which TinyChess beats Tscp181 quite often (the longer the game the more possibilities has TinyChess), next milestone is to beat Mediocre Chess at least once... :-)

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

I have found out a project that aims to parallelize the chess parts in a GPU (NVidia, etc), this is not an easy task...

http://gpuchess.blogspot.com/

Good luck!

Tuesday, October 5, 2010

Tiny chess in action

This is a log from the initial position, white moving with the openings book off (otherwise I cannot measure the speed improvements):


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 


It took 14 seconds to search to depth 10, the nodes searches were 1.066.744, not bad, but not enough to beat the oponents out there... (crafty searches 1.000.000 nodes per second while I search 75.000, of course my goal is not to get close to that, but at least double or triple that number)

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"