Hi guys, for some reason my previous post wen silently,
so I've added these magic words: "new engine release" to attract the attention.
So here's the link: https://github.com/maksimKorzh/wukongJS
Play online: https://maksimkorzh.github.io/wukongJS/wukong.html
You can open developer tools and play around with API
Features:
- Javascript chess engine
- UCI (nodejs) and browser interfaces
- public API, so it can me embedded into sites or used as back-end library
Strength is around 1400 Elo
- material, PST eval, opening/endgame distinguishing for pawns, kings and rooks, no tapered eval though
- fully handcrafted PSTs (no copy paste, only my original weird ideas)
- very basic move ordering, so it goes no deeper than 5-6 plies within 1 second on my laptop
I just didn't yet work on search/eval/strength at all yet, it's just a placeholder.
I put the most effort into interfaces and API.
Nothing much to get feedback for regarding playing strength, but I'd like you to have a look at the
source code and give a feedback regarding architecture and interface interactions.
Thanks in advance!
P.S. UI is originally handcrafted as well - no third party libraries, even like bootstrap or jquery.
New engine release - Wukong JS
Moderators: hgm, Rebel, chrisw
-
- Posts: 771
- Joined: Sat Sep 08, 2018 5:37 pm
- Location: Ukraine
- Full name: Maksim Korzh
New engine release - Wukong JS
Didactic chess engines:
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
-
- Posts: 253
- Joined: Mon Nov 16, 2020 12:13 pm
- Full name: Manuel Rivera
Re: New engine release - Wukong JS
Nice job !
A question : why your prefer going the javascript way rather than developping your UCI engine in C ?
A question : why your prefer going the javascript way rather than developping your UCI engine in C ?
Raspberry Pi4 bot : https://lichess.org/@/BetterAnalyze
-
- Posts: 771
- Joined: Sat Sep 08, 2018 5:37 pm
- Location: Ukraine
- Full name: Maksim Korzh
Re: New engine release - Wukong JS
Thanks) first feedback)
I already have an engine in C: https://github.com/maksimKorzh/bbc
I've realized that I would never be smart enough to compete with strong engines - I'm just too dumb for that)
So i've tried something that can bring use for other people, so here're the reasons to consider javascript:
1. Easy to use, even non-programmers can run it in browser easily
2. Having two interfaces (UCI and Browser) but single code base.
3. Having same strength in browser and UCI mode (chrome is as fast as nodejs)
4. Providing possibility of reusing engine's features via API for custom purposes, e.g. one can make tactics solver or PGN viewer with it (API needs some work though)
5. Javascript makes it easier to work with dynamic memory - I can manipulate the move stack by saying arr.push() and arr.pop()
6. In future things like PGN parsing or converting PGN to set of FENs or string manipulations are much easier in javascript
In simple words all the reasons why you would consider high level language over low level.
The only issue of JS is performance obviously, but without a need to compete with strong engines
I just set a goal of RELATIVE improvements - make search searching several plies deeper, relative elo gains after experiments with eval.
Also when I saw strong JS engines (2500+) like tomitank I've realized that even in JS it takes ages to get to 2500 for me)
I was making lot's of didactic materials, now I just want to go deeper and understand techniques better, enjoy the development process
and not being much bothered with the end result. Just a small explanation - I made 95 video series in how to make a bitboard chess engine
in C and then copypasted SF NNUE and got 2937 ELO - but that's not my achievement. Now I'm not looking for high Elos anymore but
rather for working out existing search optimization techniques. Also maybe I'll master Texel's or similar tuning one day)
Didactic chess engines:
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
-
- Posts: 490
- Joined: Tue Feb 04, 2014 12:25 pm
- Full name: Colin Jenkins
Re: New engine release - Wukong JS
Hi Maksim,
Very nice. I agree with your reasons. My thinking was very similar.
Very nice. I agree with your reasons. My thinking was very similar.
-
- Posts: 771
- Joined: Sat Sep 08, 2018 5:37 pm
- Location: Ukraine
- Full name: Maksim Korzh
Re: New engine release - Wukong JS
Thanks you, do you have somewhat a similar project to share? I'd love to have a look!
Didactic chess engines:
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
-
- Posts: 490
- Joined: Tue Feb 04, 2014 12:25 pm
- Full name: Colin Jenkins
Re: New engine release - Wukong JS
Yes and I have found javascript a lot of fun as you suggest.maksimKorzh wrote: ↑Mon Dec 21, 2020 9:51 pm
Thanks you, do you have somewhat a similar project to share? I'd love to have a look!
https://github.com/op12no2/lozza
https://github.com/op12no2/lozza-ui
You may also be interested in Tamás Kuzmics's Tomitank https://github.com/tomitank/tomitankChess which is bitboard based now and a lot stronger than Lozza.
-
- Posts: 771
- Joined: Sat Sep 08, 2018 5:37 pm
- Location: Ukraine
- Full name: Maksim Korzh
Re: New engine release - Wukong JS
You're lozza author?? Wow! I love lozza! And of course I'm aware of that) Also aware of tomitank - amazing JS engine.op12no2 wrote: ↑Mon Dec 21, 2020 10:34 pmYes and I have found javascript a lot of fun as you suggest.maksimKorzh wrote: ↑Mon Dec 21, 2020 9:51 pm
Thanks you, do you have somewhat a similar project to share? I'd love to have a look!
https://github.com/op12no2/lozza
https://github.com/op12no2/lozza-ui
You may also be interested in Tamás Kuzmics's Tomitank https://github.com/tomitank/tomitankChess which is bitboard based now and a lot stronger than Lozza.
Didactic chess engines:
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
-
- Posts: 490
- Joined: Tue Feb 04, 2014 12:25 pm
- Full name: Colin Jenkins
Re: New engine release - Wukong JS
Yes, cheers She has not had much love recently but today I suddenly found some interest again - weird how that works.maksimKorzh wrote: ↑Mon Dec 21, 2020 11:38 pm You're lozza author?? Wow! I love lozza! And of course I'm aware of that) Also aware of tomitank - amazing JS engine.
-
- Posts: 771
- Joined: Sat Sep 08, 2018 5:37 pm
- Location: Ukraine
- Full name: Maksim Korzh
Re: New engine release - Wukong JS
I've been dropping chess programming 'forever' countless number of times but than returned every time) so it's really cool that your interest has come back. Btw I was using bootstrap/jquery/chessboardjs libs before (for my bbc engine) but this time found lots of fun creating chess board view completely from scratch.op12no2 wrote: ↑Tue Dec 22, 2020 10:15 amYes, cheers She has not had much love recently but today I suddenly found some interest again - weird how that works.maksimKorzh wrote: ↑Mon Dec 21, 2020 11:38 pm You're lozza author?? Wow! I love lozza! And of course I'm aware of that) Also aware of tomitank - amazing JS engine.
So how are you planning to improve lozza?
Didactic chess engines:
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
-
- Posts: 1784
- Joined: Wed Jul 03, 2019 4:42 pm
- Location: Netherlands
- Full name: Marcel Vanthoor
Re: New engine release - Wukong JS
Cool If you enjoy developing an engine in Javascript more than in C, then you should use Javascript. If possible, I'd actually recommend TypeScript, because it basically is "JavaScript with types"; it makes writing complex programs less error-prone.maksimKorzh wrote: ↑Mon Dec 21, 2020 9:32 pmThanks) first feedback)
I already have an engine in C: https://github.com/maksimKorzh/bbc
I've realized that I would never be smart enough to compete with strong engines - I'm just too dumb for that)
So i've tried something that can bring use for other people, so here're the reasons to consider javascript:
1. Easy to use, even non-programmers can run it in browser easily
2. Having two interfaces (UCI and Browser) but single code base.
3. Having same strength in browser and UCI mode (chrome is as fast as nodejs)
4. Providing possibility of reusing engine's features via API for custom purposes, e.g. one can make tactics solver or PGN viewer with it (API needs some work though)
5. Javascript makes it easier to work with dynamic memory - I can manipulate the move stack by saying arr.push() and arr.pop()
6. In future things like PGN parsing or converting PGN to set of FENs or string manipulations are much easier in javascript
In simple words all the reasons why you would consider high level language over low level.
The only issue of JS is performance obviously, but without a need to compete with strong engines
I just set a goal of RELATIVE improvements - make search searching several plies deeper, relative elo gains after experiments with eval.
Also when I saw strong JS engines (2500+) like tomitank I've realized that even in JS it takes ages to get to 2500 for me)
I was making lot's of didactic materials, now I just want to go deeper and understand techniques better, enjoy the development process
and not being much bothered with the end result. Just a small explanation - I made 95 video series in how to make a bitboard chess engine
in C and then copypasted SF NNUE and got 2937 ELO - but that's not my achievement. Now I'm not looking for high Elos anymore but
rather for working out existing search optimization techniques. Also maybe I'll master Texel's or similar tuning one day)
There are many goals you could set:
- Strength over everything: Some people want to write the strongest engine they can, and use the fastest programming language and any trick in the book to speed up the code, maintainability and readability be damned.
- Future-proof / maintainable, and still being as fast as C without using C: that is my goal, and therefore I use Rust. I intend to write this engine for the long haul. (I intend for this engine to still exist in another 25 years, as it is also going to become my own sparring partner, using a Level function.) Therefore I try to make the code as perfect, readable, and maintainable as possible, and at the same time, as fast as I can with my current knowledge. Then I can surmise that, if another engine is stronger, it has more features for move generation, search and evaluation.
- Choose the language you like best without regard to performance, and then see how far you can take the engine in that language. Java is often derided, but it is possible to write a strong chess engine in it. See CuckooChess ( https://en.wikipedia.org/wiki/CuckooChess ), written by Peter Österlund; the same author as Texel, and the inventor of Texel Tuning. CuckooChess is around 2600 ELO. (I don't know how far developed it is with regard to features. Maybe it could have been even stronger.)
It would be cool if you'd be able to write a 2400+ ELO chess engine in Javascript. That would prove that, at least up to ~2400 ELO, the programming language hardly matters.