Moderators: hgm, Andres Valverde
H.G.Muller wrote:I prepared an adapted version of the WinBoard protocol definition.
This version of the document contains some clarification on points where the original protocol definition was vague or absent, describing the exact meaning that the implementation in WinBoard 4.3.xx has implemented.
The new paragraphs are highlighted in green. Many are just trivial extensions of the old protocol, like defining the names of some new variants. The only essentially new additions to the protocol are the engine debug output, and the node-count based time control.
I also already put in some advance information that might be important for implementing multi-session time controls in the future.
Please let me know what you think about this.
H.G.Muller wrote:I am not sure how exactly you imagine such a protocol would look. Perhaps because I do not know UCI protocol at all.
What I understand from discussions about it that now and then surface, is that the strong point of UCI is that it defines a standard for the parameters that an engine needs at startup, like hash-table size, book and EGTB paths, EGTB cache, Pawn Hash, Eval Cache.
But I think the existing WinBoard protocol already offers an excellent device for setting up engines, namely the 'features' command. It would be a comparatively small protocol extension to make it possible for the engine to make known to WinBoard what setup parameters it needs/can handle through the stdio channel. How about having a feature similar in syntax to the 'variants' feature, where the engine can tell to WinBoard all the setup options it will understand? like
feature options="hash,EGTBcache,nalimovpath,bookpath"
This would enable WinBoard to send commands
hashsize 128
EGTBcache 32
nalimovpath F:\chess\nalimov
bookpath F:\chess\books\goldbook.bk
Would this achieve the ease of setup that you had in mind?
H.G.Muller wrote:I am not sure how exactly you imagine such a protocol would look. Perhaps because I do not know UCI protocol at all. What I understand from discussions about it that now and then surface, is that the strong point of UCI is that it defines a standard for the parameters that an engine needs at startup, like hash-table size, book and EGTB paths, EGTB cache, Pawn Hash, Eval Cache.
But is seems to me the problem with WB engines is not so much that such parameters cannot be set through the same stdio channel as that handles the moves during playing. Such parameters can just as easy be generated by the GUI for passing as command-line arguments to the engine it starts. If only there was a standard for this.
One line of reasoning might be that WB protocol is a tightly controlled standard, so that adding the setup commands to that protocol would be accepted as standard much more rapidly than designing a standard for command-line arguments. A second point might be that using the same channel for all communication would be easier on the engine programmer, which than only has to learn about stdio, and can ignore command-line arguments.
But I think the existing WinBoard protocol already offers an excellent device for setting up engines, namely the 'features' command. It would be a comparatively small protocol extension to make it possible for the engine to make known to WinBoard what setup parameters it needs/can handle through the stdio channel. How about having a feature similar in syntax to the 'variants' feature, where the engine can tell to WinBoard all the setup options it will understand? like
feature options="hash,EGTBcache,nalimovpath,bookpath"
This would enable WinBoard to send commands
hashsize 128
EGTBcache 32
nalimovpath F:\chess\nalimov
bookpath F:\chess\books\goldbook.bk
Would this achieve the ease of setup that you had in mind?
Harald Lüßen wrote:
You could do more. I think you are now in a position to improve Winboard
a lot, and with the acceptance of many programmers. For a long time
winboard was just stable but stuck. And if you change something
have a look at the UCI protocol. Perhaps there are ideas and features
that are worth to 'steal'. This would also make it easier to change
and expand the engine side of the communication.
Harald Lüßen wrote:May be that this seems to be overkill. But not every day we [ you ]
have the possibility to think ahead and do some good work for the future.
Harald Lüßen wrote:Make it easy for an engine to tell the GUI (and the human user) how
to change a lot of parameters with dialog boxes. The engine could send
something like this:
setting <featurename> <valuetype> [<list of values> | <min> - <max> | <free text>]
With <valuetype> := bool | list | int | string
...
Zach Wegner wrote:This is of course only applicable (for now) for GUIs like Arena, that handle large amounts of engines simultaneously.
H.G.Muller wrote:Zach Wegner wrote:This is of course only applicable (for now) for GUIs like Arena, that handle large amounts of engines simultaneously.
Not necessarily. For the WinBoard philosophy, which uses the GUI only for the duration of one match between to opponents (usually even only a single game), the equivalent of a global setting is simply what you include in the winboard.ini file. The option stored in there for the hash size will be valid each time you restart WinBoard, i.e. for all engines. Engines could be started in such a way (instructed by the options passed to them in the /fcp, /scp argument) to ignore the option and determine their own hash size.
I also think there is no advantage in having engines define what commands they need to adjust something as universally present in engines as hash size. I just wanted to point out that the mechanism to o it is already there, even in protocol 1. And for very special features, not included in the standard, allowing the engines to communicate with the user can be a very useful feature. The best idea to me still seems to be to add commands like
memory N
cores N
EGTBpath DIRECTORY
bookpath FILENAME
and let the engine request sending of the settings that apply to the current game (because the user set them through the WinBoard menus, or because they were specified in the command-line or winboard.ini) through a a 'feature options={...}'.
Options like playing style might be more triky, because they cannot be easily standardized. Each engine might have his own list of styles (or a single, unnamed one). So a command
style STRING
would be difficult for WinBoard to handle universally. But if it does not know what arguments are allowed, it could simply send 'style' to the engine without an argument. The engine could than respond by popping up a dialog box, listing the styles it supports, (using the 'askuser' command) and wait for the user to select one of them.
Harald Lüßen wrote:
You could do more. I think you are now in a position to improve Winboard
a lot, and with the acceptance of many programmers. For a long time
winboard was just stable but stuck. And if you change something
have a look at the UCI protocol. Perhaps there are ideas and features
that are worth to 'steal'. This would also make it easier to change
and expand the engine side of the communication.
I have not looked up whether and how UCI does this:
Make it easy for an engine to tell the GUI (and the human user) how
to change a lot of parameters with dialog boxes. The engine could send
something like this:
setting <featurename> <valuetype> [<list of values> | <min> - <max> | <free text>]
With <valuetype> := bool | list | int | string
Example:
setting "UseTrick17" bool 0
setting "Style" list "solid" "normal" "active" "agressive"
setting "KingSafetyPercent" int 0 - 100
setting "LearnFile" string ".\default_learn_file"
setting "UseSecretSettings" string "A1_B42_X23"
I mean, let the engine tell the GUI all things that it needs to know
to build a dialog box on the fly (perhaps even with some grouping
informations and radio buttons):
setting group "Title" radio
...
setting group end
And on the other hand Winboard could respond with something like this:
setting <featurename> <value>
Example:
setting "UseTrick17" 1
setting "Style" "active"
setting "KingSafetyPercent" 67
setting "LearnFile" ".\other_learn_file"
setting "UseSecretSettings" "A1_B6x9_U2"
May be that this seems to be overkill. But not every day we [ you ]
have the possibility to think ahead and do some good work for the future.
Harald
feature stdoptions="hash,EGTBcache,nalimovpath,bookpath"
feature option style list stupid patzer mediocre weak
feature option lmr_history_percent int 0 - 100
Zach Wegner wrote:Also, keep in mind that there is no xboard.ini. Maybe it would be good to add such functionality...
Return to WinBoard development and bugfixing
Users browsing this forum: No registered users and 14 guests