1#include "storm-config.h"
16class IsGraphPreserving {
25 static bool graphPreserving() {
30class AssumeGraphPreserving {
39 static bool graphPreserving() {
44template<
typename TestType>
45class SparseRobustDtmcParameterLiftingTest :
public ::testing::Test {
47 typedef typename TestType::ValueType
ValueType;
48 SparseRobustDtmcParameterLiftingTest() : _environment(TestType::createEnvironment()), _graphPreserving(TestType::graphPreserving()) {}
52 bool const& graphPreserving()
const {
53 return _graphPreserving;
55 virtual void SetUp() {
56 carl::VariablePool::getInstance().clear();
58 GTEST_SKIP() <<
"Z3 not available.";
61 virtual void TearDown() {
62 carl::VariablePool::getInstance().clear();
67 bool _graphPreserving;
70typedef ::testing::Types<IsGraphPreserving, AssumeGraphPreserving>
TestingTypes;
74TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Prob) {
75 typedef typename TestFixture::ValueType
ValueType;
77 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
78 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
79 std::string constantsAsString =
"";
84 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
86 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
91 modelParameters.insert(rewParameters.begin(), rewParameters.end());
93 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
95 true, this->graphPreserving());
98 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
99 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
100 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
110TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Prob_no_simplification) {
111 typedef typename TestFixture::ValueType
ValueType;
113 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
114 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
115 std::string constantsAsString =
"";
120 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
122 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
127 modelParameters.insert(rewParameters.begin(), rewParameters.end());
129 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
131 true, this->graphPreserving());
134 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
135 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
136 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
146TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Rew) {
147 typedef typename TestFixture::ValueType
ValueType;
148 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
149 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
150 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
154 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
156 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
161 modelParameters.insert(rewParameters.begin(), rewParameters.end());
163 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
165 true, this->graphPreserving());
168 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
169 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
170 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
180TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Brp_Rew_4Par) {
181 typedef typename TestFixture::ValueType
ValueType;
183 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
184 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
185 std::string constantsAsString =
"";
188 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
190 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
195 modelParameters.insert(rewParameters.begin(), rewParameters.end());
197 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
199 true, this->graphPreserving());
202 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.9,0.6<=pL<=0.85,0.9<=TOMsg<=0.95,0.85<=TOAck<=0.9", modelParameters);
203 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.7,0.2<=pL<=0.8,0.15<=TOMsg<=0.65,0.3<=TOAck<=0.9", modelParameters);
204 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.4,0.2<=pL<=0.3,0.15<=TOMsg<=0.3,0.1<=TOAck<=0.2", modelParameters);
214TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Crowds_Prob) {
215 typedef typename TestFixture::ValueType
ValueType;
217 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
218 std::string formulaAsString =
"P<0.5 [F \"observe0Greater1\" ]";
219 std::string constantsAsString =
"";
223 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
225 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
230 modelParameters.insert(rewParameters.begin(), rewParameters.end());
232 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
234 true, this->graphPreserving());
237 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=PF<=0.75,0.15<=badC<=0.2", modelParameters);
238 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.75<=PF<=0.8,0.2<=badC<=0.3", modelParameters);
239 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.2", modelParameters);
240 auto allVioHardRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.9", modelParameters);
252TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Crowds_Prob_1Par) {
253 typedef typename TestFixture::ValueType
ValueType;
255 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
256 std::string formulaAsString =
"P>0.75 [F \"observe0Greater1\" ]";
257 std::string constantsAsString =
"badC=0.3";
261 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
263 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
268 modelParameters.insert(rewParameters.begin(), rewParameters.end());
270 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
272 true, this->graphPreserving());
275 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.9<=PF<=0.99", modelParameters);
276 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.9", modelParameters);
277 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.01<=PF<=0.8", modelParameters);
287TYPED_TEST(SparseRobustDtmcParameterLiftingTest, Crowds_Prob_Const) {
288 typedef typename TestFixture::ValueType
ValueType;
290 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
291 std::string formulaAsString =
"P>0.6 [F \"observe0Greater1\" ]";
292 std::string constantsAsString =
"PF=0.9,badC=0.2";
296 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
298 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
303 modelParameters.insert(rewParameters.begin(), rewParameters.end());
305 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
307 true, this->graphPreserving());
310 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"", modelParameters);
316TYPED_TEST(SparseRobustDtmcParameterLiftingTest, ZeroConf) {
317 typedef typename TestFixture::ValueType
ValueType;
319 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/zeroconf4.pm";
320 std::string formulaAsString =
"P>0.5 [F s=5 ]";
321 std::string constantsAsString =
" n = 4";
326 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
328 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
333 modelParameters.insert(rewParameters.begin(), rewParameters.end());
335 auto regionChecker = storm::api::initializeRegionModelChecker<storm::RationalFunction>(
337 true, this->graphPreserving());
340 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=pL<=0.95,0.8<=pK<=0.95", modelParameters);
341 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pL<=0.9,0.6<=pK<=0.9", modelParameters);
342 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.7,0.1<=pK<=0.7", modelParameters);
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.
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
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
@ 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.
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes