Lenka, thank you for your interest in Europa! I was just penning a response to your other
question, but this asks a more concrete question, so I can give a shorter answer =-).
In NDDL, object members are fixed at object instantiation time and are immutable. There's
nothing temporal about them. To an extent, this is a consequence of treating planning as
dynamic constraint satisfaction--a variable in Europa doesn't change value; it begins life
in planning-time (that is, the time you spend watching your screen, wondering what sort of
weird answer Europa is about to give you) with a domain of all possible values it can take
which is then restricted to the value the constraints and the planner says it must.
Values that are expected to change over plan-time (that is, the time that is represented
in the plan) need to be wrapped in a temporal thing: a token.*
You've already done that step with the takingpathGo parameter of the Move action. It
looks like you're trying to prevent the robot from going back and forth on a single path
by storing the previous path and then you would have said "object.lastPath !=
takingpathGo;" if NDDL let you (please correct me if I'm wrong!).
It doesn't, so you have to get the value of lastPath from earlier on the timeline, by
saying something like this:
after(condition object.Move m);
m.takingpathGo != takingPathGo;
That won't *quite* get what you want, because the planner could decide it's satisfied by a
much earlier move, but that should gesture in the right direction. There may be something
about your domain that would make it easy.
I failed to be brief, but I hope I was helpful!
~MJI
*That explains why variables aren't temporal, but it doesn't explain why object members
have to be fixed at instantiation. The very short answer to that is we didn't have the
time to figure out the semantics or even what it would be useful for.
On 06/17/2015 10:25 AM, Lenka Mudrová wrote:
> Dear all,
>
> first of all, thank you for providing EUROPA as an open-source! I am currently trying to
> understand how to model in NDDL and how the standard planners works in order to see if I
> can use it as temporal planner in my research.
>
> I came to the problem, that I dont understand how the assigning to the varible/object
> should work. See what I am doing:
>
> |
>
> classPathextendsTimeline{
> Locationstart;
> Locationend;
> intdur;
> boolforward;//used to signal that a robot can tarvel from start to end
> boolbackward;//used to signal that a robot can travel in opposite direction too
> boolmightBeBlocked;//to signal that something might cause that the path is unavailable,
> ie. closed doors
>
> Path()
> {
> start =newLocation("none",-1);
> end=newLocation("none",-1);
> dur =-1;
> forward =false;
> backward =false;
> mightBeBlocked =true;
> }
>
> Path(Location_start,Location_end,int_dur,bool_forward,bool_backward,bool_mightBeBlocked)//a user
> can specify only one-directional path
> {
> start =_start;
> end=_end;
> dur =_dur;
> forward =_forward;
> backward =_backward;
> }
>
> predicate Obstructed{}//path is not possible
> predicate Free{}//path is possible
> predicate Unknown{}//it is unknown if path is possible or not
> }
>
> classRobot{
> RobotLocationrobot_location;
> PathlastPath;//in order to dont allow cycling of a robot
> <FlawHandlercomponent="StandardVariableHandler"/>
> </UnboundVariableManager>
> </Solver>
>
> |
>
> Any advice will be great!
>
> --
> You received this message because you are subscribed to the Google Groups "europa-users"
> group.
> To unsubscribe from this group and stop receiving emails from it, send an email to
>
europa-users...@googlegroups.com <mailto:
europa-users...@googlegroups.com>.
> To post to this group, send email to
europa...@googlegroups.com
> <mailto:
europa...@googlegroups.com>.
> Visit this group at
http://groups.google.com/group/europa-users.
> For more options, visit
https://groups.google.com/d/optout.
--
------------------
Michael J. Iatauro
Software Engineer
QTS, Inc.
NASA Ames Research Center
Office:
650-604-0662
Mail stop: 269-2
P.O. Box 1
Moffett Field, CA 94035-0001