1#include "storm-config.h"
16class DoubleViEnvironment {
18 typedef double ValueType;
20 static storm::Environment createEnvironment() {
21 storm::Environment env;
27class RationalPIEnvironment {
29 typedef storm::RationalNumber ValueType;
31 static storm::Environment createEnvironment() {
32 storm::Environment env;
38template<
typename TestType>
39class SparseMdpParameterLiftingTest :
public ::testing::Test {
41 typedef typename TestType::ValueType ValueType;
42 SparseMdpParameterLiftingTest() : _environment(TestType::createEnvironment()) {}
43 storm::Environment
const& env()
const {
46 virtual void SetUp() {
48 GTEST_SKIP() <<
"Z3 not available.";
50 carl::VariablePool::getInstance().clear();
52 virtual void TearDown() {
53 carl::VariablePool::getInstance().clear();
57 storm::Environment _environment;
61 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/two_dice.nm";
62 std::string formulaFile =
"P<=0.17 [ F \"doubles\" ]";
65 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
67 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
72 modelParameters.insert(rewParameters.begin(), rewParameters.end());
90 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/two_dice.nm";
91 std::string formulaFile =
"P<=0.17 [ F<100 \"doubles\" ]";
94 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
96 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
101 modelParameters.insert(rewParameters.begin(), rewParameters.end());
119 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/two_dice.nm";
120 std::string formulaFile =
"P<=0.17 [ F \"doubles\" ]";
123 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
125 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
130 modelParameters.insert(rewParameters.begin(), rewParameters.end());
148 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/two_dice.nm";
149 std::string formulaFile =
"P<=0.17 [ F<100 \"doubles\" ]";
152 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
154 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
159 modelParameters.insert(rewParameters.begin(), rewParameters.end());
177 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/coin2_2.nm";
178 std::string formulaAsString =
"P>0.25 [F \"finished\"&\"all_coins_equal_1\" ]";
181 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
183 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
188 modelParameters.insert(rewParameters.begin(), rewParameters.end());
207 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/brp16_2.nm";
208 std::string formulaAsString =
"P<=0.84 [ F (s=5 & T) ]";
209 std::string constantsAsString =
"TOMsg=0.0,TOAck=0.0";
212 program = program.
preprocess(constantsAsString);
213 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
215 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
220 modelParameters.insert(rewParameters.begin(), rewParameters.end());
239 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/brp16_2.nm";
240 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
241 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
244 program = program.
preprocess(constantsAsString);
245 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
247 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
252 modelParameters.insert(rewParameters.begin(), rewParameters.end());
271 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/brp16_2.nm";
272 std::string formulaAsString =
"R>2.5 [ C<=300 ]";
273 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
276 program = program.
preprocess(constantsAsString);
277 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
279 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
284 modelParameters.insert(rewParameters.begin(), rewParameters.end());
303 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/brp16_2.nm";
304 std::string formulaAsString =
"R>2.5 [F (s=0&srep=3) ]";
305 std::string constantsAsString =
"";
307 program = program.
preprocess(constantsAsString);
308 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
310 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
315 modelParameters.insert(rewParameters.begin(), rewParameters.end());
327 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pmdp/brp16_2.nm";
328 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
329 std::string constantsAsString =
"";
331 program = program.
preprocess(constantsAsString);
332 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
334 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> model =
339 modelParameters.insert(rewParameters.begin(), rewParameters.end());
357typedef ::testing::Types<DoubleViEnvironment, RationalPIEnvironment>
TestingTypes;
361TYPED_TEST(SparseMdpParameterLiftingTest, two_dice_Prob) {
362 checkTwoDiceProb(this->env(), TypeParam::regionEngine);
365TYPED_TEST(SparseMdpParameterLiftingTest, two_dice_Prob_bounded) {
366 checkTwoDiceProbBounded(this->env(), TypeParam::regionEngine);
369TYPED_TEST(SparseMdpParameterLiftingTest, two_dice_Prob_exactValidation) {
370 typedef typename TestFixture::ValueType
ValueType;
371 if (std::is_same<ValueType, storm::RationalNumber>::value) {
374 checkTwoDiceProbValidation(this->env());
377TYPED_TEST(SparseMdpParameterLiftingTest, two_dice_Prob_bounded_exactValidation) {
378 typedef typename TestFixture::ValueType
ValueType;
379 if (std::is_same<ValueType, storm::RationalNumber>::value) {
382 checkTwoDiceProbBoundedValidation(this->env());
385TYPED_TEST(SparseMdpParameterLiftingTest, coin_Prob) {
386 checkCoinProb(this->env(), TypeParam::regionEngine);
389TYPED_TEST(SparseMdpParameterLiftingTest, brp_Prop) {
390 checkBrpProp(this->env(), TypeParam::regionEngine);
393TYPED_TEST(SparseMdpParameterLiftingTest, brp_Rew) {
394 checkBrpRew(this->env(), TypeParam::regionEngine);
397TYPED_TEST(SparseMdpParameterLiftingTest, brp_Rew_bounded) {
398 checkBrpRewBounded(this->env(), TypeParam::regionEngine);
401TYPED_TEST(SparseMdpParameterLiftingTest, Brp_Rew_Infty) {
402 checkBrpRewInfty(this->env(), TypeParam::regionEngine);
405TYPED_TEST(SparseMdpParameterLiftingTest, Brp_Rew_4Par) {
406 checkBrpRew4Par(this->env(), TypeParam::regionEngine);
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 decision process.
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)
SFTBDDChecker::ValueType ValueType
@ 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
RegionCheckEngine
The considered engine for region checking.
@ ParameterLifting
Parameter lifting approach.
@ ValidatingParameterLifting
Parameter lifting approach with a) inexact (and fast) computation first and b) exact validation of ob...
@ ExactParameterLifting
Parameter lifting approach with exact arithmethics.
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