|
@ -1,7 +1,5 @@ |
|
|
#include "storm/modelchecker/prctl/SparseMdpPrctlModelChecker.h"
|
|
|
#include "storm/modelchecker/prctl/SparseMdpPrctlModelChecker.h"
|
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
|
|
|
|
#include "storm/utility/constants.h"
|
|
|
#include "storm/utility/constants.h"
|
|
|
#include "storm/utility/macros.h"
|
|
|
#include "storm/utility/macros.h"
|
|
|
#include "storm/utility/vector.h"
|
|
|
#include "storm/utility/vector.h"
|
|
@ -30,17 +28,10 @@ |
|
|
|
|
|
|
|
|
#include "storm/shields/ShieldHandling.h"
|
|
|
#include "storm/shields/ShieldHandling.h"
|
|
|
|
|
|
|
|
|
#include "storm/settings/SettingsManager.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "storm/settings/modules/GeneralSettings.h"
|
|
|
|
|
|
#include "storm/settings/modules/DebugSettings.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "storm/exceptions/InvalidStateException.h"
|
|
|
#include "storm/exceptions/InvalidStateException.h"
|
|
|
#include "storm/exceptions/InvalidPropertyException.h"
|
|
|
#include "storm/exceptions/InvalidPropertyException.h"
|
|
|
#include "storm/storage/expressions/Expressions.h"
|
|
|
#include "storm/storage/expressions/Expressions.h"
|
|
|
|
|
|
|
|
|
#include "storm/storage/MaximalEndComponentDecomposition.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "storm/exceptions/InvalidPropertyException.h"
|
|
|
#include "storm/exceptions/InvalidPropertyException.h"
|
|
|
|
|
|
|
|
|
namespace storm { |
|
|
namespace storm { |
|
@ -168,14 +159,14 @@ namespace storm { |
|
|
template<typename SparseMdpModelType> |
|
|
template<typename SparseMdpModelType> |
|
|
std::unique_ptr<CheckResult> SparseMdpPrctlModelChecker<SparseMdpModelType>::computeHOAPathProbabilities(Environment const& env, CheckTask<storm::logic::HOAPathFormula, ValueType> const& checkTask) { |
|
|
std::unique_ptr<CheckResult> SparseMdpPrctlModelChecker<SparseMdpModelType>::computeHOAPathProbabilities(Environment const& env, CheckTask<storm::logic::HOAPathFormula, ValueType> const& checkTask) { |
|
|
storm::logic::HOAPathFormula const& pathFormula = checkTask.getFormula(); |
|
|
storm::logic::HOAPathFormula const& pathFormula = checkTask.getFormula(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
storm::modelchecker::helper::SparseLTLHelper<ValueType, false> helper(this->getModel().getTransitionMatrix()); |
|
|
storm::modelchecker::helper::SparseLTLHelper<ValueType, false> helper(this->getModel().getTransitionMatrix()); |
|
|
storm::modelchecker::helper::setInformationFromCheckTaskDeterministic(helper, checkTask, this->getModel()); |
|
|
storm::modelchecker::helper::setInformationFromCheckTaskDeterministic(helper, checkTask, this->getModel()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto formulaChecker = [&] (storm::logic::Formula const& formula) { return this->check(env, formula)->asExplicitQualitativeCheckResult().getTruthValuesVector(); }; |
|
|
auto formulaChecker = [&] (storm::logic::Formula const& formula) { return this->check(env, formula)->asExplicitQualitativeCheckResult().getTruthValuesVector(); }; |
|
|
auto apSets = helper.computeApSets(pathFormula.getAPMapping(), formulaChecker); |
|
|
auto apSets = helper.computeApSets(pathFormula.getAPMapping(), formulaChecker); |
|
|
std::vector<ValueType> numericResult = helper.computeDAProductProbabilities(env, *pathFormula.readAutomaton(), apSets); |
|
|
std::vector<ValueType> numericResult = helper.computeDAProductProbabilities(env, *pathFormula.readAutomaton(), apSets); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(numericResult))); |
|
|
std::unique_ptr<CheckResult> result(new ExplicitQuantitativeCheckResult<ValueType>(std::move(numericResult))); |
|
|
if (checkTask.isProduceSchedulersSet()) { |
|
|
if (checkTask.isProduceSchedulersSet()) { |
|
|
result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::make_unique<storm::storage::Scheduler<ValueType>>(helper.extractScheduler(this->getModel()))); |
|
|
result->asExplicitQuantitativeCheckResult<ValueType>().setScheduler(std::make_unique<storm::storage::Scheduler<ValueType>>(helper.extractScheduler(this->getModel()))); |
|
@ -183,7 +174,7 @@ namespace storm { |
|
|
|
|
|
|
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<typename SparseMdpModelType> |
|
|
template<typename SparseMdpModelType> |
|
|
std::unique_ptr<CheckResult> SparseMdpPrctlModelChecker<SparseMdpModelType>::computeLTLProbabilities(Environment const& env, CheckTask<storm::logic::PathFormula, ValueType> const& checkTask) { |
|
|
std::unique_ptr<CheckResult> SparseMdpPrctlModelChecker<SparseMdpModelType>::computeLTLProbabilities(Environment const& env, CheckTask<storm::logic::PathFormula, ValueType> const& checkTask) { |
|
|
storm::logic::PathFormula const& pathFormula = checkTask.getFormula(); |
|
|
storm::logic::PathFormula const& pathFormula = checkTask.getFormula(); |
|
@ -192,7 +183,7 @@ namespace storm { |
|
|
|
|
|
|
|
|
storm::modelchecker::helper::SparseLTLHelper<ValueType, true> helper(this->getModel().getTransitionMatrix()); |
|
|
storm::modelchecker::helper::SparseLTLHelper<ValueType, true> helper(this->getModel().getTransitionMatrix()); |
|
|
storm::modelchecker::helper::setInformationFromCheckTaskNondeterministic(helper, checkTask, this->getModel()); |
|
|
storm::modelchecker::helper::setInformationFromCheckTaskNondeterministic(helper, checkTask, this->getModel()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto formulaChecker = [&] (storm::logic::Formula const& formula) { return this->check(env, formula)->asExplicitQualitativeCheckResult().getTruthValuesVector(); }; |
|
|
auto formulaChecker = [&] (storm::logic::Formula const& formula) { return this->check(env, formula)->asExplicitQualitativeCheckResult().getTruthValuesVector(); }; |
|
|
std::vector<ValueType> numericResult = helper.computeLTLProbabilities(env, pathFormula, formulaChecker); |
|
|
std::vector<ValueType> numericResult = helper.computeLTLProbabilities(env, pathFormula, formulaChecker); |
|
|
|
|
|
|
|
@ -203,7 +194,7 @@ namespace storm { |
|
|
|
|
|
|
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<typename SparseMdpModelType> |
|
|
template<typename SparseMdpModelType> |
|
|
std::unique_ptr<CheckResult> SparseMdpPrctlModelChecker<SparseMdpModelType>::computeConditionalProbabilities(Environment const& env, CheckTask<storm::logic::ConditionalFormula, ValueType> const& checkTask) { |
|
|
std::unique_ptr<CheckResult> SparseMdpPrctlModelChecker<SparseMdpModelType>::computeConditionalProbabilities(Environment const& env, CheckTask<storm::logic::ConditionalFormula, ValueType> const& checkTask) { |
|
|
storm::logic::ConditionalFormula const& conditionalFormula = checkTask.getFormula(); |
|
|
storm::logic::ConditionalFormula const& conditionalFormula = checkTask.getFormula(); |
|
|