World Draughts Forum

It is currently Wed Sep 20, 2017 21:10

All times are UTC+01:00




Post new topic  Reply to topic  [ 162 posts ]  Go to page Previous 15 6 7 8 911 Next
Author Message
 Post subject: Re: Scan
PostPosted: Sat Sep 19, 2015 22:04 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
Fabien, I encountered a strange problem, hope you have a clue.

The Pipes seem to work now, and I can communicate with Scan.
The first moves in a game are no problem, when I enter a move (with the mouse on my GUI), Scan enters with a book move.
Things go wrong, when Scan starts thinking and sends the move.
The move is normally processed by the Damage GUI.
However on the move I hereafter sent to Scan, I get a Illegal Move Error reply.
From what I can see there seems nothing wrong with the move format send.
And it always occur after the first search of Scan, so when its out of opening book.

Hope this sounds familiar...

Another small thing, I have to sent the init command initially.
Is there a reason that Scan does not execute the init self at start-up and then sends the name and author?

So far (at least with the aforementioned "bug" in mind), I implemented the next San commands already in the Damage GUI:
depth, go, level, move, new, stop.

So I hope soon most will work.


Bert


Top
   
 Post subject: Re: Scan
PostPosted: Sun Sep 20, 2015 08:00 
Offline

Joined: Tue Jul 07, 2015 06:48
Posts: 235
Real name: Fabien Letouzey
BertTuyt wrote:
The Pipes seem to work now, and I can communicate with Scan.
The first moves in a game are no problem, when I enter a move (with the mouse on my GUI), Scan enters with a book move.
Things go wrong, when Scan starts thinking and sends the move.
The move is normally processed by the Damage GUI.
However on the move I hereafter sent to Scan, I get a Illegal Move Error reply.
From what I can see there seems nothing wrong with the move format send.
And it always occur after the first search of Scan, so when its out of opening book.

Hope this sounds familiar...

No, but I'm used to eternal confusion around protocol categories. In the first post in the "Protocols and tools" thread, I compared event-based protocols where you send events (mostly moves) that occurred during a time interval, to position-based protocols where you send the relevant part of the state before every search (position + clock information). It's connected to functional programming: engine_move = search(pos, time); so you need to send the position and time information just like for function calls (except that it's in text form).

I suspect that you tried sending events (in your case, user moves) instead of the current position every time that Scan is expecting. It only accidentally worked for book moves because Scan updates its board when looking for a move to ponder on (which the book doesn't provide on its own).

Here's an actual (but edited) log-file extract from the Olympiad (">" = to engine, "<" = from engine):
---
> pos wbbbbbbbbbbbbbbbbbbbbeeeeeeeeeewwwwwwwwwwwwwwwwwwww
> level 75 1320000 0
> go
< info 0 0.0 0 0 0.00 0.0 34-30
< move 34-30 17-21
> pos wbbbbbbbbbbbbbbbbbbebeebeeeeeewwwwewwwwwwwwwwwwwwww
> level 74 1319997 0
> go
< info 0 0.0 0 0 0.00 0.0 30-25
< move 30-25 20-24
> pos wbbbbbbbbbbbbbbbbbbeeeebbweeeeewwwewwwwwwwwwwwwwwww
> level 73 1319993 0
> ponder
< info 0 0.0 0 0 0.00 0.0 33-29
< move 33-29 23x34x29
...
---

Quote:
Another small thing, I have to sent the init command initially.
Is there a reason that Scan does not execute the init self at start-up and then sends the name and author?

There are three. 1) the GUI needs to know quickly whether the engine supports the protocol (timeout). 2) initialisation depends on GUI parameters so the engine has to give the GUI a chance to set them first. Setting "bb-size" to 5 will make loading much faster for instance. 3) I wanted to respect a concept in the UCI documentation, even though I have no use for it yet:

---
* The engine should boot and wait for input from the GUI,
the engine should wait for the "isready" or "setoption" command to set up its internal parameters
as the boot process should be as quick as possible.
---

We can imagine a GUI just wanting to collect the engine name or parameters.

Unrelated to your questions, UCI is using "isready" for two purposes: initialisation and synchronisation; I separated it into "init" and "ping".


Last edited by Fabien Letouzey on Sun Sep 20, 2015 08:11, edited 1 time in total.

Top
   
 Post subject: Re: Scan
PostPosted: Sun Sep 20, 2015 08:08 
Offline

Joined: Tue Jul 07, 2015 06:48
Posts: 235
Real name: Fabien Letouzey
Fabien Letouzey wrote:
Here's an actual (but edited) log-file extract from the Olympiad (">" = to engine, "<" = from engine):
...

I should add a more complicated example with reversible (king) moves, for the purpose of repetition detection:

