예제 #1
0
        /************************************************/
        /*         PRISM EXECUTION                      */
        /************************************************/


        internal override Probability CalculateProbability(Formula formulaToCheck)
        {
            ProbabilityChecker.AssertProbabilityMatrixWasCreated();
            WriteMarkovChainToDisk();

            var isFormulaReturningProbabilityVisitor = new IsFormulaReturningProbabilityVisitor();

            isFormulaReturningProbabilityVisitor.Visit(formulaToCheck);
            if (!isFormulaReturningProbabilityVisitor.IsReturningProbability)
            {
                throw new Exception("expected formula which returns a probability");
            }

            var transformationVisitor = new PrismTransformer();

            transformationVisitor.Visit(formulaToCheck);
            var formulaToCheckString = transformationVisitor.TransformedFormula;

            using (var fileProperties = new TemporaryFile("props"))
            {
                File.WriteAllText(fileProperties.FilePath, formulaToCheckString);

                var prismArguments = _filePrism.FilePath + " " + fileProperties.FilePath;

                var prism = ExecutePrism(prismArguments);
                _prismProcessOutput.Clear();
                prism.Run();

                var result             = ParseOutput(_prismProcessOutput);
                var quantitativeResult = (PrismResultQuantitative)result.Result;

                return(new Probability(quantitativeResult.Result));
            }
        }
예제 #2
0
 public Prism(ProbabilityChecker probabilityChecker) : base(probabilityChecker)
 {
 }