public void Check()
        {
            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 nmdpGenerator = new SimpleNmdpFromExecutableModelGenerator(m);

            nmdpGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small;
            nmdpGenerator.AddFormulaToCheck(final100Formula);
            nmdpGenerator.AddFormulaToCheck(final200Formula);
            var nmdp = nmdpGenerator.GenerateMarkovDecisionProcess();

            nmdp.ExportToGv(Output.TextWriterAdapter());
            var typeOfModelChecker = typeof(BuiltinNmdpModelChecker);
            var modelChecker       = (BuiltinNmdpModelChecker)Activator.CreateInstance(typeOfModelChecker, nmdp, 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);
        }
Пример #2
0
        public void CheckWithFaultActivationInFormula()
        {
            var         m = new Model();
            Probability probabilityOfFinal1;

            var state1WithFault1 = new BinaryFormula(new SimpleStateInRangeFormula(1), BinaryOperator.And, new FaultFormula(m.F1));

            var finallyState1WithFault1 = new BoundedUnaryFormula(state1WithFault1, UnaryOperator.Finally, 1);

            var markovChainGenerator = new SimpleMarkovChainFromExecutableModelGenerator(m);

            markovChainGenerator.Configuration.ModelCapacity       = ModelCapacityByMemorySize.Small;
            markovChainGenerator.Configuration.WriteGraphvizModels = true;
            markovChainGenerator.Configuration.DefaultTraceOutput  = Output.TextWriterAdapter();
            markovChainGenerator.AddFormulaToCheck(finallyState1WithFault1);
            var dtmc = markovChainGenerator.GenerateMarkovChain();
            var typeOfModelChecker = typeof(BuiltinDtmcModelChecker);
            var modelChecker       = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter());

            using (modelChecker)
            {
                probabilityOfFinal1 = modelChecker.CalculateProbability(finallyState1WithFault1);
            }

            probabilityOfFinal1.Is(0.275, 0.000001).ShouldBe(true);
        }
Пример #3
0
        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}");
            }
        }
Пример #4
0
        private void Check(AnalysisConfiguration configuration)
        {
            var         m = new Model();
            Probability probabilityOfFinally2;
            Probability probabilityOfFinally2b;

            var finally2  = new UnaryFormula(new SimpleStateInRangeFormula(2), UnaryOperator.Finally);
            var finally2b = new BoundedUnaryFormula(new SimpleStateInRangeFormula(2), UnaryOperator.Finally, 2);

            var markovChainGenerator = new SimpleMarkovChainFromExecutableModelGenerator(m);

            markovChainGenerator.Configuration = configuration;
            markovChainGenerator.AddFormulaToCheck(finally2);
            markovChainGenerator.AddFormulaToCheck(finally2b);
            var ltmc         = markovChainGenerator.GenerateLabeledMarkovChain();
            var modelChecker = new ConfigurationDependentLtmcModelChecker(configuration, ltmc, Output.TextWriterAdapter());

            using (modelChecker)
            {
                probabilityOfFinally2  = modelChecker.CalculateProbability(finally2);
                probabilityOfFinally2b = modelChecker.CalculateProbability(finally2b);
            }

            probabilityOfFinally2.Between(0.33, 0.34).ShouldBe(true);
            probabilityOfFinally2b.Between(0.33, 0.34).ShouldBe(true);
        }
Пример #5
0
        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}");
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        public void CalculateHazardSingleCoreAllFaults()
        {
            var model = new Model();

            SetProbabilities(model);

            var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model);

            var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel)
            {
                Configuration = SafetySharpModelChecker.TraversalConfiguration
            };

            markovChainGenerator.Configuration.SuccessorCapacity *= 2;
            markovChainGenerator.Configuration.EnableStaticPruningOptimization = false;
            markovChainGenerator.Configuration.CpuCount = 1;
            var formulaToCheck = new BoundedUnaryFormula(model.PossibleCollision, 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.EnableEarlyTermination = false;
            var markovChain = markovChainGenerator.GenerateLabeledMarkovChain();


            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(formulaToCheck);
                Console.Write($"Probability of formulaToCheck: {result}");
            }
        }