> pos beeeWWeeeeeeeeeeeeeeeeeeeweeeeeeeeewweBeeeeeeeeeBee
> move 38-15
> move 5-41
> move 48-26
> level 9 291587 0
> ponder

You can also send all moves from the starting position. This is what most UCI engines would be expecting.


Top
   
 Post subject: Re: Scan
PostPosted: Sun Sep 20, 2015 11:06 
Offline

Joined: Thu Jun 20, 2013 16:16
Posts: 530
Real name: Krzysztof Grzelak
I have a question Fabien. During the Olympics which version of linux you used so that you can start Scan.


Top
   
 Post subject: Re: Scan
PostPosted: Sun Sep 20, 2015 14:23 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
Fabien, thanks, it all works.

I now need to think about the handshake process you mentioned in the beginning, so I don't need to input init myself.
Next to that I need to modify several GUI commands, like take back move, to deal with the dual protocol implementation.
I didn't need to modify Scan for this purpose.
See some screenshots below

Bert


Attachments:
Damage ScanPNG.PNG
Damage ScanPNG.PNG [ 705.65 KiB | Viewed 2898 times ]
Affter Init.PNG
Affter Init.PNG [ 12.8 KiB | Viewed 2898 times ]
Init.PNG
Init.PNG [ 23.3 KiB | Viewed 2898 times ]
Top
   
 Post subject: Re: Scan
PostPosted: Sun Sep 20, 2015 15:32 
Offline

Joined: Tue Jul 07, 2015 06:48
Posts: 235
Real name: Fabien Letouzey
Krzysztof Grzelak wrote:
I have a question Fabien. During the Olympics which version of linux you used so that you can start Scan.

It was my friend's computer (Jirong Lin, who was operating various programs for the whole week). I think it was Ubuntu; I'll let you know in the case I'm wrong.


Top
   
 Post subject: Re: Scan
PostPosted: Sun Sep 20, 2015 15:37 
Offline

Joined: Tue Jul 07, 2015 06:48
Posts: 235
Real name: Fabien Letouzey
BertTuyt wrote:
Fabien, thanks, it all works.

I'm glad to hear it. Problems like this are usually solved quickly by sending a log file to the engine author. Just make sure to include both sides of the communication.

Quote:
I now need to think about the handshake process you mentioned in the beginning, so I don't need to input init myself.

Contrary to game playing (especially with pondering), starting the engine follows a fixed pattern:

> hub
> set <var> <val> (optional)
> set <var> <val> (optional)
> ...
> init
< init eval (cosmetic-only, ignore unknown commands from the engine)
< ready

Quote:
Next to that I need to modify several GUI commands, like take back move, to deal with the dual protocol implementation.
I didn't need to modify Scan for this purpose.

Yes; it's somewhat tricky because most programmers seem to focus too much on the events and want to transmit something immediately. On the GUI side, what I do is only update the GUI state; remember that the engine doesn't receive any events, only commands. When the GUI determines that it's the engine's turn to play (or ponder), I send the position + time information (from the GUI state) as usual. For disruptive events like new game/position, undo, or ponder miss, I just send "stop" to the engine; it's harmless if the engine wasn't thinking (but the GUI needs to remember to ignore the resulting engine move).


Top
   
 Post subject: Re: Scan
PostPosted: Thu Oct 01, 2015 17:23 
Offline

Joined: Sat Apr 28, 2007 13:53
Posts: 725
Real name: Ed Gilbert
Location: Morristown, NJ USA
I made a couple of changes to scan to enhance its capabilities in DXP matches:

- When I tried to run multiple simultaneous DXP matches between scan and kingsrow on an 8-core server, I ran into a problem. When scan acts as a DXP server, it leaves the listening socket open after it accepts a connection from a remote host. This ties up the DXP port so that it cannot be used by another pair of opponents. I modified socket.cpp to close the socket that listens for new connections after it accepts a connection.

- In order to run automated matches at fast time controls, it is necessary to send a value in the Time field of the DXP GAMEREQ message that is a fraction of a minute. The message format allows 3 characters for the Time value, so for example "0.1" can be sent. I modified the file dxp.cpp to accept Time in floating point format.

The modified files are attached here. With these changes I can run 8 simultaneous matches of 12-second games on the server.

-- Ed


Attachments:
scan_changes.zip [5.77 KiB]
Downloaded 140 times
Top
   
 Post subject: Re: Scan
PostPosted: Thu Oct 01, 2015 19:46 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
Ed, thanks for sharing.
Any interesting results worth mentioning.

Bert


Top
   
 Post subject: Re: Scan
