31void testModelInterval(std::string programFile, std::string formulaAsString, std::string constantsAsString) {
34 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
36 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
43 propositionalChecker.check(checkTask.getFormula().asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula())
44 ->asExplicitQualitativeCheckResult()
45 .getTruthValuesVector();
47 std::vector<storm::RationalFunction> target(model->getNumberOfStates(), storm::utility::zero<storm::RationalFunction>());
58 parameterLifter.
specifyRegion(region, storm::solver::OptimizationDirection::Maximize);
62 ASSERT_TRUE(result.has_value());
63 auto const& withoutMECs = *result;
65 auto target2 = parameterLifter.
getVector();
66 target2.push_back(storm::utility::zero<storm::Interval>());
69 env.solver().minMax().setMethod(storm::solver::MinMaxMethod::ValueIteration);
70 env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-8));
72 auto factory = std::make_unique<storm::solver::GeneralMinMaxLinearEquationSolverFactory<storm::Interval, double>>();
74 auto const& solver1 = factory->create(env);
75 auto x1 = std::vector<double>(parameterLifter.
getVector().size(), 0);
76 solver1->setMatrix(parameterLifter.
getMatrix());
78 auto const& solver2 = factory->create(env);
79 solver2->setMatrix(withoutMECs);
80 auto x2 = std::vector<double>(target2.size(), 0);
82 solver1->setUncertaintyIsRobust(
false);
83 solver2->setUncertaintyIsRobust(
false);
86 solver1->setOptimizationDirection(storm::solver::OptimizationDirection::Maximize);
87 solver1->solveEquations(env, x1, parameterLifter.
getVector());
88 solver2->setOptimizationDirection(storm::solver::OptimizationDirection::Maximize);
89 solver2->solveEquations(env, x2, target2);
91 for (uint64_t i = 0; i < x1.size(); i++) {
92 if (withoutMECs.getRow(i).getNumberOfEntries() > 0) {
93 ASSERT_NEAR(x1[i], x2[i], 1e-7);
void setVectorValues(std::vector< T > &vector, storm::storage::BitVector const &positions, std::vector< T > const &values)
Sets the provided values at the provided positions in the given vector.