86 typedef typename TestFixture::ValueType ValueType;
88 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmax=? [F \"goal\" ]",
"slippery=0");
89 auto task = storm::api::createTask<ValueType>(data.formula,
false);
90 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
92 ValueType expected = this->parseNumber(
"7/10");
93 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
95 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
96 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
97 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
98 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
102 typedef typename TestFixture::ValueType ValueType;
104 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmin=? [F \"goal\" ]",
"slippery=0");
105 auto task = storm::api::createTask<ValueType>(data.formula,
false);
106 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
108 ValueType expected = this->parseNumber(
"3/10");
109 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
111 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
112 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
113 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
114 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
118 typedef typename TestFixture::ValueType ValueType;
120 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmax=? [F \"goal\" ]",
"slippery=0.4");
121 auto task = storm::api::createTask<ValueType>(data.formula,
false);
122 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
124 ValueType expected = this->parseNumber(
"7/10");
125 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
127 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
128 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
129 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
130 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
134 typedef typename TestFixture::ValueType ValueType;
136 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Pmin=? [F \"goal\" ]",
"slippery=0.4");
137 auto task = storm::api::createTask<ValueType>(data.formula,
false);
138 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
140 ValueType expected = this->parseNumber(
"3/10");
141 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
143 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
145 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
146 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
147 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
151 typedef typename TestFixture::ValueType ValueType;
153 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmax=? [F s>4 ]",
"slippery=0");
154 auto task = storm::api::createTask<ValueType>(data.formula,
false);
155 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
157 ValueType expected = this->parseNumber(
"29/50");
158 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
160 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
161 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
162 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
163 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
167 typedef typename TestFixture::ValueType ValueType;
169 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmin=? [F s>4 ]",
"slippery=0");
170 auto task = storm::api::createTask<ValueType>(data.formula,
false);
171 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
173 ValueType expected = this->parseNumber(
"19/50");
174 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
176 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
177 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
178 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
179 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
183 typedef typename TestFixture::ValueType ValueType;
185 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmax=? [F s>4 ]",
"slippery=0.4");
186 auto task = storm::api::createTask<ValueType>(data.formula,
false);
187 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
189 ValueType expected = this->parseNumber(
"29/30");
190 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
192 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
193 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
194 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
195 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 5), std::out_of_range);
199 typedef typename TestFixture::ValueType ValueType;
201 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"Rmin=? [F s>4 ]",
"slippery=0.4");
202 auto task = storm::api::createTask<ValueType>(data.formula,
false);
203 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
205 ValueType expected = this->parseNumber(
"19/30");
206 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
208 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
209 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
210 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
211 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 5), std::out_of_range);
215 typedef typename TestFixture::ValueType ValueType;
217 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"Rmin=? [F \"goal\"]",
"sl=0");
218 auto task = storm::api::createTask<ValueType>(data.formula,
false);
219 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
221 ValueType expected = this->parseNumber(
"74/91");
222 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
224 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
225 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
226 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
227 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
231 typedef typename TestFixture::ValueType ValueType;
233 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"Rmin=? [F \"goal\"]",
"sl=0.075");
234 auto task = storm::api::createTask<ValueType>(data.formula,
false);
235 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
237 ValueType expected = this->parseNumber(
"80/91");
238 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
240 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
241 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
242 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
243 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
247 typedef typename TestFixture::ValueType ValueType;
249 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/refuel.prism",
"Pmax=?[\"notbad\" U \"goal\"]",
"N=4");
250 auto task = storm::api::createTask<ValueType>(data.formula,
false);
251 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
253 ValueType expected = this->parseNumber(
"38/155");
254 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
256 EXPECT_EQ(2ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
257 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
258 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
259 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1));
260 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 2), std::out_of_range);
264 typedef typename TestFixture::ValueType ValueType;
266 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/refuel.prism",
"Pmin=?[\"notbad\" U \"goal\"]",
"N=4");
267 auto task = storm::api::createTask<ValueType>(data.formula,
false);
268 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 100);
270 ValueType expected = this->parseNumber(
"0");
271 EXPECT_GE(result.upperBound, expected - this->modelcheckingPrecision());
273 EXPECT_EQ(1ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
274 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
275 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
276 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1), std::out_of_range);
280 typedef typename TestFixture::ValueType ValueType;
282 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple2.prism",
"Rmax=?[F \"goal\"]");
283 auto task = storm::api::createTask<ValueType>(data.formula,
false);
284 auto result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 10);
286 ValueType expected = this->parseNumber(
"59040588757/103747000000");
287 EXPECT_LE(result.lowerBound, expected + this->modelcheckingPrecision());
289 EXPECT_EQ(2ul, storm::pomdp::api::getNumberOfPreprocessingSchedulers<ValueType>(result));
290 EXPECT_NO_THROW(storm::pomdp::api::extractSchedulerAsMarkovChain<ValueType>(result));
291 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 0));
292 EXPECT_NO_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 1));
293 EXPECT_THROW(storm::pomdp::api::getCutoffScheduler<ValueType>(result, 2), std::out_of_range);
295 std::vector<std::unordered_map<uint64_t, ValueType>> obs0vals{{{0, 0}, {1, 0}}, {{0, 0.7}}, {{0, 1}, {1, 1}}};
296 std::vector<std::unordered_map<uint64_t, ValueType>> obs1vals{{{2, 1}}, {{2, 1}}};
297 std::vector<std::vector<std::unordered_map<uint64_t, ValueType>>> additionalVals{obs0vals, obs1vals};
299 result = storm::pomdp::api::underapproximateWithCutoffs<ValueType>(data.model, task, 10, additionalVals);
301 EXPECT_LE(result.lowerBound, storm::utility::one<ValueType>() + this->modelcheckingPrecision());
305 typedef typename TestFixture::ValueType ValueType;
307 auto data = this->buildPrism(STORM_TEST_RESOURCES_DIR
"/pomdp/simple2.prism",
"Rmax=?[F \"goal\"]");
308 auto task = storm::api::createTask<ValueType>(data.formula,
false);
310 std::vector<std::unordered_map<uint64_t, ValueType>> obs0vals{{{0, 0}, {1, 0}}, {{0, 0.7}}, {{0, 1}, {1, 1}}};
311 std::vector<std::unordered_map<uint64_t, ValueType>> obs1vals{{{2, 1}}, {{2, 1}}};
312 std::vector<std::vector<std::unordered_map<uint64_t, ValueType>>> additionalVals{obs0vals, obs1vals};
314 auto result = storm::pomdp::api::underapproximateWithoutHeuristicValues<ValueType>(data.model, task, 10, additionalVals);
316 EXPECT_LE(result.lowerBound, storm::utility::one<ValueType>() + this->modelcheckingPrecision());