Scorpio Chess and Nebiyu Alien

New version 2.8.8 MCTS + NN is available. Significant work has been done with regard to GPU acceleration


Go to my github release page and download pre-compiled binaries of egbbdll64.dll for windows (CPU and GPU). 
Here are the links for convenience


The egbbdll serves dual purpose, namely, for probing bitbases and neural networks so extract it in a directory where bitbases are located
For the GPU version of egbbdll, we need to set the Path environment variable and incase of linux LD_LIBRARY_PATH for the system to find
cudnn.dll and 
other dependencies.

Networks trained from labeled epd positions and CCRL games can be downloaded here

Once you extract these files, you can pick a network by setting the path to network files  in scorpio.ini.


Version 2.8.6  now supports neural network evaluation (no policy network though). The substitute for the policy network
is progressive widening where we consider few moves initially and then increase the number of moves considered
with more simulations. 
I am also experimenting with aggressive pruning to use the slow NN eval with alpha-beta as well. 


    You can train your own network from PGN files or a set of labeled epd positions using nn-train


    Update on MCTS version only: Scorpio 2.8.5 MCTS



    Version 2.8 (February, 2018)  The MCTS search is now very strong due to alpha-beta rollouts.
    There is some work the standard alpha-beta search with regard to tuning search parameters, fixing ABDADA bug
    discovered in TCEC, turning on singular search etc.


    Version 2.7.9 (December 16, 2017)  This version has Monte Carlo Tree Search (MCTS). This is turned off
    by default since it plays at TSCP's level. Feel free to use this to trash AlphaZero's success to be based upon hardware :)
    There were improvements in the now "old" alpha-beta engine regarding tuning of evaluation terms.


    Older version  2.7.8 (Halloween 2017). This release is after 3 and 1/2 years but certainly does not
    have that much work in it. Maybe a 20 elo improvement at best. Changes include parallel and cluster
    search work done in 2014, and automatic evaluation tuning done in the last couple of weeks which 
    prompted this release.

    Only Linux binaries tested by me. Thanks to Dann Corbit, Michel B for the Windows and Mac binaries.
    I will upload Android binaries once I get them working.


    Older version  2.7.7 that played TCEC (March 24, 2014)


    Older version binaries from Jim Ablett (Window, Linux, Android)


    Direct link to android binary with ini file


    Snapshots of day-to-day updates

    Old Scorpio official releases at


    Nebiyu is a general game playing engine based on Scorpio chess. Its target is to support many variants of chess, checkers reversi , go and the game of amazons. Hence many optimizations specific to chess had to be dropped. However the engine is still strong for many humans at least for the above mentioned first three board games. The Go engine still needs a lot of work but I know I can't beat it :)

    The development started out as a "new years resolution" of mine to H.G.Muller's plea for support of the spartan chess variant but it quickly turned out to be very interesting project. Besides the chess engine development, the project also involved modification of the winboard protocol to support these 'alien' variants. Have a look at H.G's page here for full description. Remember to first download and install Winboard 4.5 !

    Download  Nebiyu 1.45 with new Winboard highlighting (New May 15 , 2013)

    Update January 04, 2012:
    •     Multi player chess (quadruple & triple chess) and Hex (not finished yet). 
          The latter had also a cuda counterpart but I don't know where I have it.
    •     Different methods for approximating perft. See help.
    Update January 07, 2012:
    •     I found the test CUDA code for Hex. Here it is

    Egbbdll v4.1 (Latest)

    Egbbdll v3.3 (Older)

    Egbbdll v3.0 (Oldest)

    If it doesn't work for you, check the following frequently made errors. Trust me it works :)

    • Rename the dll to egbbdll.dll without the suffixes. 

    • After downloading the new egbb files from Dann's site, replace the egbb dlls with the ones available here.The v3.2 had issues with SMP.

    • Mixing old and new egbb dlls. Use v3.3 for the new ones and v3.0 for the old ones.

    • Some engines work only for a certain way of egbb path scripting. For example for Toga c:/egbb/ and c:\egbb\ would work but not c:/egbb and c:/egbb. Make sure that the engine displays "EgbbProbe v3.x" message.

    This project is an attempt to equip Nebiyu with a java interface that can be used on any device (originally intended for mobiles). A unique feature of JavaBoard is that it is a multi-player GUI. Two or more players can play one game turn by turn. It uses winboard protocol for communication. UCI engines can also be used using an adapter. It has also a console interface that can be used for fast game playing. The jar javaboard.jar contains GuiTester and ConsoleTester application classes.

    There are basically four types of players:
    1. An engine - Set command line and working directory.
      • Command line : command to be executed when starting process.
        This can be tweaked to use  adapters like polyglot, remote engines, java engines etc
      • Working directory for the engine to find its initialization & log files etc.
    2. A human player - Yes humans could be installed too:)
      • Command line : name of human being
      • Working directory should be set to human 
    3. An ICS player - To play on internet chess servers fics, ics etc with style 12 support.
      JavaBoard acts like a client and will not try to handle tournaments by itself.
      • Command line : address port [username] [password]
      • Working director is ics
    4. A TCP server/client - JavaBoard can act a server and a client. To begin service "Engines->Accept connections @ port"
      Connections can be made from another computer using JavaBoard or any telnet client if you wish. To use JavaBoard client install
      a TCP engine with:
      • Command line : address port [username] [password]
      • Working directory : tcps
      The TCP server supports chats between connected observers. Many ICS style commands are added to the server now. For more
      information type "help commands". You can observe multiple games from game servers and later switch by the game ID.
    You can play in chess servers either by loading an engine , or as a human OR as a combination of engines and humans. Isn't that cool ? This is possible even with old Winboard engines since it places the engine in force mode. Hence more than two colors (other than white/black) is possible.
    You can install engines and play games on this website without downloading! Another cool feature!

    Referee engine
    The referee engine is used to check legality of moves and display the board. You can say it is part of the GUI as it is used for that purpose only.
    For any engine to be a referee engine , it should send the "setup" command after each move. It should do so even when getting an Illegal move.
    So the engine should do either one of the following when receiving any move:
        a) setup newFEN
        b) Illegal move : move
            setup oldFEN
    waits for response from the referee to know if a move is Illegal and update the board accordingly . You can create any board game and create a simple engine (basically a move generator) and take advantage of all features of JavaBoard. Client application need not load a referee engine since the server will send them the board positions. Also since any telnet client like putty can be used, it is unwise to put a restriction of loading a referee engine on the client side.

    The referee engine is written only once for a new variant!! Nebiyu can be used as a referee for many variants so there is almost no need for other referee engines. All existing winboard and uci engines can be played against Nebiyu and also against each other. At first I thought Nebiyu has to be one of the participants since it is the board updater. But with this concept of referee engine any existing engines can be played against each other ! Nebiyu sits as the referee and updates the board on their behalf, checks legality of moves, so it pretty much acts as the GUI. So in short writing a referee engine is only required for a completely new game that Nebiyu don't support (which is very hard to find :) ). Also Nebiyu has highlighting capablities but JavaBoard do not support that yet. I will try to rewrite Nebiyu in Java to avoid loading a refree engine most of the time but that is really not necessary and also not ellegant. Because the point of JavaBoard is that the game rules are to be taken care of by an external referee engine so loading is the true solution..

    Tournaments are handled like in Tennis (i.e game-set-match). First you specify the Match settings
    • Number of games in match - Total number of games in a match
    • Permutation - If there are three players , 3! = 6 games are played by the same participants
    • Time control - Winboard "level 40 5 0" type
    • Pondering - Untested
    Then you can either start a match in which case a single match with the above settings is played among the already loaded engines. Or you can start a tourney in which case JavaBoard loads engines from the participants list according to match settings. Round robin and gauntlet are possible with the current scheme.

    Console mode
    The console mode has the same capabilities and is recommended for fast games. There will be no latency from updating GUI features. Also it is preferable when JavaBoard is used as a server, because multiple games run at the same time.

    ICS Bot
    If an engine and ICS server is loaded, JavaBoard will automatically seek for games by itself. It detects game terminations and send seeks again.  So to run your engine overnight as ICS bot all you have to do is load the engine and 5000 g. No referee is required since we have a server. The console mode with out -debug maybe used to run it in the background with no display.

    Winboard engines which do not send moves in plain coordinate notation (e2e4) do not work. I will not add SAN support because the GUI do not try to interpret moves. You can send "87$@#$" as long as the engines understand what it means. So if both engines understand SAN it works!! One can write a referee engine which converts one move format to the other but it is simpler to assume that two engines can play each other when they use the same move format.

    Changes :
    • FICS seek table added. I don't see much use for the popular "seek graph".  The table seems to work as good. You can sort based on any
      property, say rating of seeker, and then double click on your opponent to play... Simple!
    • A lot of verbose output in ICS mode is off now so only chats and other important staff is displayed. The debug window can be used as a chat
      box too. I am reluctant to add chat boxes for different users, tells, shouts etc...
    • Variants with holdings such as crazy house can be viewed now. Holdings are displayed at the bottom row. Just click on the piece and drop it to make a move.
    • Multiple games can be viewed at the same time with separate windows. If you have enough space you can watch a thousand games since boards are created dynamically. The layout is 2 columns by N rows. You can select any of the boards for further investigation such as move history and plotting  graphs.
    • You can play at most one game , while observing many at the same time. To play a bug-house open one window for your game and watch your partner's game on a separate board placed by the side.
    • The size of the applet is significantly reduced. I was jarring Thumbs.db of Windows XP thumbnail database which was accounting for most of the size. Silly me! Now it is only 180kb compared to previous 530kb. I knew I didn't write that much stuff for all that size!
    • Drag and drop of pieces is added now. Many people prefer that over click-click mode in blitz games, although personally I don't find it as a significant improvement. Anyway you can use both modes at the same time.
    • Flicker free drawing. Tabbed pane browsing of  games in observation list. Separate chat (whisper/kibitz) boxes for each game.
    • Applet size reduced further by 40 kb. Also loading time of applet reduced from 1 minute to 2-3 seconds !! That was achieved by merging
      the image files into one file.
    • Automatic highlighting of moves. This is done by comparing consecutive FENs since JavaBoard has no idea of moves.
    • It is now possible to accept take back offers. It doesn't actually process take back offers directly. When a position with a lesser move number than the previous position is received, it assumes a take back was done. Less headache and more robust.
    • Ics shortcut command buttons similar to Thief's. Less typing!
    • Now every tell from users and channels have a separate chat panel.
    Additional Notes:
    • You can either play online here, or download the jar file here once and use it,  or use the JNLP to launch JavaBoard.  
                                                                                [  Coming Soon ]
    • Do not be frustrated if you don't see a chess board soon! The reason is that JavaBoard is meant as a general game interface and displaying a board at start up is meaningless. Another reason is that I am following a principle that if  no game is being played there  shouldn't be a board. So when a game is over, the board gets destroyed automatically.  If you are playing on a chess server, then boards will be created for each observe command you type. If you are not on a chess server, then you need to load a referee engine to see a board. So far only Nebiyu can do that. It will take care of board displays and check legality of moves. Once you load a referee engine, sigh... you still won't see a board!! Did you say what?? Yes you need to start a match or a tourney. Then.. only then will you be welcomed with a beautifully drawn chess board popping out of nowhere :) The point is that clocks start running when a game is started. So if the a human takes his time thinking on the initial position and decide to make the first move when he wishes, it means he has the advantage on the first move. I know this sounds weird but it is the most logical. I tried the "conventional" way of displaying a chess board, but it introduced a lot of ugly hacks to take care of the the special case condition.
                                                                                  [  Coming Soon  ]

    Screen shots



    JavaBoard has been ported to the android platform named as AlienBoard ( for the sake of attention ). The user will have an experience never seen on planet earth with all the weird chess and other game variants that Nebiyu provides. And if he wants some tough challenge Scorpio can provide that. The work is not finished yet but I think it is at a usable stage for chess engine fanatics who know their way out by typing stuff rather than clicking buttons. You can observe ICS games, play against an opponent, play against an engine, play match between engines, broadcast games from the phone and pretty much everything that the java version can do. It still needs some work in the graphical aspect and organization.

    It comes prepackaged with my engines Scorpio and NebiyuXs (NebiyuChess, NebiyuCheckers, NebiyuGo, NebiyuReversi, NebiyuAmazons and NebiyuAlien). The latter can play many variants of chess and other games. I took some screen shots from my galaxy nexus :

    Google AI-challenge 2011 (Ants)

    I was informed about this contest about a week after it was officially announced. Then I decided to give it a try and picked up the java starter package. It turned out to be a lot of fun and challenging at the same time. There were a total of ~7300 participants! I got 165th place in the finals. I was more or less satisfied with the result but it could have been better given my performance in the beta stages and tcp servers. You can find my code here. It was quite  a different experience from the kind of problem solving I was used to. I could not use min-max or any of the multi-player algorithms I learned recently mainly due to  large state-space complexity (5^N where N is number of ants) and imperfect information (fog of war, simultaneous moves etc..). The game involves two major goals: a) Exploration - exploring the map and maximizing visibility for foraging. Due to the fog of war each ant can only see within a certain radius.  b) Combat - Killing enemy ants without taking losses.  Breadth first search, A* search and collaborative diffusion were the algorithms mostly used for exploration. Collaborative diffusion is a new approach that allows agents (ants) to collaborate in achieving a goal . Combat can be done using different heuristics: influence maps, a sort of monte-carlo simulation within the allotted time (500 ms), a minmax approach  or a plain & dumb approach that I used in my bot. You can find discussions about the different methods people used here.

    If you want to study a new language this contest is for you. Starter packages are available in many languages and if there is none you can write one yourself. Speed is not a big issue for the contest so people write bots in php , javascript or any other awkward scripting language you can imagine. It has certainly invigorated my interest in programming languages. I will be participating in future ai challenges as much as I can. 


    I sometimes write some papers related to game programming. They are not peer-reviewed but I hope one day to be able to publish them. Please check them out and let me know if you have suggestions, comments etc.


    variant normal variant shatranj variant jetan variant giveaway variant gothic
    h2h3 4463070 h2h3 1066655 i2i3 238505736 h2h3 2053087 j2j3 27192885
    h2h4 5385554 g2g3 1163857 i2j3 238749705 h2h4 2289701 j2j4 30994639
    g2g3 5346260 f2f3 1178010 i2h3 237088081 g2g3 2631070 i2i3 32395645
    g2g4 5239875 e2e3 1318410 h2h3 239114732 g2g4 1373678 i2i4 32792521
    f2f3 4404141 d2d3 1470254 h2i3 283533495 f2f3 2504977 h2h3 28638475
    f2f4 4890429 c2c3 1171567 h2g3 263464939 f2f4 2251339 h2h4 32192319
    e2e3 9726018 b2b3 1163900 g2g3 245871608 e2e3 3139671 g2g3 43282666
    e2e4 9771632 a2a3 1062225 g2h3 245983884 e2e4 2161741 g2g4 42731248
    d2d3 8073082 g1h3 1211844 g2f3 245220431 d2d3 3233771 f2f3 34872810
    d2d4 8879566 g1f3 1637880 f2f3 266219051 d2d4 2338832 f2f4 39637679
    c2c3 5417640 b1c3 1657184 f2g3 263196045 c2c3 2531638 e2e3 44387071
    c2c4 5866666 b1a3 1217310 f2e3 282589946 c2c4 2276329 e2e4 47620503
    b2b3 5310358 f1h3 950138 e2e3 256291080 b2b3 2602974 d2d3 39464276
    b2b4 5293555 f1d3 1200263 e2f3 272718219 b2b4 1399843 d2d4 43835739
    a2a3 4463267 c1e3 1333680 e2d3 272358445 a2a3 2060617 c2c3 32854158
    a2a4 5363555 c1a3 1061532 d2d3 257118091 a2a4 2710239 c2c4 35099755
    g1h3 4877234 nodes 19864709 d2e3 274567798 g1h3 1963145 b2b3 30383101
    g1f3 5723523     d2c3 256505597 g1f3 2402530 b2b4 31008755
    b1c3 5708064 variant grand c2c3 247575445 b1c3 2385274 a2a3 27166638
    b1a3 4856835 j3j4 926416584 c2d3 254867051 b1a3 1953706 a2a4 30975700
    nodes 119060324 j3j5 985626466 c2b3 284090637 nodes 46264162 i1j3 28933894
        i3i4 1016953859 b2b3 238413740     i1h3 30322738
    variant spartan i3i5 1023258694 b2c3 245105589 variant wildcastle b1c3 32136750
    h2h3 15137689 h3h4 987444340 b2a3 238494227 h2h3 4463070 b1a3 28942056
    h2h4 18279353 h3h5 1048171919 f1h3 277552978 h2h4 5385554 e1f3 55839014
    g2g3 18167235 g3g4 1107909883 f1i4 259949909 g2g3 5346260 e1d3 59098582
    g2g4 17854666 g3g5 1135836371 f1d3 294613192 g2g4 5239875 g1h3 37809042
    f2f3 15006559 f3f4 1132998143 f1c4 287130043 f2f3 4404141 g1f3 44620553
    f2f4 16384078 f3f5 1204003753 f1f3 294820471 f2f4 4890429 nodes 1025229212
    e2e3 34143618 e3e4 1142113125 f1f4 287749779 e2e3 9726018  
    e2e4 34110467 e3e5 1180552966 j2i4 275333885 e2e4 9771632 variant capablanca
    d2d3 27586700 d3d4 1238509376 j2j3 237906109 d2d3 8073082 j2j3 28588868
    d2d4 29930527 d3d5 1271704929 a2b4 283841647 d2d4 8879566 j2j4 32465690
    c2c3 18781609 c3c4 988670513 a2a3 238397492 c2c3 5417640 i2i3 24802715
    c2c4 19904214 c3c5 1021359164 g1j4 263743951 c2c4 5866666 i2i4 26996704
    b2b3 17852989 b3b4 990255438 g1d4 300690283 b2b3 5310358 h2h3 31717791
    b2b4 17767267 b3b5 993530245 g1h4 274902912 b2b4 5293555 h2h4 35870856
    a2a3 15137201 a3a4 925923718 g1f4 292971748 a2a3 4463267 g2g3 27723215
    a2a4 18212175 a3a5 985396376 d1g4 283723187 a2a4 5363555 g2g4 29988375
    g1h3 16576919 i2g1 679622733 d1a4 241913922 g1h3 4877234 f2f3 52623654
    g1f3 19428214 i2j4 904919060 d1e4 260198030 g1f3 5723523 f2f4 52678872
    b1c3 19451039 i2h4 934207293 d1c4 249992615 b1c3 5708064 e2e3 43107759
    b1a3 16560624 b2c4 963807277 nodes 11053075725 b1a3 4856835 e2e4 46818840
    nodes 406273143 b2d1 611949233     nodes 119060324 d2d3 46397175
        b2a4 906296328 variant berolina     d2d4 48325852
    variant knightmate h2g1 704232356 h2g3 36834945 variant nocastle c2c3 30363782
    h2h3 3548296 h2i1 730644480 h2f4 38059646 h2h3 4463070 c2c4 32155480
    h2h4 3965844 c2b1 780729960 g2f3 25564123 h2h4 5385554 b2b3 28126504
    g2g3 4232616 c2d1 656547147 g2e4 28939805 g2g3 5346260 b2b4 30369092
    g2g4 4086545 j1j2 796361533 g2h3 25540855 g2g4 5239875 a2a3 28701556
    f2f3 2911930 j1i1 861374080 f2e3 23916436 f2f3 4404141 a2a4 32556619
    f2f4 3287482 j1h1 841870033 f2d4 24825307 f2f4 4890429 i1j3 30250326
    e2e3 5872106 j1g1 820921481 f2g3 24069667 e2e3 9726018 i1h3 33345105
    e2e4 5788856 j1f1 777815072 f2h4 25429381 e2e4 9771632 b1c3 32058743
    d2d3 4438701 j1e1 754691198 e2d3 33948623 d2d3 8073082 b1a3 28723639
    d2d4 5425047 j1d1 690632833 e2c4 37925078 d2d4 8879566 h1i3 52668083
    c2c3 4586617 j1c1 752291471 e2f3 33661156 c2c3 5417640 h1g3 53499031
    c2c4 4503549 j1b1 729895694 e2g4 41182235 c2c4 5866666 c1d3 39217127
    b2b3 3867050 a1a2 796366979 d2c3 42157116 b2b3 5310358 c1b3 35660984
    b2b4 3901827 a1b1 884015185 d2b4 47943923 b2b4 5293555 nodes 1015802437
    a2a3 3551382 a1c1 862102365 d2e3 36259045 a2a3 4463267  
    a2a4 3932115 a1d1 750832158 d2f4 39616022 a2a4 5363555 variant courier
    e1f3 3390709 a1e1 775884542 c2b3 24219580 g1h3 4877234 l2l3 3847421
    e1d3 3278311 a1f1 756868821 c2a4 27635999 g1f3 5723523 k2k3 4120544
    nodes 74568983 a1g1 756148657 c2d3 27130497 b1c3 5708064 j2j3 5016259
        a1h1 733752492 c2e4 29366193 b1a3 4856835 i2i3 4510324
    variant suicide a1i1 709911880 b2a3 25576566 nodes 119060324 h2h3 7333311
    h2h3 2053087 d2c1 898037738 b2c3 25550030     g2g3 4500766
    h2h4 2289701 d2e1 855713609 b2d4 28296775 variant makruk f2f3 5355926
    g2g3 2631070 d2d1 803976828 a2b3 36675142 h3h4 7353858 e2e3 7428214
    g2g4 1373678 e2d1 708649870 a2c4 38045858 g3g4 6388244 d2d3 4926581
    f2f3 2504977 e2f1 759173322 g1h3 30622502 f3f4 6975587 c2c3 5078731
    f2f4 2251339 e2e1 756500338 g1f3 29161739 e3e4 6400120 b2b3 4119570
    e2e3 3139671 f2d1 748272189 b1c3 29016218 d3d4 6386776 a2a3 3847484
    e2e4 2161741 f2g4 1316986866 b1a3 30560409 c3c4 7003885 k1l3 4258951
    d2d3 3233771 f2h1 841974292 nodes 947730871 b3b4 6388190 k1j3 5399303
    d2d4 2338832 f2e4 1307914981     a3a4 7355946 b1c3 5422452
    c2c3 2531638 f2f1 798623231     g1e2 6888903 b1a3 4259019
    c2c4 2276329 g2e1 607591087     b1d2 6398234 j1l3 3517286
    b2b3 2602974 g2h4 1034902615     f1g2 5332152 j1h3 4168629
    b2b4 1399843 g2i1 652877801     f1e2 4392684 c1e3 4163175
    a2a3 2060617 g2f4 1143790059     f1f2 4369015 c1a3 3515201
    a2a4 2710239 g2f1 609764914     c1d2 4392680 nodes 94789147
    g1h3 1963145 g2h1 660028804     c1b2 5772206  
    g1f3 2402530 nodes 57736106747     c1c2 4844685  
    b1c3 2385274         h1h2 9506195  
    b1a3 1953706         a1a2 9494323  
    nodes 46264162         e1f2 5748471  
                e1d2 4820792  
                d1e2 5225018  
                d1c2 5736405  
                d1d2 4903680  
                nodes 142078049