Пример #8
0
        public void CalculateHazardSingleCoreAllFaultsWithOnce()
        {
            var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <LustreExecutableModel>(_createModel)
            {
                Configuration = LustreModelChecker.TraversalConfiguration
            };

            markovChainGenerator.Configuration.SuccessorCapacity *= 2;
            markovChainGenerator.Configuration.EnableStaticPruningOptimization = false;
            var onceFormula = new UnaryFormula(_hazard, UnaryOperator.Once);
            var onceFault1  = new UnaryFormula(new FaultFormula(_faults[1]), UnaryOperator.Once);

            markovChainGenerator.AddFormulaToCheck(onceFault1);
            foreach (var fault in _faults.Where(fault => fault != _faults[1]))
            {
                var faultFormula = new UnaryFormula(new FaultFormula(fault), UnaryOperator.Once);
                markovChainGenerator.AddFormulaToCheck(faultFormula);
            }
            var formulaToCheck = new BoundedUnaryFormula(new BinaryFormula(onceFault1, BinaryOperator.And, onceFormula), UnaryOperator.Finally, 25);

            markovChainGenerator.AddFormulaToCheck(formulaToCheck);
            markovChainGenerator.Configuration.UseCompactStateStorage = true;
            markovChainGenerator.Configuration.EnableEarlyTermination = false;
            var markovChain = markovChainGenerator.GenerateLabeledMarkovChain();

            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(formulaToCheck);
                Console.Write($"Probability of formulaToCheck: {result}");
            }
        }
        public void StepwiseProbablityOfLabel2ForExample4()
        {
            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 BoundedUnaryFormula(MarkovChainExample.Label2Formula, UnaryOperator.Finally, i);
                    var resultBoundedStepi = prismChecker.CalculateProbability(boundedStepi);
                    Output.Log($"Result {i}:\t{resultBoundedStepi}");
                    results.Add(resultBoundedStepi);
                }

                var boundedStep200       = new BoundedUnaryFormula(MarkovChainExample.Label2Formula, UnaryOperator.Finally, 200);
                var resultBoundedStep200 = prismChecker.CalculateProbability(boundedStep200);
                Output.Log($"Result {200}:\t{resultBoundedStep200}");

                var inf       = new UnaryFormula(MarkovChainExample.Label2Formula, UnaryOperator.Finally);
                var resultInf = prismChecker.CalculateProbability(inf);
                Output.Log($"Result inf:\t{resultInf}");
            }
        }
Пример #10
0
        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);
        }
        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);
            }
        }
Пример #12
0
        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 MaximalProbabilityToReachIn50Steps_Label1(NestedMarkovDecisionProcessExample example)
        {
            var nmdp  = example.Nmdp;
            var steps = 50;

            var finallyLabel1 = new BoundedUnaryFormula(NestedMarkovDecisionProcessExample.Label1Formula, UnaryOperator.Finally, steps);

            using (var checker = new BuiltinNmdpModelChecker(nmdp, Output.TextWriterAdapter()))
            {
                var result = checker.CalculateMaximalProbability(finallyLabel1);
                result.Is(example.MaximalProbabilityFinallyLabel1, 0.0001).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}");
        }
Пример #15
0
        public void CalculateHazardSingleCoreAllFaultsWithOnce()
        {
            var model = new Model();

            SetProbabilities(model);

            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;
            markovChainGenerator.Configuration.EnableEarlyTermination          = false;
            var onceUnsuccessful  = new UnaryFormula(model.BloodNotCleanedAndDialyzingFinished, UnaryOperator.Once);
            var onceContamination = new UnaryFormula(model.IncomingBloodWasNotOk, UnaryOperator.Once);
            var onceFault1        = new UnaryFormula(new FaultFormula(model.HdMachine.Dialyzer.DialyzerMembraneRupturesFault), UnaryOperator.Once);

            markovChainGenerator.AddFormulaToCheck(onceFault1);
            foreach (var fault in model.Faults.Where(fault => fault != model.HdMachine.Dialyzer.DialyzerMembraneRupturesFault))
            {
                var faultFormula = new UnaryFormula(new FaultFormula(fault), UnaryOperator.Once);
                markovChainGenerator.AddFormulaToCheck(faultFormula);
            }

            var finallyUnsuccessful  = new BoundedUnaryFormula(new BinaryFormula(onceFault1, BinaryOperator.And, onceUnsuccessful), UnaryOperator.Finally, 6);
            var finallyContamination = new BoundedUnaryFormula(new BinaryFormula(onceFault1, BinaryOperator.And, onceContamination), UnaryOperator.Finally, 6);

            markovChainGenerator.AddFormulaToCheck(finallyUnsuccessful);
            markovChainGenerator.AddFormulaToCheck(finallyContamination);
            markovChainGenerator.Configuration.UseCompactStateStorage = true;
            var markovChain = markovChainGenerator.GenerateLabeledMarkovChain();


            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(finallyUnsuccessful);
                Console.Write($"Probability of unsuccessful: {result}");
            }

            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(finallyContamination);
                Console.Write($"Probability of contamination: {result}");
            }
        }
Пример #16
0
        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}");
            }
        }
