1#include "storm-config.h"
17class IsGraphPreserving {
19 typedef double ValueType;
20 static storm::Environment createEnvironment() {
21 storm::Environment env;
26 static bool graphPreserving() {
31class AssumeGraphPreserving {
33 typedef double ValueType;
34 static storm::Environment createEnvironment() {
35 storm::Environment env;
40 static bool graphPreserving() {
45template<
typename TestType>
46class SparseRobustDtmcParameterLiftingTest :
public ::testing::Test {
48 typedef typename TestType::ValueType ValueType;
49 SparseRobustDtmcParameterLiftingTest() : _environment(TestType::createEnvironment()), _graphPreserving(TestType::graphPreserving()) {}
50 storm::Environment
const& env()
const {
53 bool const& graphPreserving()
const {
54 return _graphPreserving;
56 virtual void SetUp() {
57 carl::VariablePool::getInstance().clear();
59 GTEST_SKIP() <<
"Z3 not available.";
62 virtual void TearDown() {
63 carl::VariablePool::getInstance().clear();
67 storm::Environment _environment;
68 bool _graphPreserving;
72 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
73 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
74 std::string constantsAsString =
"";
78 program = program.
preprocess(constantsAsString);
79 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
81 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
86 modelParameters.insert(rewParameters.begin(), rewParameters.end());
106 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
107 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
108 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
111 program = program.
preprocess(constantsAsString);
112 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
114 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
119 modelParameters.insert(rewParameters.begin(), rewParameters.end());
139 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
140 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
141 std::string constantsAsString =
"";
143 program = program.
preprocess(constantsAsString);
144 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
146 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
151 modelParameters.insert(rewParameters.begin(), rewParameters.end());
171 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
172 std::string formulaAsString =
"P<0.5 [F \"observe0Greater1\" ]";
173 std::string constantsAsString =
"";
176 program = program.
preprocess(constantsAsString);
177 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
179 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
184 modelParameters.insert(rewParameters.begin(), rewParameters.end());
207 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
208 std::string formulaAsString =
"P>0.75 [F \"observe0Greater1\" ]";
209 std::string constantsAsString =
"badC=0.3";
212 program = program.
preprocess(constantsAsString);
213 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
215 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
220 modelParameters.insert(rewParameters.begin(), rewParameters.end());
240 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
241 std::string formulaAsString =
"P>0.6 [F \"observe0Greater1\" ]";
242 std::string constantsAsString =
"PF=0.9,badC=0.2";
245 program = program.
preprocess(constantsAsString);
246 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
248 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
253 modelParameters.insert(rewParameters.begin(), rewParameters.end());
267 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/zeroconf4.pm";
268 std::string formulaAsString =
"P>0.5 [F s=5 ]";
269 std::string constantsAsString =
" n = 4";
273 program = program.
preprocess(constantsAsString);
274 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
276 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
281 modelParameters.insert(rewParameters.begin(), rewParameters.end());
300typedef ::testing::Types<IsGraphPreserving, AssumeGraphPreserving>
TestingTypes;
304TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Prob) {
305 checkBrpProb(this->env(), this->graphPreserving());
308TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Rew) {
309 checkBrpRew(this->env(), this->graphPreserving());
312TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Rew_4Par) {
313 checkBrpRew4Par(this->env(), this->graphPreserving());
316TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Crowds_Prob) {
317 checkCrowdsProb(this->env(), this->graphPreserving());
320TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Crowds_Prob_1Par) {
321 checkCrowdsProb1Par(this->env(), this->graphPreserving());
324TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Crowds_Prob_Const) {
325 checkCrowdsProbConst(this->env(), this->graphPreserving());
328TYPED_TEST(SparseRobustDtmcParameterLiftingTest, ZeroConf) {
329 checkZeroConf(this->env(), this->graphPreserving());
SolverEnvironment & solver()
void setPrecision(storm::RationalNumber value)
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
This class represents a discrete-time Markov chain.
Program preprocess(std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions) const
Preprocesses the program by defining the given constant definitions, substituting constants and formu...
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > createTask(std::shared_ptr< const storm::logic::Formula > const &formula, bool onlyInitialStatesRelevant=false)
storm::storage::ParameterRegion< ValueType > parseRegion(std::string const &inputString, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > const &consideredVariables)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::unique_ptr< storm::modelchecker::RegionModelChecker< ValueType > > initializeRegionModelChecker(Environment const &env, std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task, storm::modelchecker::RegionCheckEngine engine, bool allowModelSimplification=true, bool graphPreserving=true, bool preconditionsValidated=false, MonotonicitySetting monotonicitySetting=MonotonicitySetting(), std::optional< std::pair< std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType >, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > > > monotoneParameters=std::nullopt)
std::shared_ptr< storm::models::sparse::Model< ValueType > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options, typename storm::builder::ExplicitModelBuilder< ValueType >::Options const &explorationOptions=typename storm::builder::ExplicitModelBuilder< ValueType >::Options())
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
@ AllSat
the formula is satisfied for all well-defined parameters in the given region
@ AllViolated
the formula is violated for all well-defined parameters in the given region
@ ExistsBoth
the formula is satisfied for some parameters but also violated for others
@ CenterViolated
the formula is violated for the parameter Valuation that corresponds to the center point of the regio...
@ RobustParameterLifting
Parameter lifting approach based on robust markov models instead of generating nondeterminism.
std::set< storm::RationalFunctionVariable > getRewardParameters(Model< storm::RationalFunction > const &model)
Get all parameters occurring in rewards.
std::set< storm::RationalFunctionVariable > getProbabilityParameters(Model< storm::RationalFunction > const &model)
Get all probability parameters occurring on transitions.
TargetType convertNumber(SourceType const &number)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes