boettcherb / DeepBlunder-Chess-Engine

A homemade UCI chess engine written from scratch in C++. Play against it on lichess.org.
https://lichess.org/@/DeepBlunder-Bot
0 stars 0 forks source link

suggestions for features / improvements #2

Closed tissatussa closed 1 month ago

tissatussa commented 1 month ago

[ consider this Issue a follow-up of my #1 ]

thanks for the Makefile ! i think this method is awesome, i like Makefiles .. i'm not much into C++ but often i can repair code, if needed .. i also often adjust a Makefile to add optimization flags, set my compiler version etc. although i have no clue how to compare different binaries .. in fact i have no real complaints about your Makefile, and i had no warnings or errors, but here are some remarks :

other remarks :

Btw. your v1.1.6 is considerably faster then v1.0.0 ! It reaches depth 9 easily, not only 4 or 5 .. another reason to compile a fastest binary, i guess :-)

Nepo-Amazed

i'm now playing my first game with your engine .. i'll post the result here !

[ i'm on Xubuntu 22.04 ]

tissatussa commented 1 month ago

here's my play, i won with the Black pieces. it was a 15 minute game, in the end i succeeded to calculate deeper then 9 ply or so : the engine didn't see i was tempi ahead to promote one of my pawns :

deepblunder-vs-tissatussa-ani

[ animation created by Apronus.com ]

deepblunder-lichess-graph

[Event "human vs engine"]
[Site "Holland @ https://lichess.org/UEbK2Aom "]
[Date "2024.08.10"]
[Round "1"]
[White "DeepBlunder v1.1.6"]
[Black "Roelof Berkepeis"]
[Result "0-1"]
[ECO "B00"]
[GameDuration "00:40:20"]
[Opening "King's pawn Opening"]
[PlyCount "128"]
[TimeControl "900+3"]

1. e4 {+0.25/9 33s} d6 {235s} 2. Nc3 {+0.40/9 32s} Nf6 {100s}
3. d4 {+0.25/8 31s} a6 {23s} 4. Nf3 {+0.60/8 30s} Bg4 {18s} 5. Bc4 {+0.55/8 29s}
b5 {31s} 6. Bd3 {+0.60/9 28s} Nc6 {12s} 7. d5 {+0.60/9 28s} Nd4 {15s}
8. Be3 {+0.75/9 27s} c5 {74s} 9. dxc6 {+0.70/9 26s} Nxc6 {2.5s}
10. O-O {+0.60/8 25s} Ne5 {18s} 11. Be2 {+0.75/9 24s} Bxf3 {54s}
12. gxf3 {+0.70/9 24s} Qc8 {32s} 13. f4 {+0.70/8 23s} Nc4 {21s}
14. Bxc4 {+0.70/9 22s} Qxc4 {6.5s} 15. e5 {+0.60/8 22s} dxe5 {50s}
16. fxe5 {+0.45/9 21s} Rd8 {2.1s} 17. Qe2 {+0.55/9 20s} Qg4+ {187s}
18. Kh1 {+0.50/10 20s} Qxe2 {7.8s} 19. Nxe2 {+0.40/10 19s} Ng4 {2.3s}
20. Bd4 {+0.60/9 19s} h5 {27s} 21. f3 {+0.85/8 18s} Nh6 {14s}
22. Rad1 {+0.80/8 18s} e6 {11s} 23. Kg1 {+0.55/8 17s} Nf5 {10.0s}
24. Bf2 {+0.45/10 17s} Be7 {83s} 25. Rxd8+ {+0.40/10 16s} Kxd8 {3.5s}
26. Nd4 {+0.50/9 16s} Nxd4 {33s} 27. Bxd4 {+0.40/10 15s} h4 {6.3s}
28. Rd1 {+0.35/9 15s} Kc8 {13s} 29. Rd3 {+0.35/9 15s} h3 {12s}
30. Rc3+ {+0.30/9 14s} Kb7 {1.8s} 31. f4 {+0.35/10 14s} Rd8 {49s}
32. Rd3 {+0.20/10 14s} Rxd4 {36s} 33. Rxd4 {+0.25/11 13s} Bc5 {1.7s}
34. c3 {+0.30/12 13s} b4 {2.3s} 35. Kf2 {+0.20/12 12s} bxc3 {3.6s}
36. bxc3 {+0.20/12 12s} Bxd4+ {5.0s} 37. cxd4 {+0.10/14 12s} Kc6 {35s}
38. Kg3 {+0.05/14 12s} Kd5 {1.7s} 39. Kxh3 {-0.65/14 11s} Kxd4 {13s}
40. Kg2 {-0.60/13 11s} Kc3 {1.7s} 41. Kg1 {-0.75/13 11s} Kb2 {1.4s}
42. a4 {-1.00/14 10s} a5 {1.3s} 43. Kf2 {-1.25/14 10s} Kb3 {1.1s}
44. Ke3 {-1.25/13 10.0s} Kxa4 {1.3s} 45. f5 {-2.00/13 9.8s} Kb3 {5.7s}
46. fxe6 {-2.50/13 9.5s} fxe6 {3.7s} 47. Kd2 {-7.75/14 9.3s} Kb2 {7.3s}
48. Kd3 {-8.80/14 9.1s} a4 {2.3s} 49. Kc4 {-8.80/14 8.9s} a3 {1.5s}
50. Kc5 {-8.80/13 8.7s} a2 {1.6s} 51. Kd6 {-8.80/12 8.5s} a1=Q {2.7s}
52. Kxe6 {-8.80/10 8.3s} Kc3 {5.2s} 53. Kd6 {-9.00/10 8.2s} Qa6+ {3.9s}
54. Ke7 {-9.10/10 8.0s} Kd4 {5.3s} 55. e6 {-9.10/10 7.8s} Ke5 {1.9s}
56. Kf7 {-9.10/10 7.7s} g5 {2.3s} 57. Kg6 {-10.30/10 7.5s} g4 {62s}
58. Kf7 {-10.70/10 7.4s} Qxe6+ {6.8s} 59. Kg7 {-M8/10 7.2s} Qe7+ {11s}
60. Kg6 {-M8/10 7.1s} Qd7 {27s} 61. h3 {-M8/10 6.9s} gxh3 {5.7s}
62. Kg5 {-M6/10 6.8s} Qg7+ {8.6s} 63. Kh4 {-M4/10 6.7s} Kf4 {4.7s}
64. Kxh3 {-M2/10 6.5s} Qg3# {1.8s, Black mates} 0-1

the LiChess graph indeed shows 1 blunder .. so, i think your logo just landed here :

deepblunder-logo

boettcherb commented 1 month ago

Wow, these are great suggestions! I will definitely be working on implementing these over the next few days.

If you want to design a logo for the engine, go for it! I'd be interested to see what you come up with.

boettcherb commented 1 month ago

Interesting game! I noticed that that blunder was the king heading back to g1 instead of toward the center. Currently, g1 is one of the only squares in the piece-square table where the king gets a bonus, so it is encouraged to castle. I was able to beat my engine once (out of many tries) because it missed an attack sequence that was over 10 ply deep (https://lichess.org/zH5hNpEu). That's a funny logo, I think I might use it!

tissatussa commented 1 month ago

..If you want to design a logo for the engine, go for it! I'd be interested to see what you come up with..

it just did !

btw. did you know a Makefile can be created with extended features like questions ? thus let the user select custom options, detect CPU features and set options accordingly, etc. .. cmake fully supports many commands and constructs for this but i guess make offers same .. recently ChatGPT told me a lot about this, see this session - it's a long read but it has interesting topics which may inspire.

btw. ChatGPT helps me a lot while coding .. but only with good wording : asking clear questions and often ask for confirmation, because ChatGPT is not always right ..

tissatussa commented 1 month ago

the ChatGPT session about cmake etc is not the one i wanted to mention .. also see this session about make features like questions and little menus while Making .. this script language seems to have many commands and we can do a lot with it .. on the other side, best is to keep things simple .. but i might try to create a nifty Makefile with menus, just for fun and to learn.

tissatussa commented 1 month ago

..Currently, g1 is one of the only squares in the piece-square table where the king gets a bonus, so it is encouraged to castle..

that's a simple smart rule, but only when the King is still able to castle .. you can detect that and use another PST ?! And did you ever consider the amount of pieces on the board regarding tapered PSTs, MG and EG ? (common methods) Even value the complexity of the position (i once saw a formula / method for that) and act upon it by PST type. Such value can also set a type of time management : how critical (complex) is the position, is it worth spending longer time ? Just to avoid blunders in 'critical' positions, e.g. with many possible captures .. these are just some ideas which intrige me and they may inspire.

zonder-dat-het2

tissatussa commented 1 month ago

i see you just released v1.1.7 .. congrats ! i compiled the source code without any warnings or errors and it plays well in CuteChess !

i also see you added a decent README, supplied assets and a history text .. well done !

[ i close this Issue ]

boettcherb commented 1 month ago

Yes, I have implemented most of your suggestions. Let me know if you have any more! Next, I will work on improving the evaluation function and the engine's time management (I noticed it still flags some games on lichess).

tissatussa commented 1 month ago

..Let me know if you have any more!

one little thing : in the README you use triple backtick chars around single words or phrases but you don't have to : just use single backticks there .. triples are used to put around a set of lines, like you did with the 'bash' commands. Btw. i'd use "\<u>uci\</u>" around those single words or phrases, and maybe ALSO use single backticks there, it makes the text a bit more clear.

boettcherb commented 1 month ago

Thanks, I did not know about the single vs triple backticks