private void Check(AnalysisConfiguration configuration) { var m = new Model(); Probability probabilityOfFinal100; Probability probabilityOfFinal200; var final100Formula = new BoundedUnaryFormula(Model.StateIs100, UnaryOperator.Finally, 5); var final200Formula = new BoundedUnaryFormula(Model.StateIs200, UnaryOperator.Finally, 5); var mdpGenerator = new SimpleMarkovDecisionProcessFromExecutableModelGenerator(m); mdpGenerator.Configuration = configuration; mdpGenerator.AddFormulaToCheck(final100Formula); mdpGenerator.AddFormulaToCheck(final200Formula); var mdp = mdpGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); var modelChecker = new ConfigurationDependentLtmdpModelChecker(configuration, mdp, Output.TextWriterAdapter()); using (modelChecker) { probabilityOfFinal100 = modelChecker.CalculateMinimalProbability(final100Formula); probabilityOfFinal200 = modelChecker.CalculateMinimalProbability(final200Formula); } probabilityOfFinal100.Is(0.6 * 0.8, 0.000001).ShouldBe(true); probabilityOfFinal200.Is(0.4 + 0.6 * 0.2, 0.000001).ShouldBe(true); }
private void Check(AnalysisConfiguration configuration) { var m = new Model(); Probability minProbabilityOfFinal2; Probability minProbabilityOfFinal3; Probability maxProbabilityOfFinal2; Probability maxProbabilityOfFinal3; var final2 = new UnaryFormula(new SimpleStateInRangeFormula(2), UnaryOperator.Finally); var final3 = new UnaryFormula(new SimpleStateInRangeFormula(3), UnaryOperator.Finally); var mdpGenerator = new SimpleMarkovDecisionProcessFromExecutableModelGenerator(m); mdpGenerator.Configuration = configuration; mdpGenerator.AddFormulaToCheck(final2); mdpGenerator.AddFormulaToCheck(final3); var mdp = mdpGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); var modelChecker = new ConfigurationDependentLtmdpModelChecker(configuration, mdp, Output.TextWriterAdapter()); using (modelChecker) { minProbabilityOfFinal2 = modelChecker.CalculateMinimalProbability(final2); minProbabilityOfFinal3 = modelChecker.CalculateMinimalProbability(final3); maxProbabilityOfFinal2 = modelChecker.CalculateMaximalProbability(final2); maxProbabilityOfFinal3 = modelChecker.CalculateMaximalProbability(final3); } minProbabilityOfFinal2.Is(0.3, tolerance: 0.0001).ShouldBe(true); minProbabilityOfFinal3.Is(0.6, tolerance: 0.0001).ShouldBe(true); maxProbabilityOfFinal2.Is(0.3, tolerance: 0.0001).ShouldBe(true); maxProbabilityOfFinal3.Is(0.6, tolerance: 0.0001).ShouldBe(true); }
public void CalculateLtmdpWithoutStaticPruningSingleCore() { var oldProbability = _faults[1].ProbabilityOfOccurrence; _faults[1].ProbabilityOfOccurrence = null; var markovChainGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <LustreExecutableModel>(_createModel); markovChainGenerator.Configuration.ModelCapacity = new ModelCapacityByModelSize(10000, 1000000); markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.EnableStaticPruningOptimization = false; markovChainGenerator.Configuration.LtmdpModelChecker = LtmdpModelChecker.BuiltInLtmdp; markovChainGenerator.AddFormulaToCheck(_hazard); var formulaToCheck = new BoundedUnaryFormula(_hazard, UnaryOperator.Finally, 25); foreach (var fault in _faults) { var faultFormula = new FaultFormula(fault); markovChainGenerator.AddFormulaToCheck(faultFormula); } markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; markovChainGenerator.Configuration.CpuCount = 1; var markovChain = markovChainGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); _faults[1].ProbabilityOfOccurrence = oldProbability; using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbabilityRange(formulaToCheck); Console.Write($"Probability of formulaToCheck: {result}"); } }
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 TankRupture() { Formula invariant = new LustrePressureBelowThreshold(); Formula hazard = new UnaryFormula(invariant, UnaryOperator.Not); LustrePressureBelowThreshold.threshold = 60; var faults = new List <Fault> { new TransientFault() { Name = "fault_switch", Identifier = 0, ProbabilityOfOccurrence = new Probability(3.0E-6) }, new PermanentFault() { Name = "fault_k1", Identifier = 1, ProbabilityOfOccurrence = new Probability(3.0E-6) }, new PermanentFault() { Name = "fault_k2", Identifier = 2, ProbabilityOfOccurrence = null }, new PermanentFault() { Name = "fault_timer", Identifier = 3, ProbabilityOfOccurrence = new Probability(1.0E-5) }, new PermanentFault() { Name = "fault_sensor", Identifier = 4, ProbabilityOfOccurrence = new Probability(1.0E-5) } }; var createModel = LustreExecutableModel.CreateExecutedModelFromFormulasCreator(Path.Combine(AssemblyDirectory, "pressureTank.lus"), "TANK", faults.ToArray()); var markovChainGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <LustreExecutableModel>(createModel); markovChainGenerator.Configuration.ModelCapacity = new ModelCapacityByModelSize(10000, 1000000); markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.EnableStaticPruningOptimization = true; markovChainGenerator.Configuration.LtmdpModelChecker = LtmdpModelChecker.BuiltInLtmdp; markovChainGenerator.AddFormulaToCheck(hazard); markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; var markovChain = markovChainGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); var ltmcModelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, Console.Out); var finallyHazard = new BoundedUnaryFormula(hazard, UnaryOperator.Finally, 200); var result = ltmcModelChecker.CalculateProbabilityRange(finallyHazard); Console.Write($"Probability of hazard: {result}"); }
public void CalculateLtmdpWithoutStaticPruningSingleCore() { var model = Model.CreateOriginal(); model.VehicleSet.LeftHV.ProbabilityOfOccurrence = null; var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.ModelCapacity = new ModelCapacityByModelSize(3300000L, 1000000000L); markovChainGenerator.Configuration.EnableStaticPruningOptimization = false; markovChainGenerator.Configuration.LtmdpModelChecker = LtmdpModelChecker.BuiltInLtmdp; var collision = new BoundedUnaryFormula(model.Collision, UnaryOperator.Finally, 50); var falseAlarm = new BoundedUnaryFormula(model.FalseAlarm, UnaryOperator.Finally, 50); markovChainGenerator.AddFormulaToCheck(collision); markovChainGenerator.AddFormulaToCheck(falseAlarm); /* * foreach (var fault in model.Faults) * { * var faultFormula = new FaultFormula(fault); * markovChainGenerator.AddFormulaToCheck(faultFormula); * } */ markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.CpuCount = 1; markovChainGenerator.Configuration.EnableEarlyTermination = false; var markovChain = markovChainGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbabilityRange(collision); Console.Write($"Probability of collision: {result}"); } using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbabilityRange(falseAlarm); Console.Write($"Probability of falseAlarm: {result}"); } }
public void CalculateLtmdpWithoutStaticPruningSingleCore() { var model = new Model(); SetProbabilities(model); model.HdMachine.Dialyzer.DialyzerMembraneRupturesFault.ProbabilityOfOccurrence = null; var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.EnableStaticPruningOptimization = false; markovChainGenerator.Configuration.LtmdpModelChecker = LtmdpModelChecker.BuiltInLtmdp; markovChainGenerator.Configuration.EnableEarlyTermination = false; var unsuccessful = new UnaryFormula(model.BloodNotCleanedAndDialyzingFinished, UnaryOperator.Finally); var contamination = new UnaryFormula(model.IncomingBloodWasNotOk, UnaryOperator.Finally); markovChainGenerator.AddFormulaToCheck(unsuccessful); markovChainGenerator.AddFormulaToCheck(contamination); foreach (var fault in model.Faults) { var faultFormula = new FaultFormula(fault); markovChainGenerator.AddFormulaToCheck(faultFormula); } markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.CpuCount = 1; var markovChain = markovChainGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbabilityRange(unsuccessful); Console.Write($"Probability of unsuccessful: {result}"); } using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbabilityRange(contamination); Console.Write($"Probability of contamination: {result}"); } }
private void CheckSmallerEqualTwo(AnalysisConfiguration configuration) { var m = new Model(); Probability minProbabilityOfFinalSmallerEqual2; Probability maxProbabilityOfFinalSmallerEqual2; var finalSmallerEqual2Formula = new BoundedUnaryFormula(new SimpleStateInRangeFormula(0, 2), UnaryOperator.Finally, 5); var mdpGenerator = new SimpleMarkovDecisionProcessFromExecutableModelGenerator(m); mdpGenerator.Configuration = configuration; mdpGenerator.AddFormulaToCheck(finalSmallerEqual2Formula); var mdp = mdpGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); var modelChecker = new ConfigurationDependentLtmdpModelChecker(configuration, mdp, Output.TextWriterAdapter()); using (modelChecker) { minProbabilityOfFinalSmallerEqual2 = modelChecker.CalculateMinimalProbability(finalSmallerEqual2Formula); maxProbabilityOfFinalSmallerEqual2 = modelChecker.CalculateMaximalProbability(finalSmallerEqual2Formula); } }
public void CalculateLtmdpWithoutStaticPruningSingleCore() { var model = new DegradedModeModel(); model.System.SignalDetector1.F1.ProbabilityOfOccurrence = null; var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.EnableStaticPruningOptimization = false; markovChainGenerator.Configuration.LtmdpModelChecker = LtmdpModelChecker.BuiltInLtmdp; var formula = new ExecutableStateFormula(() => model.System.HazardActive); var formulaToCheck = new BoundedUnaryFormula(formula, UnaryOperator.Finally, 50); markovChainGenerator.AddFormulaToCheck(formulaToCheck); foreach (var fault in model.Faults) { var faultFormula = new FaultFormula(fault); markovChainGenerator.AddFormulaToCheck(faultFormula); } markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.CpuCount = 1; markovChainGenerator.Configuration.EnableEarlyTermination = false; var markovChain = markovChainGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbabilityRange(formulaToCheck); Console.Write($"Probability of hazard: {result}"); } }
/// <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> public static ProbabilityRange CalculateProbabilityRangeOfFormula(string ocFileName, string mainNode, IEnumerable <Fault> faults, Formula formula) { ProbabilityRange probabilityRangeToReachState; var createModel = LustreExecutableModel.CreateExecutedModelFromFormulasCreator(ocFileName, mainNode, faults.ToArray()); var ltmdpGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <LustreExecutableModel>(createModel) { Configuration = TraversalConfiguration }; ltmdpGenerator.AddFormulaToCheck(formula); ltmdpGenerator.Configuration.SuccessorCapacity *= 8; ltmdpGenerator.Configuration.UseCompactStateStorage = true; var ltmdp = ltmdpGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(ltmdpGenerator.Configuration, ltmdp, TraversalConfiguration.DefaultTraceOutput)) { probabilityRangeToReachState = modelChecker.CalculateProbabilityRange(formula); } GC.Collect(); return(probabilityRangeToReachState); }
/// <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> public static ProbabilityRange CalculateProbabilityRangeOfFormula(ModelBase model, Formula formula) { ProbabilityRange probabilityRangeToReachState; var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var ltmdpGenerator = new MarkovDecisionProcessFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = TraversalConfiguration }; ltmdpGenerator.AddFormulaToCheck(formula); ltmdpGenerator.Configuration.SuccessorCapacity *= 8; ltmdpGenerator.Configuration.UseCompactStateStorage = true; var ltmdp = ltmdpGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); using (var modelChecker = new ConfigurationDependentLtmdpModelChecker(ltmdpGenerator.Configuration, ltmdp, TraversalConfiguration.DefaultTraceOutput)) { probabilityRangeToReachState = modelChecker.CalculateProbabilityRange(formula); } System.GC.Collect(); return(probabilityRangeToReachState); }