|
Post by alandau on Apr 17, 2017 20:44:22 GMT -8
As to your question about propnets and the list solution: Propnets deal with fully grounded sentences; that is, they don't have variables in them. If there are nested functional structures that can keep being added to each other, then the propnet generation algorithm would try to create an infinite number of nodes. (In the case of the OPNF, there's a GDL transformation that will fail before the propnet itself starts to be built.)
On further reflection, though, you might run into this problem regardless. With expressions like (negated ?x) and (conjunction ?x ?y) that can be nested, the complexity of such structures would only be limited by the length that the game goes on, and the propnet generation can't take that length into account.
If you want to make a set of names available for new boxes, you'll generally need to define all the possibilities somewhere in the game description. I suspect that in order to restrict the game to a finite number of steps (a requirement for well-defined games), you'll want a step counter, and that can be the source of names: if it's step 5, then the name of a box you make that turn is 5. (This works as long as you can only create one such thing each turn.)
|
|
|
Post by etienneb on Apr 25, 2017 1:22:47 GMT -8
I only realised now that there was a second page! Thanks for your answer, that clarifies a lot to me. I guess there is no point in trying to change the boxes if things conjunction can already crash the best players. Working with "lower" players seems to be the only option to me.
Could you explain the recursion restriction please? I've read about it in the gdl paper but it's not clear how it is implemented concretely. I'm now trying to implement predicate logic and my way of checking if a variable is free seems to trigger it (according to the eclipse plugin). This is (part) of what I write:
; find out if a variable is free (<= (free ?v ?f) (variable ?v) (variable ?f) (distinct ?v ?f) ) ; recursion restriction issue in the following statement: (<= (free ?v (conjunction ?a ?b)) (variable ?v) (free ?v ?a) (free ?v ?b) )
Thanks again!
|
|
|
Post by etienneb on Apr 25, 2017 3:58:53 GMT -8
Continuing the discussion about the best players for my games, do you know any good player not using propnet or similar? Thanks!
|
|
|
Post by alandau on Apr 27, 2017 20:25:52 GMT -8
If you think about what this rule implies:
(<= (free ?v (conjunction ?a ?b)) (variable ?v) (free ?v ?a) (free ?v ?b) )
Then if you have (variable p) and (free p q), then you also have (free p (conjunction q q)), (free p (conjunction q (conjunction q q)), and so on ad infinitum.
The recursion restriction is designed to prevent an infinite number of sentences from being true on a given turn. This basically means you should try to add conjuncts restricting ?a and ?b so they are something plausibly relevant to the current state of the game.
|
|
|
Post by alandau on Apr 27, 2017 20:34:46 GMT -8
|
|
|
Post by etienneb on Apr 28, 2017 6:59:57 GMT -8
I have cadia but, in my experience, it doesn't always work and it has been behaving oddly when it worked. So far I've had more success testing with players playing random moves. I'll see if I can get the others. When I get a more definitive rule system, I'm planning on making a program that takes logic as an input and make a game, so I'll definitely appreciate some help testing then! Thanks a lot!
|
|
|
Post by etienneb on May 11, 2017 8:25:14 GMT -8
About the players: I wasn't able to get ary to work but I actually had cadia and flux installed. I made 2 games, one require one move and the other 2. They always get the 'easier' one in one but play nothing at all for the second. The only difference between them is the premise and the conclusion, they have the exact same rules. That's the 1 move game: vps1.piater.name/commie/#MuanY6bYThat's the 2 moves game: vps1.piater.name/commie/#wjzROi1OThe second needs implication elimination followed by MT to be complete. If you have an idea why this happens it would be very helpful! Another thing I'm not sure how to achieve is substitution. Like I said before, I'm trying to get FOL working too but I don't see how to implement substitution. Again if you have an idea, that would be great! Thanks a lot
|
|
|
Post by etienneb on May 15, 2017 11:56:57 GMT -8
I retested the first game with Flux and Cadia and realised that they we're not playing either. The game controller was making the move for them. The java player I use actually plays himself. Here is the error message from Flux: type error in number_string_(_28362, "1", [41, 41, 32, 40, 60, 61, 32, 40, 110, 101, 120, 116, 32, 40, 97, 115, 115, 117, ...]) I wasn't able to see Cadia's first reaction to the game manager messages because it floods the terminal with: Empty Movelist generated for [control(solver),[assume(conjunction(a,a),null),[assumption(conjunction(a,a),null),[step(1),[]]]]] NULL move Maybe you came across this sort of issue before? I use the game manager I found on this page: www.general-game-playing.de/downloads.htmlIt works fine with the basic java player found on the same page, which is the one I currently use. I would be great if you had a clue about this! Thanks
|
|
|
Post by etienneb on May 18, 2017 3:38:46 GMT -8
My supervisor had a pretty good idea for the substitution. Something along the lines of:
; forAll elimination (<= (legal solver (assumption ?result ?b)) (substitution ?term ?var ?with ?result) (true (assumption (forAll ?x ?f) ?b)) (variable ?var) (distinct ?var ?with) (not (true (assumption ?result ?b))) )
and then substitution is dealt with not using moves. I need to develop this more but I think it should work!
|
|
|
Post by etienneb on Jun 2, 2017 5:59:15 GMT -8
So I now have 16 games, I might make up to 20. But I'm not sure what the best way to test them is. I've installed flux but I can't figure out what goes wrong when installing ary or cadia. On top of that Flux stops making moves that are allowed after a while which makes it pretty poor at testing. Is there another way to test my games? I can test that they terminate (with a positive result) myself but I would like to have some sort of "performance" idea.
Cheers
|
|
|
Post by alandau on Jun 9, 2017 22:28:40 GMT -8
Looking at performance testing of the games in particular:
You could do testing in GGP-Base with the prover there -- my typical setup is running random selections of moves and computing the average number of state changes per second (counting full rollouts through the game tree per second is also commonly used). That would let you test performance with the ProverStateMachine in particular.
There's also the gdl-perf framework (https://github.com/AlexLandau/gdl-perf) which was designed more for comparing existing games across different engines -- I don't have a quick fix there for having the user add custom games, but it wouldn't be too hard to add.
And if you want people to try real players on your game, you can send the GDL to people here (myself included) and we can see which ones they can solve.
|
|
|
Post by etienneb on Jun 14, 2017 7:36:49 GMT -8
Thanks, I'll look into these options!
|
|
|
Post by etienneb on Jun 18, 2017 7:53:59 GMT -8
So reading a bit into this it looks like the gdl-perf framework would be of use. But it seems that there is no way to choose what games are played? It is my games that I would like to test rather than the player. At the moment, I am thinking of getting a general idea of how player perform, for example if I have a logic game that can be done in 6 moves, what is the average a player will get. I'm not sure if I'm explaining properly
|
|
|
Post by alandau on Jun 29, 2017 21:49:52 GMT -8
Your best bet might be to provide the games you want tested to people who can try them with their players.
Feel free to email me the games if you don't want them posted publicly; my address is in my member profile.
|
|