public void CalculateMdpFlattened() { 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.BuildInMdpWithNewStates; markovChainGenerator.AddFormulaToCheck(model.System.HazardActive); foreach (var fault in model.Faults) { var faultFormula = new FaultFormula(fault); markovChainGenerator.AddFormulaToCheck(faultFormula); } markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; var nmdp = markovChainGenerator.GenerateNestedMarkovDecisionProcess(); var nmdpToMpd = new NmdpToMdpByFlattening(nmdp); }
public void CreateMarkovChainWithHazardsRetraversal2() { var model = new DegradedModeModel(); var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.AddFormulaToCheck(model.System.HazardActive); markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.UseAtomarPropositionsAsStateLabels = false; var markovChain = markovChainGenerator.GenerateLabeledMarkovChain(); var retraversalMarkovChainGenerator = new MarkovChainFromMarkovChainGenerator(markovChain); retraversalMarkovChainGenerator.Configuration.SuccessorCapacity *= 2; retraversalMarkovChainGenerator.AddFormulaToCheck(model.System.HazardActive); retraversalMarkovChainGenerator.Configuration.UseCompactStateStorage = true; retraversalMarkovChainGenerator.Configuration.UseAtomarPropositionsAsStateLabels = false; retraversalMarkovChainGenerator.GenerateLabeledMarkovChain(); }
public void CalculateHazardSingleCoreAllFaultsWithOnce() { var model = new DegradedModeModel(); var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.CpuCount = 1; markovChainGenerator.Configuration.EnableStaticPruningOptimization = false; var formula = new ExecutableStateFormula(() => model.System.HazardActive); var onceFormula = new UnaryFormula(formula, UnaryOperator.Once); var onceFault1 = new UnaryFormula(new FaultFormula(model.System.SignalDetector1.F1), UnaryOperator.Once); markovChainGenerator.AddFormulaToCheck(onceFault1); var formulaToCheck = new BoundedUnaryFormula(new BinaryFormula(onceFault1, BinaryOperator.And, onceFormula), UnaryOperator.Finally, 50); markovChainGenerator.AddFormulaToCheck(formulaToCheck); markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; markovChainGenerator.Configuration.CpuCount = Int32.MaxValue; var markovChain = markovChainGenerator.GenerateLabeledMarkovChain(); using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput)) { var result = modelChecker.CalculateProbability(formulaToCheck); Console.Write($"Probability of hazard: {result}"); } }
public void CalculateHazardProbability() { var model = new DegradedModeModel(); var result = SafetySharpModelChecker.CalculateProbabilityToReachStateBounded(model, model.System.HazardActive, 50); Console.Write($"Probability of hazard: {result}"); }
public void CalculateHazardProbabilityWhenF1NeverOccurs() { var model = new DegradedModeModel(); model.System.SignalDetector1.F1.ProbabilityOfOccurrence = new Probability(0.0); var result = SafetySharpModelChecker.CalculateProbabilityToReachStateBounded(model, model.System.HazardActive, 50); Console.Write($"Probability of hazard: {result}"); }
public void CalculateHazardWithoutEarlyTermination() { var model = new DegradedModeModel(); SafetySharpModelChecker.TraversalConfiguration.EnableEarlyTermination = false; var result = SafetySharpModelChecker.CalculateProbabilityToReachStateBounded(model, model.System.HazardActive, 50); SafetySharpModelChecker.TraversalConfiguration.EnableEarlyTermination = true; Console.Write($"Probability of hazard: {result}"); }
public void CalculateRangeHazardLtmdp() { var model = new DegradedModeModel(); model.System.SignalDetector1.F1.ProbabilityOfOccurrence = null; SafetySharpModelChecker.TraversalConfiguration.EnableStaticPruningOptimization = true; var result = SafetySharpModelChecker.CalculateProbabilityRangeToReachStateBounded(model, model.System.HazardActive, 50); Console.Write($"Probability of hazard: {result}"); }
public void CalculateHazardProbability() { var tc = SafetySharpModelChecker.TraversalConfiguration; tc.WriteGraphvizModels = true; tc.EnableStaticPruningOptimization = false; SafetySharpModelChecker.TraversalConfiguration = tc; var model = new DegradedModeModel(); var result = SafetySharpModelChecker.CalculateProbabilityToReachStateBounded(model, model.System.HazardActive, 50); Console.WriteLine($"Probability of hazard in model: {result}"); }
public void CalculateHazardSingleCore() { var model = new DegradedModeModel(); SafetySharpModelChecker.TraversalConfiguration.CpuCount = 1; SafetySharpModelChecker.TraversalConfiguration.EnableEarlyTermination = false; SafetySharpModelChecker.TraversalConfiguration.EnableStaticPruningOptimization = false; var result = SafetySharpModelChecker.CalculateProbabilityToReachStateBounded(model, model.System.HazardActive, 50); SafetySharpModelChecker.TraversalConfiguration.CpuCount = Int32.MaxValue; SafetySharpModelChecker.TraversalConfiguration.EnableEarlyTermination = true; SafetySharpModelChecker.TraversalConfiguration.EnableStaticPruningOptimization = true; Console.Write($"Probability of hazard: {result}"); }
public void CalculateDcca() { var model = new DegradedModeModel(); var analysis = new SafetySharpSafetyAnalysis { Backend = SafetyAnalysisBackend.FaultOptimizedOnTheFly, Heuristics = { new MaximalSafeSetHeuristic(model.Faults) } }; var result = analysis.ComputeMinimalCriticalSets(model, model.System.HazardActive); //result.SaveCounterExamples("counter examples/height control/dcca/collision/original"); var orderResult = SafetySharpOrderAnalysis.ComputeOrderRelationships(result); Console.WriteLine(orderResult); }
public void CalculateHazardProbabilityGraph() { var model = new DegradedModeModel(); var minValue = 0.0; var maxValue = 1.0; var steps = 250; var stepSize = (maxValue - minValue) / (steps - 1); var sourceValues = new double[steps]; var resultValues = new double[steps]; for (var i = 0; i < steps; i++) { var currentValue = i * stepSize; sourceValues[i] = currentValue; model.System.SignalDetector1.F1.ProbabilityOfOccurrence = new Probability(currentValue); var currentResult = SafetySharpModelChecker.CalculateProbabilityToReachStateBounded(model, model.System.HazardActive, 50); GC.Collect(); resultValues[i] = currentResult.Value; } var fileWriter = new StreamWriter("PrecisenessTradeoff/graph.csv", append: false); var csvWriter = new CsvWriter(fileWriter); csvWriter.AddEntry("Step"); for (var i = 0; i < steps; i++) { csvWriter.AddEntry(i); } csvWriter.NewLine(); csvWriter.AddEntry("Pr(F1)"); for (var i = 0; i < steps; i++) { csvWriter.AddEntry(sourceValues[i]); } csvWriter.NewLine(); csvWriter.AddEntry("Pr(Hazard)"); for (var i = 0; i < steps; i++) { csvWriter.AddEntry(resultValues[i]); } csvWriter.NewLine(); fileWriter.Close(); }
public void CreateMarkovChainWithHazards() { var model = new DegradedModeModel(); var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.AddFormulaToCheck(model.System.HazardActive); markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; var markovChain = markovChainGenerator.GenerateMarkovChain(); }
public void CalculateLtmdpWithoutFaultsWithPruning() { 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 = true; markovChainGenerator.Configuration.LtmdpModelChecker = LtmdpModelChecker.BuiltInLtmdp; markovChainGenerator.AddFormulaToCheck(model.System.HazardActive); markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; var markovChain = markovChainGenerator.GenerateLabeledTransitionMarkovDecisionProcess(); }
public void CreateFaultAwareMarkovChainAllFaults() { var model = new DegradedModeModel(); var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model); var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel) { Configuration = SafetySharpModelChecker.TraversalConfiguration }; markovChainGenerator.Configuration.SuccessorCapacity *= 2; markovChainGenerator.Configuration.EnableStaticPruningOptimization = false; markovChainGenerator.AddFormulaToCheck(model.System.HazardActive); foreach (var fault in model.Faults) { var faultFormula = new FaultFormula(fault); markovChainGenerator.AddFormulaToCheck(faultFormula); } markovChainGenerator.Configuration.UseCompactStateStorage = true; markovChainGenerator.Configuration.EnableEarlyTermination = false; var markovChain = markovChainGenerator.GenerateMarkovChain(); }
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}"); } }