ddugovic / Stockfish

Retired multi-variant fork of popular UCI chess engine; please use Fairy-Stockfish instead
https://github.com/ianfab/Fairy-Stockfish
GNU General Public License v3.0
132 stars 44 forks source link

Documentation: Usage and GUIs #497

Closed ianfab closed 5 years ago

ianfab commented 6 years ago

I have seen several threads where people are asking how to use multi-variant Stockfish offline for crazyhouse, atomic, etc. I looked into the wiki and the readme, and I could not find much information on the variant-specific differences in usage compared to official Stockfish.

It might be a good idea to explain the command-line usage (mainly the UCI_Variant option) and list a few GUIs that are known to work well with multi-variant SF, since it is not like for standard chess where there are dozens or hundreds of suitable GUIs. We could e.g. add such information to the wiki and link to it from the readme. In my experience XBoard/Winboard, PyChess, and cutechess could be recommended, but I have not really tried other GUIs.

What do you think?

ddugovic commented 6 years ago

Sounds fun, although I have not recently tried any GUIs. Beyond using UCI_Variant (options listed in response to the uci command) and how to format a FEN string, I'm unsure what else to document...

khurshid-alam commented 6 years ago

@ddugovic Please add some intruction about this. I am preety sure scid is capabale of playing multivariant stockfish as it can play default stockfish just fine.

Also, Is there any way to set a variant like 3check default during compilation? If so please add it to the doc.

ddugovic commented 6 years ago

UCI Protocol example usage:

$ ./stockfish
Stockfish 2018-03-10 64 BMI2 Multi-Variant by D. Dugovic, F. Fichter et al.
uci
id name Stockfish 2018-03-10 64 BMI2 Multi-Variant
id author D. Dugovic, F. Fichter et al.

option name Debug Log File type string default 
option name Contempt type spin default 12 min -100 max 100
option name Threads type spin default 1 min 1 max 512
option name Hash type spin default 16 min 1 max 131072
option name Clear Hash type button
option name Ponder type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Move Overhead type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 84 min 10 max 1000
option name nodestime type spin default 0 min 0 max 10000
option name UCI_Chess960 type check default false
option name UCI_Variant type combo default chess var chess var giveaway var atomic var crazyhouse var extinction var grid var horde var kingofthehill var losers var racingkings var 3check var twokings var suicide var bughouse var displacedgrid var loop var slippedgrid var twokingssymmetric
option name SyzygyPath type string default <empty>
option name SyzygyProbeDepth type spin default 1 min 1 max 100
option name Syzygy50MoveRule type check default true
option name SyzygyProbeLimit type spin default 6 min 0 max 6
uciok
$ ./stockfish
Stockfish 2018-03-10 64 BMI2 Multi-Variant by D. Dugovic, F. Fichter et al.
setoption name UCI_Variant value crazyhouse
info string variant crazyhouse startpos rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[] w KQkq - 0 1
position startpos
go depth 1
info depth 1 seldepth 1 multipv 1 score cp 194 nodes 20 nps 10000 tbhits 0 time 2 pv e2e3
bestmove e2e3
ddugovic commented 6 years ago

There is no way to set a variant during compilation.

ianfab commented 6 years ago

@khurshid-alam Changing the default variant currently only is possible via a code change. The line https://github.com/ddugovic/Stockfish/blob/85baca78be23c69f1127213e40f8646c4066a5e9/src/ucioption.cpp#L76 sets the default which is chosen to be the first variant in the vector, which is "chess". Replacing variants.front().c_str() by something like "3check" should do the trick. I do not really see a point in making this configurable, since the GUI should take care of properly setting the variant.

ddugovic commented 6 years ago

I added example setoption UCI_Variant usage in https://github.com/ddugovic/Stockfish/wiki

ddugovic commented 5 years ago

I added an example consumer in https://github.com/ddugovic/Stockfish/wiki

ianfab commented 5 years ago

I opened this thread more than one year ago but have not really seen a lot of questions around how to use MV-SF since then, so I guess there is not much point in keeping this open further.

MichaelB7 commented 5 years ago

For macOS , xboard the way to go - it supports all of them I believe. macOS is all I know - would be happy to answer questions. Contact me @MichaelB7

ddugovic commented 5 years ago

Thanks Michael. (Sorry I'm not prepared to offer GUI documentation/support although certainly I can curate the Wiki as people figure out how to support various GUIs.)

Curiously in the wake of Leela Chess Zero, many users seem to have figured out how to use https://github.com/careless25/lichess-bot with either Leela or Stockfish; and separately, to use Lichess (either the site's analysis/study features, or the mobile app with SF bundled [I think]) when immediate feedback outweighs performance.

I've updated the example consumer (from my lichess-bot fork to python-chess-annotator) since having a platform-agnostic demo (especially for automating game analysis) is useful for verifying that the engine works even without a GUI.