You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

115 lines
2.4 KiB

// maze example (POMDP)
// Littman, Cassandra and Kaelbling
// Learning policies for partially observable environments: Scaling up
// Technical Report CS, Brown University
// gxn 29/01/16
// state space (value of variable "s")
// 0 1 2 3 4
// 5 6 7
// 8 10 9
// 10 is the target
pomdp
// can observe the walls and target
observables
o
endobservables
// o=0 - observation in initial state
// o=1 - west and north walls (s0)
// o=2 - north and south ways (s1 and s3)
// o=3 - north wall (s2)
// o=4 - east and north way (s4)
// o=5 - east and west walls (s5, s6 and s7)
// o=6 - east, west and south walls (s8 and s9)
// o=7 - the target (s10)
module maze
s : [-1..10];
o : [0..7];
// initialisation
[] s=-1 -> 0.1 : (s'=0) & (o'=1)
+ 0.1 : (s'=1) & (o'=2)
+ 0.1 : (s'=2) & (o'=3)
+ 0.1 : (s'=3) & (o'=2)
+ 0.1 : (s'=4) & (o'=4)
+ 0.1 : (s'=5) & (o'=5)
+ 0.1 : (s'=6) & (o'=5)
+ 0.1 : (s'=7) & (o'=5)
+ 0.1 : (s'=8) & (o'=6)
+ 0.1 : (s'=9) & (o'=6);
// moving around the maze
[east] s=0 -> (s'=1) & (o'=2);
[west] s=0 -> (s'=0);
[north] s=0 -> (s'=0);
[south] s=0 -> (s'=5) & (o'=5);
[east] s=1 -> (s'=2) & (o'=3);
[west] s=1 -> (s'=0) & (o'=1);
[north] s=1 -> (s'=1);
[south] s=1 -> (s'=1);
[east] s=2 -> (s'=3) & (o'=2);
[west] s=2 -> (s'=1) & (o'=2);
[north] s=2 -> (s'=2);
[south] s=2 -> (s'=6) & (o'=5);
[east] s=3 -> (s'=4) & (o'=4);
[west] s=3 -> (s'=2) & (o'=2);
[north] s=3 -> (s'=3);
[south] s=3 -> (s'=3);
[east] s=4 -> (s'=4);
[west] s=4 -> (s'=3) & (o'=2);
[north] s=4 -> (s'=4);
[south] s=4 -> (s'=7) & (o'=5);
[east] s=5 -> (s'=5);
[west] s=5 -> (s'=5);
[north] s=5 -> (s'=0) & (o'=1);
[south] s=5 -> (s'=8) & (o'=6);
[east] s=6 -> (s'=6);
[west] s=6 -> (s'=6);
[north] s=6 -> (s'=2) & (o'=3);
[south] s=6 -> (s'=10) & (o'=7);
[east] s=7 -> (s'=7);
[west] s=7 -> (s'=7);
[north] s=7 -> (s'=4) & (o'=4);
[south] s=7 -> (s'=9) & (o'=6);
[east] s=8 -> (s'=8);
[west] s=8 -> (s'=8);
[north] s=8 -> (s'=5) & (o'=5);
[south] s=8 -> (s'=8);
[east] s=9 -> (s'=9);
[west] s=9 -> (s'=9);
[north] s=9 -> (s'=7) & (o'=5);
[south] s=9 -> (s'=9);
// loop when we reach the target
[done] s=10 -> true;
endmodule
// reward structure (number of steps to reach the target)
rewards
[east] true : 1;
[west] true : 1;
[north] true : 1;
[south] true : 1;
endrewards
// target observation
label "target" = o=7;