85 typedef typename TestFixture::ValueType ValueType;
87 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmax=? [F \"goal\" ]",
"slippery=0");
88 auto task = storm::api::createTask<ValueType>(data.formula,
false);
89 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
91 ValueType expected = this->parseNumber(
"7/10");
92 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
94 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
95 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
96 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
97 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
101 typedef typename TestFixture::ValueType ValueType;
103 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmin=? [F \"goal\" ]",
"slippery=0");
104 auto task = storm::api::createTask<ValueType>(data.formula,
false);
105 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
107 ValueType expected = this->parseNumber(
"3/10");
108 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
110 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
111 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
112 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
113 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
117 typedef typename TestFixture::ValueType ValueType;
119 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmax=? [F \"goal\" ]",
"slippery=0.4");
120 auto task = storm::api::createTask<ValueType>(data.formula,
false);
121 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
123 ValueType expected = this->parseNumber(
"7/10");
124 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
126 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
127 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
128 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
129 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
133 typedef typename TestFixture::ValueType ValueType;
135 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmin=? [F \"goal\" ]",
"slippery=0.4");
136 auto task = storm::api::createTask<ValueType>(data.formula,
false);
137 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
139 ValueType expected = this->parseNumber(
"3/10");
140 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
142 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
144 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
145 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
146 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
150 typedef typename TestFixture::ValueType ValueType;
152 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmax=? [F s>4 ]",
"slippery=0");
153 auto task = storm::api::createTask<ValueType>(data.formula,
false);
154 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
156 ValueType expected = this->parseNumber(
"29/50");
157 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
159 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
160 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
161 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
162 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
166 typedef typename TestFixture::ValueType ValueType;
168 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmin=? [F s>4 ]",
"slippery=0");
169 auto task = storm::api::createTask<ValueType>(data.formula,
false);
170 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
172 ValueType expected = this->parseNumber(
"19/50");
173 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
175 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
176 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
177 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
178 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
182 typedef typename TestFixture::ValueType ValueType;
184 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmax=? [F s>4 ]",
"slippery=0.4");
185 auto task = storm::api::createTask<ValueType>(data.formula,
false);
186 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
188 ValueType expected = this->parseNumber(
"29/30");
189 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
191 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
192 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
193 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
194 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 5), std::out_of_range);
198 typedef typename TestFixture::ValueType ValueType;
200 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmin=? [F s>4 ]",
"slippery=0.4");
201 auto task = storm::api::createTask<ValueType>(data.formula,
false);
202 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
204 ValueType expected = this->parseNumber(
"19/30");
205 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
207 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
208 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
209 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
210 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 5), std::out_of_range);
214 typedef typename TestFixture::ValueType ValueType;
216 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"Rmin=? [F \"goal\"]",
"sl=0");
217 auto task = storm::api::createTask<ValueType>(data.formula,
false);
218 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
220 ValueType expected = this->parseNumber(
"74/91");
221 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
223 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
224 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
225 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
226 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
230 typedef typename TestFixture::ValueType ValueType;
232 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"Rmin=? [F \"goal\"]",
"sl=0.075");
233 auto task = storm::api::createTask<ValueType>(data.formula,
false);
234 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
236 ValueType expected = this->parseNumber(
"80/91");
237 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
239 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
240 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
241 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
242 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
246 typedef typename TestFixture::ValueType ValueType;
248 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/refuel.prism",
"Pmax=?[\"notbad\" U \"goal\"]",
"N=4");
249 auto task = storm::api::createTask<ValueType>(data.formula,
false);
250 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
252 ValueType expected = this->parseNumber(
"38/155");
253 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
255 EXPECT_EQ(2ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
256 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
257 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
258 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1));
259 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 2), std::out_of_range);
263 typedef typename TestFixture::ValueType ValueType;
265 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/refuel.prism",
"Pmin=?[\"notbad\" U \"goal\"]",
"N=4");
266 auto task = storm::api::createTask<ValueType>(data.formula,
false);
267 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
269 ValueType expected = this->parseNumber(
"0");
270 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
272 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
273 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
274 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
275 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
279 typedef typename TestFixture::ValueType ValueType;
281 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple2.prism",
"Rmax=?[F \"goal\"]");
282 auto task = storm::api::createTask<ValueType>(data.formula,
false);
283 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 10);
285 ValueType expected = this->parseNumber(
"59040588757/103747000000");
286 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
288 EXPECT_EQ(2ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
289 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
290 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
291 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1));
292 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 2), std::out_of_range);
294 std::vector<std::unordered_map<uint64_t, ValueType>> obs0vals{{{0, 0}, {1, 0}}, {{0, 0.7}}, {{0, 1}, {1, 1}}};
295 std::vector<std::unordered_map<uint64_t, ValueType>> obs1vals{{{2, 1}}, {{2, 1}}};
296 std::vector<std::vector<std::unordered_map<uint64_t, ValueType>>> additionalVals{obs0vals, obs1vals};
298 result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 10, additionalVals);
300 EXPECT_LE(result.lowerBound, storm::utility::one<ValueType>() + this->modelcheckingPrecision());
304 typedef typename TestFixture::ValueType ValueType;
306 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple2.prism",
"Rmax=?[F \"goal\"]");
307 auto task = storm::api::createTask<ValueType>(data.formula,
false);
309 std::vector<std::unordered_map<uint64_t, ValueType>> obs0vals{{{0, 0}, {1, 0}}, {{0, 0.7}}, {{0, 1}, {1, 1}}};
310 std::vector<std::unordered_map<uint64_t, ValueType>> obs1vals{{{2, 1}}, {{2, 1}}};
311 std::vector<std::vector<std::unordered_map<uint64_t, ValueType>>> additionalVals{obs0vals, obs1vals};
313 auto result = storm::pomdp::api::underapproximateWithoutHeuristicValues<ValueType>(data.model, task, 10, additionalVals);
315 EXPECT_LE(result.lowerBound, storm::utility::one<ValueType>() + this->modelcheckingPrecision());