public void StepwiseProbablityOfNotLabel1UntilLabel2ForExample4() { var example = new Example4(); var dtmc = example.MarkovChain; var results = new List <Probability>(); using (var prismChecker = new BuiltinDtmcModelChecker(dtmc, Output.TextWriterAdapter())) { for (var i = 0; i <= 10; i++) { var boundedStepi = new BoundedBinaryFormula(new UnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Not), BinaryOperator.Until, MarkovChainExample.Label2Formula, i); var resultBoundedStepi = prismChecker.CalculateProbability(boundedStepi); Output.Log($"Result {i}:\t{resultBoundedStepi}"); results.Add(resultBoundedStepi); } var boundedStep200 = new BoundedBinaryFormula(new UnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Not), BinaryOperator.Until, MarkovChainExample.Label2Formula, 200); var resultBoundedStep200 = prismChecker.CalculateProbability(boundedStep200); Output.Log($"Result {200}:\t{resultBoundedStep200}"); /* * var inf = new BinaryFormula(new UnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Not), BinaryOperator.Until, MarkovChainExample.Label2Formula); * var resultInf = prismChecker.CalculateProbability(inf); * Output.Log($"Result inf:\t{resultInf}"); */ } }
public void ProbabilityIn10Steps_Label1UntilLabel2(MarkovChainExample example) { var dtmc = example.MarkovChain; var label1UntilLabel2 = new BoundedBinaryFormula(MarkovChainExample.Label1Formula, BinaryOperator.Until, MarkovChainExample.Label2Formula, 10); using (var prismChecker = new BuiltinDtmcModelChecker(dtmc, Output.TextWriterAdapter())) { var result = prismChecker.CalculateProbability(label1UntilLabel2); result.Is(example.ProbabilityLabel1UntilLabel2, 0.0001).ShouldBe(true); } }
public void ProbabilityToReachIn10Steps_Label1(MarkovChainExample example) { var dtmc = example.MarkovChain; var finallyLabel1 = new BoundedUnaryFormula(MarkovChainExample.Label1Formula, UnaryOperator.Finally, 10); using (var prismChecker = new BuiltinDtmcModelChecker(dtmc, Output.TextWriterAdapter())) { var result = prismChecker.CalculateProbability(finallyLabel1); result.Is(example.ProbabilityFinally10Label1, 0.0001).ShouldBe(true); } }
/// <summary> /// Calculates the probability of formula. /// </summary> /// <param name="model">The model that should be checked.</param> /// <param name="formula">The state formula to be checked.</param> /// <param name="terminateEarlyFormula">When terminateEarlyFormula is satisfied stop building the state space.</param> /// <param name="bound">The maximal number of steps. If stateFormula is satisfied the first time any step later than bound, this probability does not count into the end result.</param> public static Probability CalculateProbabilityOfFormulaBounded(ModelBase model, Formula formula, Formula terminateEarlyFormula, int bound) { Probability probability; var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new DtmcFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.AddFormulaToCheck(formula); var markovChain = markovChainGenerator.GenerateMarkovChain(terminateEarlyFormula); using (var modelChecker = new BuiltinDtmcModelChecker(markovChain, System.Console.Out)) { probability = modelChecker.CalculateProbability(formula); } return(probability); }
/// <summary> /// Calculates the probability to reach a state where <paramref name="stateFormula" /> holds. /// </summary> /// <param name="model">The model that should be checked.</param> /// <param name="stateFormula">The state formula to be checked.</param> public static Probability CalculateProbabilityToReachState(ModelBase model, Formula stateFormula) { Probability probabilityToReachState; var probabilityToReachStateFormula = new UnaryFormula(stateFormula, UnaryOperator.Finally); var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new DtmcFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = TraversalConfiguration }; markovChainGenerator.AddFormulaToCheck(probabilityToReachStateFormula); var markovChain = markovChainGenerator.GenerateMarkovChain(stateFormula); using (var modelChecker = new BuiltinDtmcModelChecker(markovChain, System.Console.Out)) { probabilityToReachState = modelChecker.CalculateProbability(probabilityToReachStateFormula); } return(probabilityToReachState); }