43void testModelInterval(std::string programFile, std::string formulaAsString, std::string constantsAsString) {
46 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
48 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
55 propositionalChecker.check(checkTask.getFormula().asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula())
56 ->asExplicitQualitativeCheckResult()
57 .getTruthValuesVector();
59 std::vector<storm::RationalFunction> target(model->getNumberOfStates(), storm::utility::zero<storm::RationalFunction>());
70 parameterLifter.
specifyRegion(region, storm::solver::OptimizationDirection::Maximize);
74 ASSERT_TRUE(result.has_value());
75 auto const& withoutMECs = *result;
77 auto target2 = parameterLifter.
getVector();
78 target2.push_back(storm::utility::zero<storm::Interval>());
81 env.solver().minMax().setMethod(storm::solver::MinMaxMethod::ValueIteration);
82 env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-8));
84 auto factory = std::make_unique<storm::solver::GeneralMinMaxLinearEquationSolverFactory<storm::Interval, double>>();
86 auto const& solver1 = factory->create(env);
87 auto x1 = std::vector<double>(parameterLifter.
getVector().size(), 0);
88 solver1->setMatrix(parameterLifter.
getMatrix());
90 auto const& solver2 = factory->create(env);
91 solver2->setMatrix(withoutMECs);
92 auto x2 = std::vector<double>(target2.size(), 0);
94 solver1->setUncertaintyIsRobust(
false);
95 solver2->setUncertaintyIsRobust(
false);
98 solver1->setOptimizationDirection(storm::solver::OptimizationDirection::Maximize);
99 solver1->solveEquations(env, x1, parameterLifter.
getVector());
100 solver2->setOptimizationDirection(storm::solver::OptimizationDirection::Maximize);
101 solver2->solveEquations(env, x2, target2);
103 for (uint64_t i = 0; i < x1.size(); i++) {
104 if (withoutMECs.getRow(i).getNumberOfEntries() > 0) {
105 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.