domain recon_mdp {
requirements = {
reward-deterministic
};
types {
y_pos : object;
tool : object;
obj : object;
x_pos : object;
agent : object;
};
pvariables {
ADJACENT-LEFT(x_pos, x_pos) : {non-fluent, bool, default = false};
damaged(tool) : {state-fluent, bool, default = false};
agentAt(agent, x_pos, y_pos) : {state-fluent, bool, default = false};
GOOD_PIC_WEIGHT : {non-fluent, real, default = 1.0};
lifeChecked(obj) : {state-fluent, bool, default = false};
LIFE_TOOL(tool) : {non-fluent, bool, default = false};
useToolOn(agent, tool, obj) : {action-fluent, bool, default = false};
WATER_TOOL(tool) : {non-fluent, bool, default = false};
lifeChecked2(obj) : {state-fluent, bool, default = false};
pictureTaken(obj) : {state-fluent, bool, default = false};
left(agent) : {action-fluent, bool, default = false};
repair(agent, tool) : {action-fluent, bool, default = false};
waterDetected(obj) : {state-fluent, bool, default = false};
right(agent) : {action-fluent, bool, default = false};
ADJACENT-DOWN(y_pos, y_pos) : {non-fluent, bool, default = false};
lifeDetected(obj) : {state-fluent, bool, default = false};
HAZARD(x_pos, y_pos) : {non-fluent, bool, default = false};
DETECT_PROB_DAMAGED : {non-fluent, real, default = 0.4};
DAMAGE_PROB(tool) : {non-fluent, real, default = 0.0};
ADJACENT-UP(y_pos, y_pos) : {non-fluent, bool, default = false};
up(agent) : {action-fluent, bool, default = false};
waterChecked(obj) : {state-fluent, bool, default = false};
CAMERA_TOOL(tool) : {non-fluent, bool, default = false};
objAt(obj, x_pos, y_pos) : {non-fluent, bool, default = false};
ADJACENT-RIGHT(x_pos, x_pos) : {non-fluent, bool, default = false};
BASE(x_pos, y_pos) : {non-fluent, bool, default = false};
BAD_PIC_WEIGHT : {non-fluent, real, default = 2.0};
down(agent) : {action-fluent, bool, default = false};
DETECT_PROB : {non-fluent, real, default = 0.8};
};
cpfs {
(lifeDetected’ ?o) = (if (lifeDetected ?o) then (KronDelta true) else (if (| (lifeChecked2 ?o) (~ (waterDetected ?o)) ) then (KronDelta false) else (if (exists ( (?t : tool) (?x : x_pos) (?y : y_pos) (?a : agent) ) (^ (LIFE_TOOL ?t) (damaged ?t) (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) )) then (Bernoulli (DETECT_PROB_DAMAGED)) else (if (exists ( (?t : tool) (?x : x_pos) (?y : y_pos) (?a : agent) ) (^ (LIFE_TOOL ?t) (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) )) then (Bernoulli (DETECT_PROB)) else (KronDelta false)))));
(agentAt’ ?a ?x ?y) = (KronDelta (| (^ (agentAt ?a ?x ?y) (~ (| (up ?a) (down ?a) (right ?a) (left ?a) )) ) (^ (left ?a) (exists ( (?x2 : x_pos) ) (^ (agentAt ?a ?x2 ?y) (ADJACENT-LEFT ?x2 ?x) )) ) (^ (right ?a) (exists ( (?x2 : x_pos) ) (^ (agentAt ?a ?x2 ?y) (ADJACENT-RIGHT ?x2 ?x) )) ) (^ (up ?a) (exists ( (?y2 : y_pos) ) (^ (agentAt ?a ?x ?y2) (ADJACENT-UP ?y2 ?y) )) ) (^ (down ?a) (exists ( (?y2 : y_pos) ) (^ (agentAt ?a ?x ?y2) (ADJACENT-DOWN ?y2 ?y) )) ) ));
(waterChecked’ ?o) = (KronDelta (| (waterChecked ?o) (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?t : tool) ) (^ (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) (WATER_TOOL ?t) )) ));
(lifeChecked’ ?o) = (KronDelta (| (lifeChecked ?o) (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?t : tool) ) (^ (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) (LIFE_TOOL ?t) )) ));
(damaged’ ?t) = (if (^ (damaged ?t) (~ (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) ) (^ (agentAt ?a ?x ?y) (BASE ?x ?y) (repair ?a ?t) ))) ) then (KronDelta true) else (if (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) ) (^ (agentAt ?a ?x ?y) (~ (BASE ?x ?y)) (HAZARD ?x ?y) )) then (Bernoulli (DAMAGE_PROB ?t)) else (if (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?x2 : x_pos) ) (^ (agentAt ?a ?x ?y) (~ (BASE ?x ?y)) (HAZARD ?x2 ?y) (| (ADJACENT-LEFT ?x ?x2) (ADJACENT-RIGHT ?x ?x2) ) )) then (Bernoulli (/ (DAMAGE_PROB ?t) 2.0)) else (if (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?y2 : y_pos) ) (^ (agentAt ?a ?x ?y) (~ (BASE ?x ?y)) (HAZARD ?x ?y2) (| (ADJACENT-UP ?y ?y2) (ADJACENT-DOWN ?y ?y2) ) )) then (Bernoulli (/ (DAMAGE_PROB ?t) 2.0)) else (KronDelta false)))));
(pictureTaken’ ?o) = (KronDelta (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?t : tool) ) (^ (CAMERA_TOOL ?t) (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) (~ (damaged ?t)) )));
(lifeChecked2′ ?o) = (KronDelta (| (lifeChecked2 ?o) (^ (lifeChecked ?o) (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?t : tool) ) (^ (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) (LIFE_TOOL ?t) )) ) ));
(waterDetected’ ?o) = (if (waterDetected ?o) then (KronDelta true) else (if (waterChecked ?o) then (KronDelta false) else (if (exists ( (?t : tool) (?x : x_pos) (?y : y_pos) (?a : agent) ) (^ (WATER_TOOL ?t) (damaged ?t) (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) )) then (Bernoulli (DETECT_PROB_DAMAGED)) else (if (exists ( (?t : tool) (?x : x_pos) (?y : y_pos) (?a : agent) ) (^ (WATER_TOOL ?t) (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) )) then (Bernoulli (DETECT_PROB)) else (KronDelta false)))));
};
reward = (+ (sum ( (?o : obj) ) (* (GOOD_PIC_WEIGHT) (^ (~ (pictureTaken ?o)) (lifeDetected ?o) (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?t : tool) ) (^ (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) (CAMERA_TOOL ?t) (~ (damaged ?t)) )) ))) (sum ( (?o : obj) ) (- 0 (* (BAD_PIC_WEIGHT) (^ (~ (lifeDetected ?o)) (exists ( (?x : x_pos) (?y : y_pos) (?a : agent) (?t : tool) ) (^ (agentAt ?a ?x ?y) (objAt ?o ?x ?y) (useToolOn ?a ?t ?o) (CAMERA_TOOL ?t) )) )))));
state-action-constraints {
};
}