Пример #17
0
        public void CalculateHazardSingleCoreWithOncePositionDetectorMis()
        {
            var model = Model.CreateOriginal();

            SetProbabilities(model);

            var createModel = SafetySharpRuntimeModel.CreateExecutedModelFromFormulasCreator(model);

            var markovChainGenerator = new MarkovChainFromExecutableModelGenerator <SafetySharpRuntimeModel>(createModel)
            {
                Configuration = SafetySharpModelChecker.TraversalConfiguration
            };

            markovChainGenerator.Configuration.SuccessorCapacity *= 2;
            markovChainGenerator.Configuration.EnableStaticPruningOptimization = false;
            markovChainGenerator.Configuration.CpuCount      = 1;
            markovChainGenerator.Configuration.ModelCapacity = new ModelCapacityByModelSize(3300000L, 1000000000L);
            var onceFault1 = new UnaryFormula(new FaultFormula(model.HeightControl.PreControl.PositionDetector.Misdetection), UnaryOperator.Once);

            markovChainGenerator.AddFormulaToCheck(onceFault1);
            var onceCollision     = new UnaryFormula(model.Collision, UnaryOperator.Once);
            var onceFalseAlarm    = new UnaryFormula(model.FalseAlarm, UnaryOperator.Once);
            var finallyCollision  = new BoundedUnaryFormula(new BinaryFormula(onceFault1, BinaryOperator.And, onceCollision), UnaryOperator.Finally, 50);
            var finallyFalseAlarm = new BoundedUnaryFormula(new BinaryFormula(onceFault1, BinaryOperator.And, onceFalseAlarm), UnaryOperator.Finally, 50);

            markovChainGenerator.AddFormulaToCheck(finallyCollision);
            markovChainGenerator.AddFormulaToCheck(finallyFalseAlarm);
            markovChainGenerator.Configuration.UseCompactStateStorage = true;
            markovChainGenerator.Configuration.EnableEarlyTermination = false;
            var ltmc        = markovChainGenerator.GenerateLabeledMarkovChain();
            var markovChain = markovChainGenerator.GenerateMarkovChain();

            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, ltmc, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(finallyCollision);
                Console.Write($"Probability of collision: {result}");
            }

            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, ltmc, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(finallyFalseAlarm);
                Console.Write($"Probability of falseAlarm: {result}");
            }
        }
Пример #18
0
        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 = new Probability(3.0E-6)
                },
                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 modelChecker = new LustreMarkovChainFromExecutableModelGenerator(Path.Combine(AssemblyDirectory, "pressureTank.lus"), "TANK", faults);

            modelChecker.AddFormulaToCheck(hazard);
            modelChecker.Configuration.UseCompactStateStorage = true;
            var lmc = modelChecker.GenerateLabeledMarkovChain();

            var ltmcModelChecker = new BuiltinLtmcModelChecker(lmc, Console.Out);
            var finallyHazard    = new BoundedUnaryFormula(hazard, UnaryOperator.Finally, 200);
            var result           = ltmcModelChecker.CalculateProbability(finallyHazard);

            Console.Write($"Probability of hazard: {result}");
        }
Пример #19
0
        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);
            }
        }
Пример #20
0
        public void CalculateHazardSingleCore()
        {
            var model = new Model();

            SetProbabilities(model);

            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;
            markovChainGenerator.Configuration.EnableEarlyTermination          = false;
            var unsuccessful  = new BoundedUnaryFormula(model.BloodNotCleanedAndDialyzingFinished, UnaryOperator.Finally, 6);
            var contamination = new BoundedUnaryFormula(model.IncomingBloodWasNotOk, UnaryOperator.Finally, 6);

            markovChainGenerator.AddFormulaToCheck(unsuccessful);
            markovChainGenerator.AddFormulaToCheck(contamination);
            markovChainGenerator.Configuration.UseCompactStateStorage = true;
            var markovChain = markovChainGenerator.GenerateLabeledMarkovChain();


            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(unsuccessful);
                Console.Write($"Probability of collision: {result}");
            }

            using (var modelChecker = new ConfigurationDependentLtmcModelChecker(markovChainGenerator.Configuration, markovChain, markovChainGenerator.Configuration.DefaultTraceOutput))
            {
                var result = modelChecker.CalculateProbability(contamination);
                Console.Write($"Probability of collision: {result}");
            }
        }
Пример #21
0
        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}");
            }
        }
Пример #22
0
 /// <summary>
 ///   Visits the <paramref name="formula." />
 /// </summary>
 public abstract void VisitBoundedUnaryFormula(BoundedUnaryFormula formula);
 /// <summary>
 ///   Visits the <paramref name="formula." />
 /// </summary>
 public override void VisitBoundedUnaryFormula(BoundedUnaryFormula formula)
 {
     throw new NotImplementedException();
 }
Пример #24
0
        /// <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>
        /// <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 CalculateProbabilityToReachStateBounded(string ocFileName, string mainNode, IEnumerable <Fault> faults, Formula stateFormula, int bound)
        {
            var formula = new BoundedUnaryFormula(stateFormula, UnaryOperator.Finally, bound);

            return(CalculateProbabilityOfFormula(ocFileName, mainNode, faults, formula));
        }
Пример #25
0
 /// <summary>
 ///   Visits the <paramref name="formula." />
 /// </summary>
 public override void VisitBoundedUnaryFormula(BoundedUnaryFormula formula)
 {
     _containsInvalidOperators = true;
 }
        /// <summary>
        ///   Calculates the probability to reach a state whether <paramref name="stateFormula" /> holds.
        /// </summary>
        /// <param name="model">The model that should be checked.</param>
        /// <param name="stateFormula">The state formula which _must_ finally be true.</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 ProbabilityRange CalculateProbabilityRangeToReachStateBounded(ModelBase model, Formula stateFormula, int bound)
        {
            var formula = new BoundedUnaryFormula(stateFormula, UnaryOperator.Finally, bound);

            return(CalculateProbabilityRangeOfFormulaBounded(model, formula, stateFormula, bound));
        }