domain crossing_traffic_mdp {
requirements = {
reward-deterministic
};
types {
xpos : object;
ypos : object;
};
pvariables {
MIN-YPOS(ypos) : {non-fluent, bool, default = false};
obstacle-at(xpos, ypos) : {state-fluent, bool, default = false};
robot-at(xpos, ypos) : {state-fluent, bool, default = false};
MIN-XPOS(xpos) : {non-fluent, bool, default = false};
NORTH(ypos, ypos) : {non-fluent, bool, default = false};
MAX-XPOS(xpos) : {non-fluent, bool, default = false};
GOAL(xpos, ypos) : {non-fluent, bool, default = false};
move-east : {action-fluent, bool, default = false};
move-west : {action-fluent, bool, default = false};
INPUT-RATE : {non-fluent, real, default = 0.2};
move-south : {action-fluent, bool, default = false};
MAX-YPOS(ypos) : {non-fluent, bool, default = false};
SOUTH(ypos, ypos) : {non-fluent, bool, default = false};
move-north : {action-fluent, bool, default = false};
EAST(xpos, xpos) : {non-fluent, bool, default = false};
WEST(xpos, xpos) : {non-fluent, bool, default = false};
};
cpfs {
(obstacle-at’ ?x ?y) = (if (| (MIN-YPOS ?y) (MAX-YPOS ?y) ) then (KronDelta false) else (if (MAX-XPOS ?x) then (Bernoulli (INPUT-RATE)) else (KronDelta (exists ( (?x2 : xpos) ) (^ (EAST ?x ?x2) (obstacle-at ?x2 ?y) )))));
(robot-at’ ?x ?y) = (if (^ (GOAL ?x ?y) (robot-at ?x ?y) ) then (KronDelta true) else (if (exists ( (?x2 : xpos) (?y2 : ypos) ) (^ (GOAL ?x2 ?y2) (robot-at ?x2 ?y2) )) then (KronDelta false) else (if (^ (move-north) (exists ( (?y2 : ypos) ) (^ (NORTH ?y2 ?y) (robot-at ?x ?y2) (~ (obstacle-at ?x ?y2)) )) ) then (KronDelta true) else (if (^ (move-north) (exists ( (?y2 : ypos) ) (^ (NORTH ?y ?y2) (robot-at ?x ?y) )) ) then (KronDelta false) else (if (^ (move-south) (exists ( (?y2 : ypos) ) (^ (SOUTH ?y2 ?y) (robot-at ?x ?y2) (~ (obstacle-at ?x ?y2)) )) ) then (KronDelta true) else (if (^ (move-south) (exists ( (?y2 : ypos) ) (^ (SOUTH ?y ?y2) (robot-at ?x ?y) )) ) then (KronDelta false) else (if (^ (move-east) (exists ( (?x2 : xpos) ) (^ (EAST ?x2 ?x) (robot-at ?x2 ?y) (~ (obstacle-at ?x2 ?y)) )) ) then (KronDelta true) else (if (^ (move-east) (exists ( (?x2 : xpos) ) (^ (EAST ?x ?x2) (robot-at ?x ?y) )) ) then (KronDelta false) else (if (^ (move-west) (exists ( (?x2 : xpos) ) (^ (WEST ?x2 ?x) (robot-at ?x2 ?y) (~ (obstacle-at ?x2 ?y)) )) ) then (KronDelta true) else (if (^ (move-west) (exists ( (?x2 : xpos) ) (^ (WEST ?x ?x2) (robot-at ?x ?y) )) ) then (KronDelta false) else (KronDelta (^ (robot-at ?x ?y) (~ (obstacle-at ?x ?y)) ))))))))))));
};
reward = (sum ( (?x : xpos) (?y : ypos) ) (- 0 (^ (GOAL ?x ?y) (~ (robot-at ?x ?y)) )));
state-action-constraints {
};
}