Difference between revisions of "UCI"

From Chessprogramming wiki
Jump to: navigation, search
(2020 ...)
 
(20 intermediate revisions by 2 users not shown)
Line 2: Line 2:
  
 
'''UCI''', (Universal Chess Interface)<br/>
 
'''UCI''', (Universal Chess Interface)<br/>
an open [https://en.wikipedia.org/wiki/Communication_protocol communication protocol] for chess engines to play [[Games|games]] automatically, that is to communicate with other programs including [[GUI|Graphical User Interfaces]]. UCI was designed and developed by [[Rudolf Huber]] and [[Stefan Meyer-Kahlen]] <ref>[http://www.playwitharena.com/?Newsticker:Archive_9 Interview with SOS programmer Rudolf Huber in German language!] by [[Frank Quisinsky]], [[Arena|Arena Chess GUI 3.0]] - Archive 9, 132, May 10, 2005</ref> , and released in November 2000 <ref>[https://en.wikipedia.org/wiki/Universal_Chess_Interface Universal Chess Interface From Wikipedia]</ref> . It has, by-in-large, replaced the older [[Chess Engine Communication Protocol]] ([[WinBoard]]/[[XBoard]]).
+
an open [https://en.wikipedia.org/wiki/Communication_protocol communication protocol] for chess engines to play [[Games|games]] automatically, that is to communicate with other programs including [[GUI|Graphical User Interfaces]]. UCI was designed and developed by [[Rudolf Huber]] and [[Stefan Meyer-Kahlen]] <ref>[https://web.archive.org/web/20120106031235/http://www.playwitharena.com/?Newsticker:Archive_9 Interview with SOS programmer Rudolf Huber in German language!] by [[Frank Quisinsky]], [[Arena|Arena Chess GUI 3.0]] - Archive 9, 132, May 10, 2005 ([https://en.wikipedia.org/wiki/Wayback_Machine Wayback Machine]</ref>, and released in November 2000 <ref>[https://en.wikipedia.org/wiki/Universal_Chess_Interface Universal Chess Interface From Wikipedia]</ref> . It has, by-in-large, replaced the older [[Chess Engine Communication Protocol]] ([[WinBoard]]/[[XBoard]]).
  
 
=Design Philosophy=  
 
=Design Philosophy=  
Line 15: Line 15:
 
* Missing some useful commands/info: inform chess engines the results, no information about after movestogo GUIs will reset clock or not
 
* Missing some useful commands/info: inform chess engines the results, no information about after movestogo GUIs will reset clock or not
  
Excerpt concerning UCI from a [[Robert Hyatt]] interview by [[Frank Quisinsky]] in 2002 <ref>[http://www.top-5000.nl/int/crafty.htm Interview with Robert Hyatt] by [[Frank Quisinsky]], May 11, 2002, hosted by [[Ed Schroder|Ed Schröder]]</ref> :
+
Excerpt concerning UCI from a [[Robert Hyatt]] interview by [[Frank Quisinsky]] in 2002 <ref>[http://web.archive.org/web/20020925204655fw_/http://www.playwitharena.com/directory/interviews/interviews.htm Arena, Interviews mit Prof. Dr. Robert Hyatt, Tim Mann und Martin Blume] by [[Frank Quisinsky]] for [[ChessBits]], No. 18, May 2002 ([https://en.wikipedia.org/wiki/Wayback_Machine Wayback Machine])</ref> :
 
  I simply don't like UCI. It subsumes '''all''' engine control parameters. It tells the engine when to [[Pondering|ponder]], when to [[Search|search]], when to stop, etc. That is contrary to my design and I have no interest in hacking [[Crafty]] to support something that is so different from the [[Chess Engine Communication Protocol|WinBoard/XBoard]] protocol that has been around for a '''long''' time and which works '''perfectly'''.
 
  I simply don't like UCI. It subsumes '''all''' engine control parameters. It tells the engine when to [[Pondering|ponder]], when to [[Search|search]], when to stop, etc. That is contrary to my design and I have no interest in hacking [[Crafty]] to support something that is so different from the [[Chess Engine Communication Protocol|WinBoard/XBoard]] protocol that has been around for a '''long''' time and which works '''perfectly'''.
  
Line 26: Line 26:
 
==Pro==  
 
==Pro==  
 
* Statelessness. That reduces unsynchronised problems between chess GUIs and engines
 
* Statelessness. That reduces unsynchronised problems between chess GUIs and engines
* Chess systems (chess GUIs and chess engines) may work much more stable
+
* Chess systems (chess GUIs and chess engines) may work more stably
 +
* Remove the need of having extra configuration/init files for engines
 
* Easier for chess engine developers to support: easy to parse, create commands, almost no ambiguous, straight/simple code since it is almost not required automatic algorithms
 
* Easier for chess engine developers to support: easy to parse, create commands, almost no ambiguous, straight/simple code since it is almost not required automatic algorithms
 
* Easier for debugging: easy to start a match from the middle of a game (using various opening types); easy to pick up a position from long logs (for debugging purposes)
 
* Easier for debugging: easy to start a match from the middle of a game (using various opening types); easy to pick up a position from long logs (for debugging purposes)
Line 36: Line 37:
 
   
 
   
 
Fabien wrote a protocol translation program, [[PolyGlot]] to allow use of the new protocol on [[Linux]], though this is now supported natively by the powerful [[Scid vs. PC]] toolkit. Scid vs. PC itself includes Polyglot code to enable support for Polyglot opening books.
 
Fabien wrote a protocol translation program, [[PolyGlot]] to allow use of the new protocol on [[Linux]], though this is now supported natively by the powerful [[Scid vs. PC]] toolkit. Scid vs. PC itself includes Polyglot code to enable support for Polyglot opening books.
 +
 +
[[Marco Costalba]] replied [[Robert Hyatt]] on a [[Talkchess]] thread <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=58392&hilit=winboard&start=20#p650169 Re: Ugly UCI] by [[Kempelen]], [[CCC]], November 29, 2015 » [[Protocols]]</ref>
 +
 +
The protocol is brilliant (and you can clearly realize it was designed by a very good programmer) because allows the code needed to handle it to be:
 +
- Straightforward
 +
- Simple (meaning with the minimal number of 'if' branches and logic)
 +
- General (meaning the same algorithm can handle all the different cases in an uniform fashion).
 +
The aim of the UCI protocol is to make the code simple, that's why I think it was made for programmers by a (great) programmer.
  
 
[[Pham Hong Nguyen|Nguyen Pham]] replied [[Harm Geert Muller]] on a [[Talkchess]] thread <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72019&start=36 Re: PGN standard, its improvement and standardization] by [[Pham Hong Nguyen|Nguyen Pham]], [[CCC]], October 14, 2019 » from [[Portable Game Notation]] to [[Protocols]]</ref>
 
[[Pham Hong Nguyen|Nguyen Pham]] replied [[Harm Geert Muller]] on a [[Talkchess]] thread <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72019&start=36 Re: PGN standard, its improvement and standardization] by [[Pham Hong Nguyen|Nguyen Pham]], [[CCC]], October 14, 2019 » from [[Portable Game Notation]] to [[Protocols]]</ref>
Line 48: Line 57:
 
* [[:Category:Linux|Linux UCI Engines]]
 
* [[:Category:Linux|Linux UCI Engines]]
 
<span id="GUI"></span>
 
<span id="GUI"></span>
=GUIs=
+
=[[GUI|GUIs]]=
 
* [[Aquarium]]
 
* [[Aquarium]]
 
* [[Arena]]
 
* [[Arena]]
Line 65: Line 74:
 
* [[Kvetka]]
 
* [[Kvetka]]
 
* [[LittleBlitzer]]
 
* [[LittleBlitzer]]
 +
* [[Lucas Chess]]
 
* [[PyChess]]
 
* [[PyChess]]
 
* [[SCID]]
 
* [[SCID]]
Line 71: Line 81:
 
* [[Shredder#GUI|Shredder GUI]]
 
* [[Shredder#GUI|Shredder GUI]]
 
* [[Tarrasch]]
 
* [[Tarrasch]]
 +
 +
=[[CLI|CLIs]]=
 +
* [[Cutechess-cli]]
 +
* [[c-chess-cli]]
  
 
=Utilities=
 
=Utilities=
Line 83: Line 97:
 
* [[CPW-Engine_com]]
 
* [[CPW-Engine_com]]
 
* [[Engine Testing]]
 
* [[Engine Testing]]
* [[Shogi#USI|USI]] - Universal Shogi Interface
+
* [[USI]] - Universal Shogi Interface
 
* [[Vice#UCI|Vice UCI-Videos]]
 
* [[Vice#UCI|Vice UCI-Videos]]
 
* [[WinBoard]]
 
* [[WinBoard]]
Line 100: Line 114:
 
* [https://www.stmintz.com/ccc/index.php?id=360181 Extension of the UCI protocol] by [[Stefan Meyer-Kahlen]], [[CCC]], April 15, 2004
 
* [https://www.stmintz.com/ccc/index.php?id=360181 Extension of the UCI protocol] by [[Stefan Meyer-Kahlen]], [[CCC]], April 15, 2004
 
==2005 ...==  
 
==2005 ...==  
 +
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=2374 How to implement the UCI command "currline"] by [[Josué Forte]], [[Computer Chess Forums|Winboard Forum]], April 24, 2005
 
* [https://www.stmintz.com/ccc/index.php?id=453616 UCI protocol question] by [[Jon Dart]], [[CCC]], October 04, 2005
 
* [https://www.stmintz.com/ccc/index.php?id=453616 UCI protocol question] by [[Jon Dart]], [[CCC]], October 04, 2005
 
* [http://www.talkchess.com/forum/viewtopic.php?t=24866 UCI protocol and SMP] by [[Aart Bik]], [[CCC]], November 13, 2008 » [[Parallel Search]], [[SMP]]
 
* [http://www.talkchess.com/forum/viewtopic.php?t=24866 UCI protocol and SMP] by [[Aart Bik]], [[CCC]], November 13, 2008 » [[Parallel Search]], [[SMP]]
Line 118: Line 133:
 
* [http://www.talkchess.com/forum/viewtopic.php?t=42037 About UCI multipv] by [[Fermin Serrano]], [[CCC]], January 17, 2012 » [[Principal Variation#MultiPV|Multi-PV]]
 
* [http://www.talkchess.com/forum/viewtopic.php?t=42037 About UCI multipv] by [[Fermin Serrano]], [[CCC]], January 17, 2012 » [[Principal Variation#MultiPV|Multi-PV]]
 
* [http://www.talkchess.com/forum/viewtopic.php?t=42154 good macintosh guy for UCI engine development] by [[Sam Hamilton]], [[CCC]], January 25, 2012 » [[GUI]], [[Macintosh]], [[Mac OS]]
 
* [http://www.talkchess.com/forum/viewtopic.php?t=42154 good macintosh guy for UCI engine development] by [[Sam Hamilton]], [[CCC]], January 25, 2012 » [[GUI]], [[Macintosh]], [[Mac OS]]
 +
* [https://open-chess.org/viewtopic.php?f=7&t=2053 Remote UCI engines and port forwarding] by itias, [[Computer Chess Forums|OpenChess Forum]], August 01, 2012
 
* [http://www.open-chess.org/viewtopic.php?f=5&t=2146 Ponder and UCI] by geko, [[Computer Chess Forums|OpenChess Forum]], November 19, 2012 » [[Pondering]]
 
* [http://www.open-chess.org/viewtopic.php?f=5&t=2146 Ponder and UCI] by geko, [[Computer Chess Forums|OpenChess Forum]], November 19, 2012 » [[Pondering]]
 
* [http://www.talkchess.com/forum/viewtopic.php?t=46586 Problem with UCI engines hash in Arena] by Carl Langan, [[CCC]], December 26, 2012 » [[Arena]]
 
* [http://www.talkchess.com/forum/viewtopic.php?t=46586 Problem with UCI engines hash in Arena] by Carl Langan, [[CCC]], December 26, 2012 » [[Arena]]
Line 172: Line 188:
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=71617 Sending pure comments using UCI protocol] by [[Vivien Clauzon]], [[CCC]], August 21, 2019
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=71617 Sending pure comments using UCI protocol] by [[Vivien Clauzon]], [[CCC]], August 21, 2019
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72019&start=36 Re: PGN standard, its improvement and standardization] by [[Pham Hong Nguyen|Nguyen Pham]], [[CCC]], October 14, 2019 » from [[Portable Game Notation]] to [[Protocols]]
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72019&start=36 Re: PGN standard, its improvement and standardization] by [[Pham Hong Nguyen|Nguyen Pham]], [[CCC]], October 14, 2019 » from [[Portable Game Notation]] to [[Protocols]]
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72140 UCI Win/Draw/Loss reporting] by [[Gian-Carlo Pascutto]], [[CCC]], October 22, 2019
+
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72140 UCI Win/Draw/Loss reporting] by [[Gian-Carlo Pascutto]], [[CCC]], October 22, 2019 » [[Pawn Advantage, Win Percentage, and Elo]]
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72686 UCI pondering and time management] by [[Vivien Clauzon]], [[CCC]], December 30, 2019 » [[Pondering]], [[Time Management]]
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=72686 UCI pondering and time management] by [[Vivien Clauzon]], [[CCC]], December 30, 2019 » [[Pondering]], [[Time Management]]
 
 
==2020 ...==
 
==2020 ...==
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=73592 UCI to CECP] by Fulvio, [[CCC]], April 07, 2020 » [[Chess Engine Communication Protocol|CECP]]
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=73592 UCI to CECP] by Fulvio, [[CCC]], April 07, 2020 » [[Chess Engine Communication Protocol|CECP]]
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=73617 UCI Options, clarifation] by Alan Cooper, [[CCC]], April 10, 2020
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=73617 UCI Options, clarifation] by Alan Cooper, [[CCC]], April 10, 2020
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75218 Remote UCI] by [[Daniel José Queraltó]], [[CCC]], September 26, 2020
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75783 UCI wrapper?] by Kurt Lanc, [[CCC]], November 13, 2020
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75992 UCI Gui to remote Linux Engine] by [[Joshua Shriver]], [[CCC]], December 05, 2020 » [[GUI]], [[Linux]]
 +
'''2021'''
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=76344 Uci "go" command without other parameters] by [[Vivien Clauzon]], [[CCC]], January 17, 2021
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=77088 Missing input in ponder] by [[Fabio Gobbato]], [[CCC]], April 15, 2021 » [[Pondering]]
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=77189 Listening for GUI input when searching] by [[Niels Abildskov]], [[CCC]], April 27, 2021 » [[GUI]], [[Search]], [[Thread]]
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=77432 Reporting errors in UCI] by [[Niels Abildskov]], [[CCC]], June 03, 2021
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=77650 uci question, receive stop before pondering starts] by [[Vivien Clauzon]], [[CCC]], July 06, 2021
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=77835 UCI's readyok: A mistake or a misunderstanding] by [[Andrew Grant]], [[CCC]], July 31, 2021
 +
* [http://talkchess.com/forum3/viewtopic.php?f=7&t=77842 Ignoring threads option, is it valid?] by [[CM Canavessi]], [[CCC]], August 01, 2021
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=7&t=77904 Latest UCI spec?] by [[Martin Bryant]], [[CCC]], August 08, 2021
  
 
=External Links=  
 
=External Links=  
* [http://www.shredderchess.com/chess-info/features/uci-universal-chess-interface.html The UCI Specification]
+
* [https://www.shredderchess.com/chess-features/uci-universal-chess-interface.html The UCI Specification] from [[Shredder|Shredder Chess]]
 +
* [http://wbec-ridderkerk.nl/html/UCIProtocol.html UCI protocol] hosted by [[WBEC|WBEC Ridderkerk]]
 
* [https://en.wikipedia.org/wiki/Universal_Chess_Interface Universal Chess Interface From Wikipedia]
 
* [https://en.wikipedia.org/wiki/Universal_Chess_Interface Universal Chess Interface From Wikipedia]
* [http://www.playwitharena.com/?Newsticker:Archive_9 Interview with SOS programmer Rudolf Huber in German language!] by [[Frank Quisinsky]], [[Arena|Arena Chess GUI 3.0]] - Archive 9, 132, May 10, 2005
+
==Interviews==
 +
* [http://web.archive.org/web/20020925204655fw_/http://www.playwitharena.com/directory/interviews/interviews.htm Arena, Interviews mit Prof. Dr. Robert Hyatt, Tim Mann und Martin Blume] by [[Frank Quisinsky]] for [[ChessBits]], No. 18, May 2002 ([https://en.wikipedia.org/wiki/Wayback_Machine Wayback Machine]) »  [[Robert Hyatt]], [[Tim Mann]], [[Martin Blume]] <ref>[https://www.stmintz.com/ccc/index.php?id=245615 3 interviews about engine protocols with T. Mann, R. Hyatt and M. Blume] by [[Frank Quisinsky]], [[CCC]], August 15, 2002</ref>
 +
* [https://web.archive.org/web/20120106031235/http://www.playwitharena.com/?Newsticker:Archive_9 Interview with SOS programmer Rudolf Huber in German language!] by [[Frank Quisinsky]], [[Arena|Arena Chess GUI 3.0]] - Archive 9, 132, May 10, 2005 ([https://en.wikipedia.org/wiki/Wayback_Machine Wayback Machine])
 
==Implementations==
 
==Implementations==
 
* [http://www.aartbik.com/MISC/uchess.html UCI Engine Support for Android] by [[Aart Bik]]
 
* [http://www.aartbik.com/MISC/uchess.html UCI Engine Support for Android] by [[Aart Bik]]

Latest revision as of 04:36, 9 September 2021

Home * Protocols * UCI

UCI, (Universal Chess Interface)
an open communication protocol for chess engines to play games automatically, that is to communicate with other programs including Graphical User Interfaces. UCI was designed and developed by Rudolf Huber and Stefan Meyer-Kahlen [1], and released in November 2000 [2] . It has, by-in-large, replaced the older Chess Engine Communication Protocol (WinBoard/XBoard).

Design Philosophy

The UCI capable GUI is not only View and Controller of a chess MVC, but also keeps the Model with its internal game states. It is also an "arbiter" instance to decide about the outcome of the game, for instance in declaring a game to be drawn after a threefold repetition has occurred. The UCI GUI may choose and play moves from an opening book and endgame tablebase.

Critique

While the UCI design makes it simple for engine programmers to integrate a "stateless" chess engine, it was also disputed by various chess programmers, since it subsumes engine control parameters and delegates possibly game decisive stuff to the GUI.

Contra

  • GUIs may send very long commands (for chess positions) to chess engines
  • It is hard for chess engines to process input/output without an extra thread for that duty
  • Missing some useful commands/info: inform chess engines the results, no information about after movestogo GUIs will reset clock or not

Excerpt concerning UCI from a Robert Hyatt interview by Frank Quisinsky in 2002 [3] :

I simply don't like UCI. It subsumes all engine control parameters. It tells the engine when to ponder, when to search, when to stop, etc. That is contrary to my design and I have no interest in hacking Crafty to support something that is so different from the WinBoard/XBoard protocol that has been around for a long time and which works perfectly.
It removes several critical engine-decisions that are best made by the engine, not the GUI.

Harm Geert Muller wrote on a Talkchess thread [4]

IMO statelessness w.r.t. the game state (including clocks) in UCI was a very bad idea. It is not only that it makes the communication unnecessarily verbose, but w.r.t. clocks there is a real problem: in classical TC the timing info accompanying the 'go' command does not specify how much time will be added after the 'movestogo' have been played. With movestogo=1 and wtime/btime=59000 you could be in a 40moves/hour game, at the brink of receiving another hour for the next 40 moves, in which case it would be wise to completely spend the remaining 59 sec on the upcoming move, as this is already below average. But you could also be in a 40moves/min game, where you got out of book after 39 moves, and receive only 1 new minute for the next 40. Wasting the 59 sec on a single move now effectively reduces your time for the second session by a factor 2, which would be very sub-optimal. The time management in this case should act like you have 1:59 for 41 moves (but be aware of a 'cold-turkey deadline' for the upcoming move). There is no way a UCI engine could know this.

Pro

  • Statelessness. That reduces unsynchronised problems between chess GUIs and engines
  • Chess systems (chess GUIs and chess engines) may work more stably
  • Remove the need of having extra configuration/init files for engines
  • Easier for chess engine developers to support: easy to parse, create commands, almost no ambiguous, straight/simple code since it is almost not required automatic algorithms
  • Easier for debugging: easy to start a match from the middle of a game (using various opening types); easy to pick up a position from long logs (for debugging purposes)
  • Almost all new and/or strong chess engines support UCI
  • Almost all chess GUIs support

Fabien Letouzey emphasize the ease of implementation in a Quisinsky interview, April 05, 2005 [5] :

The choice of UCI is based on software-design principles that are not easy to explain. It's a programmer's thing really, I don't expect engine users to understand. Let me give you a clue though: think about young WinBoard engines that you have tried; how many handled pondering ... without bugs??? Another clue might be that surely, Stefan Meyer-Kahlen knows a lot about good programming, right? So trust him if not me, UCI is good for programmers because it leads to fewer bugs in the code ... 

Fabien wrote a protocol translation program, PolyGlot to allow use of the new protocol on Linux, though this is now supported natively by the powerful Scid vs. PC toolkit. Scid vs. PC itself includes Polyglot code to enable support for Polyglot opening books.

Marco Costalba replied Robert Hyatt on a Talkchess thread [6]

The protocol is brilliant (and you can clearly realize it was designed by a very good programmer) because allows the code needed to handle it to be:
- Straightforward
- Simple (meaning with the minimal number of 'if' branches and logic)
- General (meaning the same algorithm can handle all the different cases in an uniform fashion).
The aim of the UCI protocol is to make the code simple, that's why I think it was made for programmers by a (great) programmer.

Nguyen Pham replied Harm Geert Muller on a Talkchess thread [7]

UCI's statelessness is surely not a bad idea. Your example did not prove that (it is a bad idea) but just point out a flawed detail on UCI design.
A stateless protocol means a chess GUI must provide enough information each time an engine starts thinking. In your example, it cannot send enough information about the timer since the protocol does not mention it. It is not a big deal since programmers can solve that issue easily by adding some assumes. Of course, it is better one day we can fix those flawed details in the protocol (version 2?).
I have written engines with both protocols (UCI, WB) and now support them all in my own chess GUI. Thus I have my own ideas about the strong points of each. Both are so good and can do so well their jobs. The stateless idea is the central point of UCI, which makes it a bit more suitable for modern computers and programming - that is why recently it becomes very popular.

Engines

GUIs

CLIs

Utilities

See also

Forum Posts

2000 ...

2005 ...

2010 ...

2011

2012

2013

2014

2015 ...

Re: Ugly UCI by Marcel van Kervinck, CCC, November 27, 2015

2016

2017

2018

2019

2020 ...

2021

External Links

Interviews

Implementations

JavaScript

node-uci Documentation

Video Tutorials

References

Up one Level