domain skill_teaching_pomdp {
requirements = {
reward-deterministic,
partially-observed
};
types {
skill : object;
};
pvariables {
PROB_HIGH(skill) : {non-fluent, real, default = 0.9};
answeredRight(skill) : {state-fluent, bool, default = false};
PRE_REQ(skill, skill) : {non-fluent, bool, default = false};
PROB_PER_PRE_MED(skill) : {non-fluent, real, default = 0.3};
proficiencyMed(skill) : {state-fluent, bool, default = false};
PROB_ALL_PRE(skill) : {non-fluent, real, default = 1.0};
SKILL_WEIGHT(skill) : {non-fluent, real, default = 1.0};
PROB_ALL_PRE_MED(skill) : {non-fluent, real, default = 1.0};
answeredRightObs(skill) : {observ-fluent, bool};
updateTurnObs(skill) : {observ-fluent, bool};
hintedRight(skill) : {state-fluent, bool, default = false};
proficiencyHigh(skill) : {state-fluent, bool, default = false};
updateTurn(skill) : {state-fluent, bool, default = false};
PROB_PER_PRE(skill) : {non-fluent, real, default = 0.1};
FALSE_POS(skill) : {non-fluent, real, default = 0.1};
fpos(skill) : {state-fluent, bool, default = false};
askProb(skill) : {action-fluent, bool, default = false};
hintDelayVar(skill) : {state-fluent, bool, default = false};
giveHint(skill) : {action-fluent, bool, default = false};
};
cpfs {
(hintedRight’ ?s) = (KronDelta (^ (forall ( (?s3 : skill) ) (~ (updateTurn ?s3))) (giveHint ?s) (forall ( (?s2 : skill) ) (=> (PRE_REQ ?s2 ?s) (proficiencyHigh ?s2) )) ));
(answeredRightObs ?s) = (KronDelta (answeredRight’ ?s));
(updateTurnObs ?s) = (KronDelta (updateTurn’ ?s));
(updateTurn’ ?s) = (KronDelta (^ (forall ( (?s2 : skill) ) (~ (updateTurn ?s2))) (| (askProb ?s) (giveHint ?s) ) ));
(proficiencyMed’ ?s) = (if (^ (~ (updateTurn ?s)) (proficiencyMed ?s) ) then (KronDelta true) else (if (^ (updateTurn ?s) (hintedRight ?s) ) then (KronDelta true) else (if (^ (updateTurn ?s) (answeredRight ?s) (~ (proficiencyHigh ?s)) (~ (fpos ?s)) ) then (KronDelta true) else (if (^ (proficiencyMed ?s) (updateTurn ?s) (answeredRight ?s) ) then (KronDelta true) else (if (proficiencyHigh ?s) then (KronDelta true) else (if (^ (proficiencyMed ?s) (updateTurn ?s) (hintDelayVar ?s) ) then (KronDelta true) else (KronDelta false)))))));
(fpos’ ?s) = (if (^ (forall ( (?s2 : skill) ) (~ (updateTurn ?s2))) (askProb ?s) ) then (Bernoulli (FALSE_POS ?s)) else (KronDelta false));
(hintDelayVar’ ?s) = (KronDelta (^ (forall ( (?s2 : skill) ) (~ (updateTurn ?s2))) (giveHint ?s) ));
(answeredRight’ ?s) = (if (^ (forall ( (?s2 : skill) ) (~ (updateTurn ?s2))) (askProb ?s) (proficiencyHigh ?s) ) then (Bernoulli (PROB_HIGH ?s)) else (if (^ (forall ( (?s3 : skill) ) (~ (updateTurn ?s3))) (askProb ?s) (proficiencyMed ?s) (forall ( (?s2 : skill) ) (=> (PRE_REQ ?s2 ?s) (proficiencyHigh ?s2) )) ) then (Bernoulli (PROB_ALL_PRE_MED ?s)) else (if (^ (forall ( (?s2 : skill) ) (~ (updateTurn ?s2))) (askProb ?s) (proficiencyMed ?s) (askProb ?s) ) then (Bernoulli (sum ( (?s2 : skill) ) (* (PRE_REQ ?s2 ?s) (PROB_PER_PRE_MED ?s)))) else (if (^ (forall ( (?s3 : skill) ) (~ (updateTurn ?s3))) (askProb ?s) (forall ( (?s2 : skill) ) (=> (PRE_REQ ?s2 ?s) (proficiencyHigh ?s2) )) ) then (Bernoulli (PROB_ALL_PRE ?s)) else (if (^ (forall ( (?s2 : skill) ) (~ (updateTurn ?s2))) (askProb ?s) (askProb ?s) ) then (Bernoulli (sum ( (?s2 : skill) ) (* (PRE_REQ ?s2 ?s) (PROB_PER_PRE ?s)))) else (KronDelta false))))));
(proficiencyHigh’ ?s) = (if (^ (~ (updateTurn ?s)) (proficiencyHigh ?s) ) then (KronDelta true) else (if (^ (proficiencyMed ?s) (updateTurn ?s) (answeredRight ?s) (~ (fpos ?s)) ) then (KronDelta true) else (if (^ (proficiencyHigh ?s) (updateTurn ?s) (answeredRight ?s) ) then (KronDelta true) else (if (^ (proficiencyHigh ?s) (updateTurn ?s) (| (hintDelayVar ?s) (answeredRight ?s) ) ) then (KronDelta true) else (KronDelta false)))));
};
reward = (+ (sum ( (?s : skill) ) (* (SKILL_WEIGHT ?s) (proficiencyHigh ?s))) (sum ( (?s : skill) ) (- 0 (* (SKILL_WEIGHT ?s) (~ (proficiencyMed ?s))))));
state-action-constraints {
};
}