public void Check() { var m = new SharedModels.SimpleExample2a(); Probability minProbabilityOfFinal0; Probability minProbabilityOfFinal0Lt; Probability minProbabilityOfFinal1; Probability minProbabilityOfFinal2; Probability maxProbabilityOfFinal0; Probability maxProbabilityOfFinal0Lt; Probability maxProbabilityOfFinal1; Probability maxProbabilityOfFinal2; var final0Formula = new BoundedUnaryFormula(SharedModels.SimpleExample2a.StateIs0, UnaryOperator.Finally, 4); var final0LtFormula = new BoundedUnaryFormula( new BinaryFormula(SharedModels.SimpleExample2a.StateIs0, BinaryOperator.And, SharedModels.SimpleExample2a.LocalVarIsTrue), UnaryOperator.Finally, 4); var final1Formula = new BoundedUnaryFormula(SharedModels.SimpleExample2a.StateIs1, UnaryOperator.Finally, 4); var final2Formula = new BoundedUnaryFormula(SharedModels.SimpleExample2a.StateIs2, UnaryOperator.Finally, 4); var nmdpGenerator = new SimpleNmdpFromExecutableModelGenerator(m); nmdpGenerator.Configuration.WriteGraphvizModels = true; nmdpGenerator.Configuration.DefaultTraceOutput = Output.TextWriterAdapter(); nmdpGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small; nmdpGenerator.Configuration.UseAtomarPropositionsAsStateLabels = false; nmdpGenerator.AddFormulaToCheck(final0Formula); nmdpGenerator.AddFormulaToCheck(final0LtFormula); nmdpGenerator.AddFormulaToCheck(final1Formula); nmdpGenerator.AddFormulaToCheck(final2Formula); var nmdp = nmdpGenerator.GenerateMarkovDecisionProcess(); var typeOfModelChecker = typeof(BuiltinNmdpModelChecker); var modelChecker = (NmdpModelChecker)Activator.CreateInstance(typeOfModelChecker, nmdp, Output.TextWriterAdapter()); using (modelChecker) { minProbabilityOfFinal0 = modelChecker.CalculateMinimalProbability(final0Formula); minProbabilityOfFinal0Lt = modelChecker.CalculateMinimalProbability(final0LtFormula); minProbabilityOfFinal1 = modelChecker.CalculateMinimalProbability(final1Formula); minProbabilityOfFinal2 = modelChecker.CalculateMinimalProbability(final2Formula); maxProbabilityOfFinal0 = modelChecker.CalculateMaximalProbability(final0Formula); maxProbabilityOfFinal0Lt = modelChecker.CalculateMaximalProbability(final0LtFormula); maxProbabilityOfFinal1 = modelChecker.CalculateMaximalProbability(final1Formula); maxProbabilityOfFinal2 = modelChecker.CalculateMaximalProbability(final2Formula); } minProbabilityOfFinal0.Is(1.0, 0.000001).ShouldBe(true); minProbabilityOfFinal0Lt.Is(0.0, 0.000001).ShouldBe(true); minProbabilityOfFinal1.Is(0.0, 0.000001).ShouldBe(true); minProbabilityOfFinal2.Is(0.0, 0.000001).ShouldBe(true); maxProbabilityOfFinal0.Is(1.0, 0.000001).ShouldBe(true); maxProbabilityOfFinal0Lt.Is(1.0, 0.000001).ShouldBe(true); var maxProbabilityOf1And2Calculated = 1.0 - Math.Pow(0.6, 4); maxProbabilityOfFinal1.Is(maxProbabilityOf1And2Calculated, 0.000001).ShouldBe(true); maxProbabilityOfFinal2.Is(maxProbabilityOf1And2Calculated, 0.000001).ShouldBe(true); }
private void CheckBounded(AnalysisConfiguration configuration) { var m = new SharedModels.SimpleExample2a(); Probability minProbabilityOfFinal0; Probability minProbabilityOfFinal0Lt; Probability minProbabilityOfFinal1; Probability minProbabilityOfFinal2; Probability maxProbabilityOfFinal0; Probability maxProbabilityOfFinal0Lt; Probability maxProbabilityOfFinal1; Probability maxProbabilityOfFinal2; var final0Formula = new BoundedUnaryFormula(SharedModels.SimpleExample2a.StateIs0, UnaryOperator.Finally, 4); var final0LtFormula = new BoundedUnaryFormula( new BinaryFormula(SharedModels.SimpleExample2a.StateIs0, BinaryOperator.And, SharedModels.SimpleExample2a.LocalVarIsTrue), UnaryOperator.Finally, 4); var final1Formula = new BoundedUnaryFormula(SharedModels.SimpleExample2a.StateIs1, UnaryOperator.Finally, 4); var final2Formula = new BoundedUnaryFormula(SharedModels.SimpleExample2a.StateIs2, UnaryOperator.Finally, 4); var mdpGenerator = new SimpleMarkovDecisionProcessFromExecutableModelGenerator(m); mdpGenerator.Configuration = configuration; mdpGenerator.AddFormulaToCheck(final0Formula); mdpGenerator.AddFormulaToCheck(final0LtFormula); mdpGenerator.AddFormulaToCheck(final1Formula); mdpGenerator.AddFormulaToCheck(final2Formula); var mdp = mdpGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); var modelChecker = new ConfigurationDependentLtmdpModelChecker(configuration, mdp, Output.TextWriterAdapter()); using (modelChecker) { minProbabilityOfFinal0 = modelChecker.CalculateMinimalProbability(final0Formula); minProbabilityOfFinal0Lt = modelChecker.CalculateMinimalProbability(final0LtFormula); minProbabilityOfFinal1 = modelChecker.CalculateMinimalProbability(final1Formula); minProbabilityOfFinal2 = modelChecker.CalculateMinimalProbability(final2Formula); maxProbabilityOfFinal0 = modelChecker.CalculateMaximalProbability(final0Formula); maxProbabilityOfFinal0Lt = modelChecker.CalculateMaximalProbability(final0LtFormula); maxProbabilityOfFinal1 = modelChecker.CalculateMaximalProbability(final1Formula); maxProbabilityOfFinal2 = modelChecker.CalculateMaximalProbability(final2Formula); } minProbabilityOfFinal0.Is(1.0, 0.000001).ShouldBe(true); minProbabilityOfFinal0Lt.Is(0.0, 0.000001).ShouldBe(true); minProbabilityOfFinal1.Is(0.0, 0.000001).ShouldBe(true); minProbabilityOfFinal2.Is(0.0, 0.000001).ShouldBe(true); maxProbabilityOfFinal0.Is(1.0, 0.000001).ShouldBe(true); maxProbabilityOfFinal0Lt.Is(1.0, 0.000001).ShouldBe(true); var maxProbabilityOf1And2Calculated = 1.0 - Math.Pow(0.6, 4); maxProbabilityOfFinal1.Is(maxProbabilityOf1And2Calculated, 0.000001).ShouldBe(true); maxProbabilityOfFinal2.Is(maxProbabilityOf1And2Calculated, 0.000001).ShouldBe(true); }
public void Check() { var m = new SharedModels.SimpleExample2a(); Probability probabilityOfFinal0; Probability probabilityOfFinal0Lt; Probability probabilityOfFinal1; Probability probabilityOfFinal2; var final0Formula = new UnaryFormula(SharedModels.SimpleExample2a.StateIs0, UnaryOperator.Finally); var final0LtFormula = new UnaryFormula( new BinaryFormula(SharedModels.SimpleExample2a.StateIs0, BinaryOperator.And, SharedModels.SimpleExample2a.LocalVarIsTrue), UnaryOperator.Finally); var final1Formula = new UnaryFormula(SharedModels.SimpleExample2a.StateIs1, UnaryOperator.Finally); var final2Formula = new UnaryFormula(SharedModels.SimpleExample2a.StateIs2, UnaryOperator.Finally); var markovChainGenerator = new SimpleDtmcFromExecutableModelGenerator(m); markovChainGenerator.Configuration.WriteGraphvizModels = true; markovChainGenerator.Configuration.DefaultTraceOutput = Output.TextWriterAdapter(); markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small; markovChainGenerator.Configuration.UseAtomarPropositionsAsStateLabels = false; markovChainGenerator.AddFormulaToCheck(final0Formula); markovChainGenerator.AddFormulaToCheck(final0LtFormula); markovChainGenerator.AddFormulaToCheck(final1Formula); markovChainGenerator.AddFormulaToCheck(final2Formula); var dtmc = markovChainGenerator.GenerateMarkovChain(); var typeOfModelChecker = typeof(BuiltinDtmcModelChecker); var modelChecker = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter()); using (modelChecker) { probabilityOfFinal0 = modelChecker.CalculateProbability(final0Formula); probabilityOfFinal0Lt = modelChecker.CalculateProbability(final0LtFormula); probabilityOfFinal1 = modelChecker.CalculateProbability(final1Formula); probabilityOfFinal2 = modelChecker.CalculateProbability(final2Formula); } probabilityOfFinal0.Is(1.0, 0.000001).ShouldBe(true); probabilityOfFinal0Lt.Is(0.55 / 3.0 * 4.0, 0.000001).ShouldBe(true); probabilityOfFinal1.Is(0.5, 0.000001).ShouldBe(true); probabilityOfFinal2.Is(0.5, 0.000001).ShouldBe(true); }
private void Check(AnalysisConfiguration configuration) { var m = new SharedModels.SimpleExample2a(); Probability probabilityOfFinal0; Probability probabilityOfFinal0Lt; Probability probabilityOfFinal1; Probability probabilityOfFinal2; var final0Formula = new UnaryFormula(SharedModels.SimpleExample2a.StateIs0, UnaryOperator.Finally); var final0LtFormula = new UnaryFormula( new BinaryFormula(SharedModels.SimpleExample2a.StateIs0, BinaryOperator.And, SharedModels.SimpleExample2a.LocalVarIsTrue), UnaryOperator.Finally); var final1Formula = new UnaryFormula(SharedModels.SimpleExample2a.StateIs1, UnaryOperator.Finally); var final2Formula = new UnaryFormula(SharedModels.SimpleExample2a.StateIs2, UnaryOperator.Finally); var markovChainGenerator = new SimpleMarkovChainFromExecutableModelGenerator(m); markovChainGenerator.Configuration = configuration; markovChainGenerator.AddFormulaToCheck(final0Formula); markovChainGenerator.AddFormulaToCheck(final0LtFormula); markovChainGenerator.AddFormulaToCheck(final1Formula); markovChainGenerator.AddFormulaToCheck(final2Formula); var ltmc = markovChainGenerator.GenerateLabeledMarkovChain(); var modelChecker = new ConfigurationDependentLtmcModelChecker(configuration, ltmc, Output.TextWriterAdapter()); using (modelChecker) { probabilityOfFinal0 = modelChecker.CalculateProbability(final0Formula); probabilityOfFinal0Lt = modelChecker.CalculateProbability(final0LtFormula); probabilityOfFinal1 = modelChecker.CalculateProbability(final1Formula); probabilityOfFinal2 = modelChecker.CalculateProbability(final2Formula); } probabilityOfFinal0.Is(1.0, 0.000001).ShouldBe(true); probabilityOfFinal0Lt.Is(0.55 / 3.0 * 4.0, 0.000001).ShouldBe(true); probabilityOfFinal1.Is(0.5, 0.00001).ShouldBe(true); probabilityOfFinal2.Is(0.5, 0.00001).ShouldBe(true); }