Changes

Jump to: navigation, search

UCI

15,236 bytes added, 16:13, 18 May 2018
Created page with "'''Home * Protocols * UCI''' '''UCI''', (Universal Chess Interface)<br/> an open [https://en.wikipedia.org/wiki/Communication_protocol communication protoco..."
'''[[Main Page|Home]] * [[Protocols]] * UCI'''

'''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]]).

=Design Philosophy=
The UCI capable [[GUI]] is not only View and Controller of a chess [https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC], but also keeps the Model with its internal [[Chess Game|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 [[Repetitions|threefold repetition]] has occurred. The UCI GUI may choose and play moves from an [[Opening Book|opening book]] and [[Endgame Tablebases|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==
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> :
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'''.

It removes several critical engine-decisions that are best made by the engine, not the GUI.

==Pro==
[[Fabien Letouzey]] emphasize the ease of implementation in a [[Frank Quisinsky|Quisinsky]] interview, April 05, 2005 <ref>[http://www.playwitharena.com/?Newsticker:Archive_7 The alternative to Crafty, Interview with Fabien Letouzey] by [[Frank Quisinsky]], [[Arena|Arena Chess GUI 3.0]] - Archive , Page 7, 96, April 05, 2005</ref> :
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.

=Engines=
* [[UCI Engines]]
* [[Linux Engines]]
<span id="GUI"></span>
=GUIs=
* [[Aquarium]]
* [[Arena]]
* [[Chess Assistant]]
* [[ChessBase (Database)]]
* [[Chess for Android]]
* [[ChessPartner]]
* [[Chess Wizard (GUI)|Chess Wizard]]
* [[Cute Chess]]
* [[Fritz#FritzGUI|Fritz GUI]]
* [[Hiarcs Chess Explorer]]
* [[Jerry]]
* [[jose]]
* [[Kvetka]]
* [[LittleBlitzer]]
* [[PyChess]]
* [[SCID]]
* [[Scid vs. PC]]
* [[Scidb]]
* [[Shredder#GUI|Shredder GUI]]
* [[Tarrasch]]

=Utilities=
* [[InBetween]]
* [[JSUCI]]
* [[PolyGlot]]
* [[Wb2UCI]]
* [[UCI2WB]]

=See also=
* [[Chess Engine Communication Protocol]]
* [[CPW-Engine_com]]
* [[Engine Testing]]
* [[Vice#UCI|Vice UCI-Videos]]
* [[WinBoard]]
* [[XBoard]]

=Forum Posts=
==2000 ...==
* [https://www.stmintz.com/ccc/index.php?id=141612 UCI (=universal chess interface)] by [[Stefan Meyer-Kahlen]], [[CCC]], November 28, 2000
* [https://www.stmintz.com/ccc/index.php?id=155894 UCI Issues] by [[Peter McKenzie]], [[CCC]], February 25, 2001
* [https://www.stmintz.com/ccc/index.php?id=202057 UCI - a good idea?] by [[David Rasmussen]], [[CCC]], December 15, 2001
* [https://www.stmintz.com/ccc/index.php?id=224455 Delphi and the UCI Protokoll] by [[Martin Bauer]], [[CCC]], April 18, 2002 » [[Delphi]]
* [https://www.stmintz.com/ccc/index.php?id=225107 One more time Delphi and UCI] by [[Martin Bauer]], [[CCC]], April 21, 2002
* [https://www.stmintz.com/ccc/index.php?id=246554 UCI versus Winboard] by [[Bas Hamstra]], [[CCC]], August 21, 2002
* [https://www.stmintz.com/ccc/index.php?id=269320 UCI - Worth Implementing?] by [[David Rasmussen]], [[CCC]], December 07, 2002
* [https://www.stmintz.com/ccc/index.php?id=291359 UCI-protocoll and engines. score cp (x)] by Juergen Wolf, [[CCC]], April 01, 2003
* [https://www.stmintz.com/ccc/index.php?id=360181 Extension of the UCI protocol] by [[Stefan Meyer-Kahlen]], [[CCC]], April 15, 2004
==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=25908 Appeal to SMP-engines programmers using UCI] by [[Harm Geert Muller]], [[CCC]], January 09, 2009
* [http://www.open-aurec.com/wbforum/viewtopic.php?f=19&t=50429 UCI protocol in winboard] by [[Engin Üstün]], [[Computer Chess Forums|Winboard Forum]], September 24, 2009 » [[Chess Engine Communication Protocol]], [[WinBoard]]
==2010 ...==
* [http://www.talkchess.com/forum/viewtopic.php?t=31608 Handling UCI protocol and Stockfish / Glaurung behavior] by [[Pascal Georges]], [[CCC]], January 10, 2010 » [[Stockfish]], [[Glaurung]]
* [http://www.talkchess.com/forum/viewtopic.php?t=33088 UCI extensions for kibitzing] by [[Aaron Becker]], [[CCC]], March 05, 2010
* [http://www.talkchess.com/forum/viewtopic.php?t=34481 UCI issues] by [[Miguel A. Ballicora]], [[CCC]], May 24, 2010
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=381800 some UCI protocol issues/questions] by [[Jon Dart]], [[CCC]], December 17, 2010
'''2011'''
* [http://www.talkchess.com/forum/viewtopic.php?t=38753 SMP for Android UCI engines] by [[Aart Bik]], [[CCC]], April 14, 2011 » [[Android]], [[SMP]]
* [http://www.talkchess.com/forum/viewtopic.php?t=39340 UCI multipv question] by [[Martin Sedlak]], [[CCC]], June 11, 2011 » [[Principal Variation#MultiPV|Multi-PV]]
* [http://www.talkchess.com/forum/viewtopic.php?t=39950 UCI nullmove] by [[Marco Costalba]], [[CCC]], August 03, 2011
* [http://www.talkchess.com/forum/viewtopic.php?t=40117 UCI Engine Tuning] by [[Steven Atkinson]], [[CCC]], August 20, 2011
'''2012'''
* [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.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]]
'''2013'''
* [http://www.open-chess.org/viewtopic.php?f=5&t=2357 UCI Interfacing question] by epideath, [[Computer Chess Forums|OpenChess Forum]], July 05, 2013
* [http://www.talkchess.com/forum/viewtopic.php?t=48768 UCI protocol issue] by [[Jon Dart]], [[CCC]], July 27, 2013 » [[Repetitions]]
* [http://www.talkchess.com/forum/viewtopic.php?t=48996 uci ponder protocol] by [[Marco Belli]], [[CCC]], August 17, 2013 » [[Pondering]]
* [http://www.talkchess.com/forum/viewtopic.php?t=50498 UCI variants support] by [[Balint Pfliegel]], [[CCC]], December 15, 2013
'''2014'''
* [http://www.talkchess.com/forum/viewtopic.php?t=51763 JSUCI 1.0 - connect javascript chess engines to UCI] by [[Edmund Moshammer]], [[CCC]], March 28, 2014 » [[JavaScript]] <ref>[http://sourceforge.net/projects/jsuci/ Javascript Universal Chess Interface | Free software downloads at SourceForge.net] by [[Edmund Moshammer]]</ref>
* [http://www.talkchess.com/forum/viewtopic.php?t=52661 UCI, ownbooks, and a potential problem] by [[Miguel A. Ballicora]], [[CCC]], June 16, 2014 » [[Opening Book]]
* [http://www.talkchess.com/forum/viewtopic.php?t=53123 UCI exclude move] by [[Steven Atkinson]], [[CCC]], July 30, 2014
* [http://www.talkchess.com/forum/viewtopic.php?t=53504 UCI Protocol] by jay dee, [[CCC]], August 31, 2014
* [http://www.talkchess.com/forum/viewtopic.php?t=54093 PV after stop/readyok] by [[Steven Atkinson]], [[CCC]], October 20, 2014
* [http://www.talkchess.com/forum/viewtopic.php?t=54162 UCCI2WB] by [[Harm Geert Muller]], [[CCC]], October 27, 2014 » [[Chinese Chess]] <ref>[http://www.xqbase.com/protocol/cchess_ucci.htm 中国象棋电脑应用规范(五):中国象棋通用引擎协议] Universal Chinese Chess Protocol (UCCI)</ref>
* [http://www.talkchess.com/forum/viewtopic.php?t=54167 UCI protocol for chess variants] by [[Evert Glebbeek]], [[CCC]], October 28, 2014
* [http://www.talkchess.com/forum/viewtopic.php?t=54703 How does input console for UCI work ?] by [[Piotr Lopusiewicz]], [[CCC]], December 20, 2014
==2015 ...==
* [http://www.talkchess.com/forum/viewtopic.php?t=55662 UCI request answers all time..... how to do it?] by [[Luis Babboni]], [[CCC]], March 14, 2015
* [http://www.talkchess.com/forum/viewtopic.php?t=55666 UCI way to communications. Wich kind of inputs?] by [[Luis Babboni]], [[CCC]], March 15, 2015
* [http://www.talkchess.com/forum/viewtopic.php?t=55742 UCI extension: nodestime] by [[Marco Costalba]], [[CCC]], March 22, 2015
* [http://www.talkchess.com/forum/viewtopic.php?t=55745 UCI extension: nps NODE_RATE] by [[Marco Costalba]], [[CCC]], March 23, 2015
* [http://www.talkchess.com/forum/viewtopic.php?t=56776 ponder engine-gui interaction] by [[Alexandru Mosoi]], [[CCC]], June 25, 2015 » [[Pondering]]
* [http://www.talkchess.com/forum/viewtopic.php?t=56935 Crafty UCI version] by [[Marek Soszynski]], July 10, 2015 » [[Crafty]]
* [http://www.talkchess.com/forum/viewtopic.php?t=58392 Ugly UCI] by [[Fermin Serrano]], [[CCC]], November 27, 2015
: [http://www.talkchess.com/forum/viewtopic.php?t=58392&start=9 Re: Ugly UCI] by [[Marcel van Kervinck]], [[CCC]], November 27, 2015
'''2016'''
* [http://www.talkchess.com/forum/viewtopic.php?t=59235 stateless UCI] by [[Marco Belli]], [[CCC]], February 13, 2016 » [[Pondering]]
* [http://www.talkchess.com/forum/viewtopic.php?t=62342 Question to UCI engine authors] by [[Harm Geert Muller]], [[CCC]], December 01, 2016
'''2017'''
* [http://www.talkchess.com/forum/viewtopic.php?t=62869 UCI protocol: letting the engine know the game result] by [[Folkert van Heusden]], [[CCC]], January 19, 2017
* [http://www.talkchess.com/forum/viewtopic.php?t=63228 UCI: Console Play Mode?] by Matthew Hull, [[CCC]], February 20, 2017
* [http://www.talkchess.com/forum/viewtopic.php?t=63256 Novag UCB drivers (Winboard and UCI)] by [[Graham O'Neill]], [[CCC]], February 24, 2017 » [[Novag Universal Electronic Chess Board]]
* [http://www.talkchess.com/forum/viewtopic.php?t=63906 Reporting a draw in UCI] by Vince Sempronio, [[CCC]], May 05, 2017 » [[Draw]]
* [http://www.talkchess.com/forum/viewtopic.php?t=64227 UCI, What command should the engine expect while it's searching] by [[Mahmoud Uthman]], [[CCC]], June 09, 2017
* [http://www.talkchess.com/forum/viewtopic.php?t=64262 UCI on another thread, programming help !] by [[Mahmoud Uthman]], [[CCC]], June 11, 2017
* [http://www.talkchess.com/forum/viewtopic.php?t=64679 UCI error codes?] by [[Rasmus Althoff]], [[CCC]], July 21, 2017
* [http://www.talkchess.com/forum/viewtopic.php?t=65324 Regarding UCI Pondering] by [[Manik Charan]], [[CCC]], September 28, 2017 » [[Pondering]]
* [http://www.talkchess.com/forum/viewtopic.php?t=65679 UCI pondering or infinite search] by Lucas Braesch, [[CCC]], November 10, 2017 » [[Pondering]]
* [http://www.talkchess.com/forum/viewtopic.php?t=65913 Regarding options ponder flag] by [[Jürgen Précour]], [[CCC]], December 06, 2017 » [[Pondering]]
'''2018'''
* [http://www.talkchess.com/forum/viewtopic.php?t=66745 UCI vs Winboard question] by [[Michael Sherwin]], [[CCC]], March 05, 2018 » [[Chess Engine Communication Protocol]], [[WinBoard]]

=External Links=
* [http://www.shredderchess.com/chess-info/features/uci-universal-chess-interface.html The UCI Specification]
* [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
==Implementations==
* [http://www.aartbik.com/MISC/uchess.html UCI Engine Support for Android] by [[Aart Bik]]
* [http://www.top-5000.nl/mephisto.htm Back to the 80's with UCI] by [[Ed Schroder|Ed Schröder]] » [[Mephisto]]
* [https://github.com/zd3nik/SenjoUCIAdapter Senjo C++ UCI Adapter] by [[Shawn Chidester]] » [[Clubfoot]], [[Cpp|C++]]
* [https://github.com/freeeve/uci GitHub - freeeve/uci: a UCI (Universal Chess Interface) API for golang] by [[Eve Freeman]] » [[Go (Programming Language)]]
* [https://github.com/nionita/chessNet nionita/chessNet · GitHub] by [[Nicu Ionita]] » [[Haskell]]
==[[JavaScript]]==
* [http://sourceforge.net/projects/jsuci/ Javascript Universal Chess Interface | Free software downloads at SourceForge.net] by [[Edmund Moshammer]]
* [https://github.com/ebemunk/node-uci GitHub - ebemunk/node-uci: UCI Protocol for node.js - talk to chess engines painlessly] by [[Buğra Fırat]] <ref>[https://en.wikipedia.org/wiki/Node.js Node.js from Wikipedia]</ref>
: [https://ebemunk.com/node-uci/ node-uci Documentation]
* [https://github.com/imor/uci GitHub - imor/uci: A thin wrapper on a uci chess engine]

=Video Tutorials=
* An overview of the UCI protocol from a programmer's perspective by [[Jonathan Warkentin]], [https://en.wikipedia.org/wiki/YouTube YouTube] Video
: {{#evu:https://www.youtube.com/watch?v=vuvTFNreykk|alignment=left|valignment=top}}
* Implementing the UCI protocol in your engine (pseudo code) by [[Jonathan Warkentin]], [https://en.wikipedia.org/wiki/YouTube YouTube] Video
: {{#evu:https://www.youtube.com/watch?v=D4DBE4UQoAY|alignment=left|valignment=top}}

=References=
<references />

'''[[Protocols|Up one Level]]'''

Navigation menu