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.

48 lines
2.9 KiB

  1. mdp
  2. formula AgentCannotMoveNorth = (xAgent=2&yAgent=1) | (xAgent=3&yAgent=1) | (xAgent=4&yAgent=1) | (xAgent=5&yAgent=1) | (xAgent=6&yAgent=1) | (xAgent=1&yAgent=1);
  3. formula AgentCannotMoveEast = (xAgent=6&yAgent=1) | (xAgent=6&yAgent=2) | (xAgent=6&yAgent=3) | (xAgent=6&yAgent=4) | (xAgent=6&yAgent=5);
  4. formula AgentCannotMoveSouth = (xAgent=1&yAgent=5) | (xAgent=2&yAgent=5) | (xAgent=3&yAgent=5) | (xAgent=4&yAgent=5) | (xAgent=5&yAgent=5) | (xAgent=6&yAgent=5);
  5. formula AgentCannotMoveWest = (xAgent=1&yAgent=2) | (xAgent=1&yAgent=3) | (xAgent=1&yAgent=4) | (xAgent=1&yAgent=5) | (xAgent=1&yAgent=1);
  6. formula AgentIsOnSlippery = false;
  7. formula AgentIsInLava = (xAgent=2&yAgent=2) | (xAgent=3&yAgent=2) | (xAgent=2&yAgent=3) | (xAgent=3&yAgent=3) | (xAgent=2&yAgent=4) | (xAgent=3&yAgent=4);
  8. formula AgentIsInLavaAndNotDone = AgentIsInLava & !AgentDone;
  9. label "AgentIsInLavaAndNotDone" = AgentIsInLava & !AgentDone;
  10. formula AgentIsInGoal = (xAgent=6&yAgent=5);
  11. formula AgentIsInGoalAndNotDone = AgentIsInGoal & !AgentDone;
  12. label "AgentIsInGoalAndNotDone" = AgentIsInGoal & !AgentDone;
  13. module Agent
  14. xAgent : [1..6] init 1;
  15. yAgent : [1..7] init 1;
  16. AgentDone : bool init false;
  17. viewAgent : [0..3] init 0;
  18. [Agent_turn_right] !AgentIsInGoal & !AgentIsInLava & !AgentIsOnSlippery -> (viewAgent'=mod(viewAgent + 1, 4)) ;
  19. [Agent_turn_left] !AgentIsInGoal & !AgentIsInLava & !AgentIsOnSlippery & viewAgent>0 -> (viewAgent'=viewAgent - 1) ;
  20. [Agent_turn_left] !AgentIsInGoal & !AgentIsInLava & !AgentIsOnSlippery & viewAgent=0 -> (viewAgent'=3) ;
  21. [Agent_move_north] viewAgent=3 & !AgentIsOnSlippery & !AgentIsInLava &!AgentIsInGoal & !AgentCannotMoveNorth -> (yAgent'=yAgent-1);
  22. [Agent_move_east] viewAgent=0 & !AgentIsOnSlippery & !AgentIsInLava &!AgentIsInGoal & !AgentCannotMoveEast -> (xAgent'=xAgent+1);
  23. [Agent_move_south] viewAgent=1 & !AgentIsOnSlippery & !AgentIsInLava &!AgentIsInGoal & !AgentCannotMoveSouth -> (yAgent'=yAgent+1);
  24. [Agent_move_west] viewAgent=2 & !AgentIsOnSlippery & !AgentIsInLava &!AgentIsInGoal & !AgentCannotMoveWest -> (xAgent'=xAgent-1);
  25. [Agent_done] AgentIsInGoal | AgentIsInLava -> (AgentDone'=true);
  26. endmodule
  27. // <resultingFile, PreSafety, gamma=0.9> Pmax=? [G !'AgentIsInLavaAndNotDone'];
  28. // Model handling soll auch das Shield zurückgeben
  29. // Im SparseMdpPrctlModelChecker wird das shield mit createShield erstellt
  30. // es soll irgendwie im CheckResult landen welches im model-handling.h verifyWithSparseEngine (Methode) gehandelt wird.
  31. // Result für den MDP Typen ist im SparseMdpPrctlHelper.computeUntilProbabilities
  32. // MDPSparseModelCheckingHelperReturnType ist der Typ von dem
  33. // Das ergebnis vom SparseMdpPrctlModelChecker ist ein ExplicitQuantitativeCheckResult
  34. // Prinzipieller ablauf
  35. // PRISM -> Parser -> ModelEngine |
  36. // model_handlling.h -> AbstractMC -> SparseMDPML -> SparseMdpPrctlHelper
  37. // Property -> Formula Parser -> |