PostPosted: Mon Oct 19, 2015 19:47 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
Fabien, after several weeks again some time for programming.
After some reading I also basically like the UCI protocol.
As I now have implemented pipes (so redirect stdin and stdout), I can work on a better implementation of UDI (so Draughts in stead of Chess).
If you want to name it the HUB protocol, it is also good for me.

So the first command the GUI now sends is hub, and Scan responds by Scan 2.0 by Fabien Letouzey.

If we go for a UDI (or HUB) implementation, Scan should respond with:
id name Scan 2.0
id author Fabien Letouzey

Than the GUI could send an init command, and after a while the program sends a readyok (but ready is also ok for me).

If we agree on this part, I can implement at least this start sequence, and test if it works with a modified scan 2.0 (or maybe you want to issue the modification).

Also on the other parts all should agree.
So far I need to input the init myself, but for the rest I'm able to play a game against Scan 2.0

And it evident, that the modified Damage GUI will become available for all, and for free.

Bert


Top
   
 Post subject: Re: Scan
PostPosted: Tue Oct 20, 2015 16:56 
Offline

Joined: Tue Jul 07, 2015 06:48
Posts: 235
Real name: Fabien Letouzey
BertTuyt wrote:
If we agree on this part, I can implement at least this start sequence, and test if it works with a modified scan 2.0 (or maybe you want to issue the modification).

I'm not sure what you're proposing: full UDI or only the initialisation part? And if the latter, why?

Sure I can implement UDI, no problem. But you need to specify everything that's different from chess: at least FEN and moves. Also I won't be able to test anything, so it's going to be a draft.


Top
   
 Post subject: Re: Scan
PostPosted: Tue Oct 20, 2015 18:25 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
Fabien, for now only the initialization part.
I will go through the UCI document, and compile a UDI variant.

Maybe we can start with a minimal implementation.
So its sufficient for standard games, and maybe tournaments.

I want to figure out how to attach 2 engines via pipes to the Damage GUI,
so in the future UDI enabled engines can play tournaments in an easy way.

Bert


Top
   
 Post subject: Re: Scan
PostPosted: Sat Oct 24, 2015 16:47 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
I have slightly modified Scan (will provide the few things I have done in a separate post) and modified Damage accordingly.

See next link: https://www.dropbox.com/sh/u1nekyp94kjz ... bZbka?dl=0

Not 100% sure if it all works, as I compiled both with the (new) Visual Studio 2015 Community Edition, so I might need to add some Microsoft stuff.

To see all UDI Messages (including the info output) from Scan, rightclick in the Engine View window, and select Settings.
In Settings checkmark Display GUIDE Messages.

I used a very basic implementation of UDI.
The only things that work:
- Before starting a game, set time settings with Levels Normal Game.
- Than on can select Player- Engine or Engine - Player.
- With new one can start a new game

As I didn't test all in detail, there might be bugs, so hope to hear, so I can improve.
I will continue to add more Damage GUI functionality.

But at least I hope the Damage GUI adds value for some people.

Bert


Last edited by BertTuyt on Sat Oct 24, 2015 18:04, edited 2 times in total.

Top
   
 Post subject: Re: Scan
PostPosted: Sat Oct 24, 2015 16:58 
Offline

Joined: Wed Sep 01, 2004 18:42
Posts: 1292
The small changes in Scan 2.0

At start of main() I disabled the Scan output string.
Code:
 //  std::cout << "Scan 2.0 by Fabien Letouzey" << std::endl; bthack

The start command for Scan is hub (maybe a better name would be UDI)
and Hub processing is also slightly changed.
Code:
 } else if (arg == "hub") {

      // bthack
     std::cout << "id name Scan 2.0" << std::endl;
     std::cout << "id author Fabien Letouzey" << std::endl;
     std::cout << "ready" << std::endl;

      listen_input();
      hub_loop();

   } else {


In principle these were the only changes.
Although in UCI the info output is detailed, for now a freeform output is OK(ish).

The first ready in the Damage GUI triggers the init command, and after the second ready the Engine is activated.
So far no timeout or complex processing in case a second ready is not (or too late) communicated.

See the initial Scan Output.

Bert


Attachments:
Scan Output.PNG
Scan Output.PNG [ 22.98 KiB | Viewed 2319 times ]
Top
   
 Post subject: Re: Scan
PostPosted: Sun Oct 25, 2015 11:49 
Offline

Joined: Thu Jun 20, 2013 16:16
Posts: 530
Real name: Krzysztof Grzelak
At the very beginning I thank you for Gui Bert. Unfortunately, not everything is working properly. It does not work properly record party, unfortunately you need to improve. The program after saving the party does not show the correct beat, so x. Please make a DXP program.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 162 posts ]  Go to page Previous 15 6 7 8 911 Next

All times are UTC+01:00


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited