According to uci protocol.hgm wrote:This is a bad violation of UCI protocol. An engine should NEVER produce more than one 'bestmove' command in response to a 'go' command. (And also never fewer than one, btw.)Ferdy wrote:Code: Select all
<< bestmove g3g6 Takeback the last move in internal board <<<<<< string received: stop >> stop Deuterium is no longer searching, and bestmove was already sent << bestmove 0000
Code: Select all
* bestmove <move1> [ ponder <move2> ]
the engine has stopped searching and found the move <move> best in this position.
the engine can send the move it likes to ponder on. The engine must not start pondering automatically.
this command must always be sent if the engine stops searching, also in pondering mode if there is a
"stop" command, so for every "go" command a "bestmove" command is needed!
Directly before that the engine should send a final "info" command with the final search information,
the the GUI has the complete statistics about the last search.
Also Deuterium was provoked to send bestmove 0000 because it received two stop commands, it does not send bestmove zzzz, bestmove yyyy without a command from GUI.
But of course I can ignore the second stop command. But in the protocol
it does not say that I am not allowed not to ignore, I still have the choice not to ignore.
That would mean that the GUI should have full control of the situation, such as not sending a second stop command when the engine had already sent its bestmove.
Code: Select all
* if the engine receives a command which is not supposed to come, for example "stop" when the engine is
not calculating, it should also just ignore it.