Thomas Knoll
1 year ago
4 changed files with 1849 additions and 0 deletions
-
6lib/stormpy/examples/files.py
-
1717lib/stormpy/examples/files/mdp/CliffZigZag.prism
-
68lib/stormpy/examples/files/smg/robot_controller.prism
-
58lib/stormpy/examples/files/smg/safety_shield_robot.prism
1717
lib/stormpy/examples/files/mdp/CliffZigZag.prism
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,68 @@ |
|||
smg |
|||
|
|||
player controlledRobot |
|||
[e1], [w1], [n1], [s1], [pickUp], [deliver] |
|||
endplayer |
|||
|
|||
player adverseryRobot |
|||
[e2], [w2], [n2], [s2] |
|||
endplayer |
|||
|
|||
// (w+1)x16 - grid |
|||
const int w; |
|||
const int width = w; |
|||
const int height = 15; |
|||
|
|||
const int xmin = 0; |
|||
const int xmax = width; |
|||
const int ymin = 0; |
|||
const int ymax = height; |
|||
|
|||
// probabilty to get stuck |
|||
const double stuckProp = 1/5; |
|||
const double notstuckProp = 1 - stuckProp; |
|||
|
|||
global move : [0..1] init 0; |
|||
|
|||
formula robot1BetweenShelves = !(y1=0 | y1=height); |
|||
formula robot2BetweenShelves = !(y2=0 | y2=height); |
|||
formula robot1AboveShelves = mod(x1, 2) = 1; |
|||
formula robot1BelowShelves = mod(x1, 2) = 1; |
|||
formula robot2AboveShelves = mod(x2, 2) = 1; |
|||
formula robot2BelowShelves = mod(x2, 2) = 1; |
|||
formula robot1OpenRow = mod(y1, 5) = 0; |
|||
formula robot2OpenRow = mod(y2, 5) = 0; |
|||
|
|||
label "crash" = x1=x2 & y1=y2; |
|||
|
|||
module robot1 |
|||
x1 : [0..width] init width; |
|||
y1 : [0..height] init 0; |
|||
picked_up : bool init false; |
|||
|
|||
[e1] move=0 & x1<xmax & (!robot1BetweenShelves | robot1OpenRow) -> (x1'=x1+1) & (move'=1); |
|||
[w1] move=0 & x1>0 & (!robot1BetweenShelves | robot1OpenRow) -> (x1'=x1-1) & (move'=1); |
|||
|
|||
[n1] move=0 & y1>0 & !robot1BelowShelves -> (y1'=y1-1) & (move'=1); |
|||
[s1] move=0 & y1<ymax & !robot1AboveShelves -> (y1'=y1+1) & (move'=1); |
|||
|
|||
[pickUp] move=0 & !picked_up & x1=0 & y1=ymax -> (picked_up'=true) & (move'=1); |
|||
[deliver] move=0 & picked_up & x1=width & y1=0 -> (picked_up'=false) & (move'=1); |
|||
endmodule |
|||
|
|||
module robot2 |
|||
x2 : [0..width] init xmax; |
|||
y2 : [0..height] init 0; |
|||
|
|||
[e2] move=1 & x2<xmax & (!robot2BetweenShelves | robot2OpenRow) -> notstuckProp : (x2'=x2+1) & (move'=0) + stuckProp : (move'=0); |
|||
[w2] move=1 & x2>0 & (!robot2BetweenShelves | robot2OpenRow) -> notstuckProp : (x2'=x2-1) & (move'=0) + stuckProp : (move'=0); |
|||
|
|||
[n2] move=1 & y2>0 & !robot2BelowShelves -> notstuckProp : (y2'=y2-1) & (move'=0) + stuckProp : (move'=0); |
|||
[s2] move=1 & y2<ymax & !robot2AboveShelves -> notstuckProp : (y2'=y2+1) & (move'=0) + stuckProp : (move'=0); |
|||
endmodule |
|||
|
|||
rewards |
|||
true : -1; |
|||
x1=x2 & y1=y2 : -25; |
|||
[deliver] true : 100; |
|||
endrewards |
@ -0,0 +1,58 @@ |
|||
smg |
|||
|
|||
player shieldedRobot |
|||
[e1], [w1], [n1], [s1] |
|||
endplayer |
|||
|
|||
player adverseryRobot |
|||
[e2], [w2], [n2], [s2] |
|||
endplayer |
|||
|
|||
// (w+1)x16 - grid |
|||
//const int w; |
|||
const int width = 6; |
|||
const int height = 15; |
|||
|
|||
const int xmin = 0; |
|||
const int xmax = width; |
|||
const int ymin = 0; |
|||
const int ymax = height; |
|||
|
|||
// probabilty to get stuck |
|||
const double stuckProp = 1/5; |
|||
const double notstuckProp = 1 - stuckProp; |
|||
|
|||
global move : [0..1] init 0; |
|||
|
|||
formula robot1BetweenShelves = !(y1=0 | y1=height); |
|||
formula robot2BetweenShelves = !(y2=0 | y2=height); |
|||
formula robot1AboveShelves = mod(x1, 2) = 1; |
|||
formula robot1BelowShelves = mod(x1, 2) = 1; |
|||
formula robot2AboveShelves = mod(x2, 2) = 1; |
|||
formula robot2BelowShelves = mod(x2, 2) = 1; |
|||
formula robot1OpenRow = mod(y1, 5) = 0; |
|||
formula robot2OpenRow = mod(y2, 5) = 0; |
|||
|
|||
label "crash" = x1=x2 & y1=y2; |
|||
|
|||
module robot1 |
|||
x1 : [0..width] init 0; |
|||
y1 : [0..height] init ymax; |
|||
|
|||
[e1] move=0 & x1<xmax & (!robot1BetweenShelves | robot1OpenRow) -> (x1'=x1+1) & (move'=1); |
|||
[w1] move=0 & x1>0 & (!robot1BetweenShelves | robot1OpenRow) -> (x1'=x1-1) & (move'=1); |
|||
|
|||
[n1] move=0 & y1>0 & !robot1BelowShelves -> (y1'=y1-1) & (move'=1); |
|||
[s1] move=0 & y1<ymax & !robot1AboveShelves -> (y1'=y1+1) & (move'=1); |
|||
endmodule |
|||
|
|||
module robot2 |
|||
x2 : [0..width] init xmax; |
|||
y2 : [0..height] init 0; |
|||
|
|||
[e2] move=1 & x2<xmax & (!robot2BetweenShelves | robot2OpenRow) -> notstuckProp : (x2'=x2+1) & (move'=0) + stuckProp : (move'=0); |
|||
[w2] move=1 & x2>0 & (!robot2BetweenShelves | robot2OpenRow) -> notstuckProp : (x2'=x2-1) & (move'=0) + stuckProp : (move'=0); |
|||
|
|||
[n2] move=1 & y2>0 & !robot2BelowShelves -> notstuckProp : (y2'=y2-1) & (move'=0) + stuckProp : (move'=0); |
|||
[s2] move=1 & y2<ymax & !robot2AboveShelves -> notstuckProp : (y2'=y2+1) & (move'=0) + stuckProp : (move'=0); |
|||
endmodule |
Write
Preview
Loading…
Cancel
Save
Reference in new issue