32namespace modelchecker {
35template<
typename ValueType>
37 boost::optional<SparseMdpEndComponentInformation<ValueType>>
ecInformation;
43template<
typename ValueType>
45 std::vector<ValueType>
const& b) {
47 std::vector<uint64_t> result(numberOfMaybeStates);
50 for (uint64_t state = 0; state < numberOfMaybeStates; ++state) {
54 targetStates.
set(state);
60 if (!targetStates.
full()) {
64 targetStates, validScheduler, boost::none);
66 for (uint64_t state = 0; state < numberOfMaybeStates; ++state) {
67 if (!targetStates.
get(state)) {
68 result[state] = validScheduler.
getChoice(state).getDeterministicChoice();
76template<
typename ValueType>
81 uint64_t position = 0;
82 for (
auto state : properMaybeStates) {
83 scheduler.get()[position] = scheduler.get()[state];
87 scheduler.get().shrink_to_fit();
91 explicitRepresentation.first = explicitRepresentation.first.getSubmatrix(
true, properMaybeStates, properMaybeStates);
94template<
typename ValueType>
99 auto& transitionMatrix = explicitRepresentation.first;
100 auto& oneStepProbabilities = explicitRepresentation.second;
105 if (doDecomposition) {
106 auto backwardTransitions = transitionMatrix.transpose(
true);
112 doDecomposition = !candidateStates.
empty();
114 if (doDecomposition) {
121 if (doDecomposition && !endComponentDecomposition.
empty()) {
123 std::vector<ValueType> subvector;
126 explicitRepresentation.first, &subvector,
nullptr);
127 oneStepProbabilities = std::move(subvector);
130 oneStepProbabilities = explicitRepresentation.first.getConstrainedRowGroupSumVector(solverRequirementsData.
properMaybeStates, targetStates);
136template<storm::dd::DdType DdType,
typename ValueType>
145 if (dir == OptimizationDirection::Minimize) {
152 STORM_LOG_INFO(
"Preprocessing: " << statesWithProbability01.first.getNonZeroCount() <<
" states with probability 1, "
153 << statesWithProbability01.second.getNonZeroCount() <<
" with probability 0 (" << maybeStates.
getNonZeroCount()
154 <<
" states remaining).");
161 statesWithProbability01.second.template toAdd<ValueType>() +
162 maybeStates.template toAdd<ValueType>() * model.
getManager().getConstant(storm::utility::convertNumber<ValueType>(0.5))));
165 if (!maybeStates.
isZero()) {
167 bool hasNoEndComponents = dir == storm::solver::OptimizationDirection::Minimize;
171 linearEquationSolverFactory.
getRequirements(env, hasNoEndComponents, hasNoEndComponents, dir);
174 bool extendMaybeStates =
false;
178 STORM_LOG_DEBUG(
"Scheduling EC elimination, because the solver requires a unique solution.");
179 extendMaybeStates =
true;
181 hasNoEndComponents =
true;
184 STORM_LOG_DEBUG(
"Scheduling valid scheduler computation, because the solver requires it.");
193 if (extendMaybeStates) {
203 conversionWatch.
start();
205 conversionWatch.
stop();
215 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation;
216 if (extendMaybeStates) {
221 conversionWatch.
start();
229 conversionWatch.
stop();
246 conversionWatch.
start();
248 conversionWatch.
stop();
252 computeValidInitialSchedulerForUntilProbabilities<ValueType>(explicitRepresentation.first, explicitRepresentation.second);
259 std::vector<ValueType> x(explicitRepresentation.first.getRowGroupCount(), storm::utility::zero<ValueType>());
261 std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver =
262 linearEquationSolverFactory.
create(env, std::move(explicitRepresentation.first));
265 solver->setHasUniqueSolution(hasNoEndComponents);
266 solver->setHasNoEndComponents(hasNoEndComponents);
269 solver->setInitialScheduler(std::move(solverRequirementsData.
initialScheduler.get()));
271 solver->setBounds(storm::utility::zero<ValueType>(), storm::utility::one<ValueType>());
272 solver->setRequirementsChecked();
273 solver->solveEquations(env, dir, x, explicitRepresentation.second);
279 x = std::move(extendedVector);
283 if (extendMaybeStates) {
293 model.
getReachableStates(), statesWithProbability01.second.template toAdd<ValueType>()));
298template<storm::dd::DdType DdType,
typename ValueType>
302 std::unique_ptr<CheckResult> result =
303 computeUntilProbabilities(env, dir == OptimizationDirection::Minimize ? OptimizationDirection::Maximize : OptimizationDirection::Maximize, model,
305 result->asQuantitativeCheckResult<ValueType>().oneMinus();
309template<storm::dd::DdType DdType,
typename ValueType>
316template<storm::dd::DdType DdType,
typename ValueType>
320 uint_fast64_t stepBound) {
324 if (dir == OptimizationDirection::Minimize) {
334 if (!maybeStates.
isZero()) {
338 conversionWatch.
start();
340 conversionWatch.
stop();
358 std::vector<ValueType> x(maybeStates.
getNonZeroCount(), storm::utility::zero<ValueType>());
361 conversionWatch.
start();
362 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation =
364 conversionWatch.
stop();
368 multiplier->repeatedMultiplyAndReduce(env, dir, x, &explicitRepresentation.second, stepBound);
374 return std::unique_ptr<CheckResult>(
379template<storm::dd::DdType DdType,
typename ValueType>
384 STORM_LOG_THROW(rewardModel.hasStateRewards(), storm::exceptions::InvalidPropertyException,
385 "Computing instantaneous rewards for a reward model that does not define any state-rewards. The result is trivially 0.");
396 std::vector<ValueType> x = rewardModel.getStateRewardVector().toVector(odd);
397 conversionWatch.
stop();
402 multiplier->repeatedMultiplyAndReduce(env, dir, x,
nullptr, stepBound);
409template<storm::dd::DdType DdType,
typename ValueType>
414 STORM_LOG_THROW(!rewardModel.empty(), storm::exceptions::InvalidPropertyException,
"Missing reward model for formula. Skipping formula.");
420 std::vector<ValueType> x(model.
getNumberOfStates(), storm::utility::zero<ValueType>());
428 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation =
430 conversionWatch.
stop();
435 multiplier->repeatedMultiplyAndReduce(env, dir, x, &explicitRepresentation.second, stepBound);
442template<
typename ValueType>
447 for (uint64_t rowGroup = 0; rowGroup < transitionMatrix.
getRowGroupCount(); ++rowGroup) {
449 targetStates.
set(rowGroup);
456template<
typename ValueType>
461 std::vector<uint64_t> result(numberOfMaybeStates);
466 properMaybeStates, targetStates, validScheduler);
468 for (uint64_t state = 0; state < numberOfMaybeStates; ++state) {
469 if (!targetStates.
get(state)) {
470 result[state] = validScheduler.
getChoice(state).getDeterministicChoice();
477template<
typename ValueType>
484template<
typename ValueType>
489 auto& transitionMatrix = explicitRepresentation.first;
490 auto& rewardVector = explicitRepresentation.second;
496 for (
auto const& e : rewardVector) {
498 zeroRewardChoices.
set(index);
506 bool keepState =
false;
508 for (
auto row = transitionMatrix.getRowGroupIndices()[state], rowEnd = transitionMatrix.getRowGroupIndices()[state + 1]; row < rowEnd; ++row) {
509 if (zeroRewardChoices.
get(row)) {
516 candidateStates.
set(state,
false);
520 bool doDecomposition = !candidateStates.
empty();
523 if (doDecomposition) {
524 auto backwardTransitions = transitionMatrix.transpose(
true);
530 doDecomposition = !candidateStates.
empty();
532 if (doDecomposition) {
534 endComponentDecomposition =
540 if (doDecomposition && !endComponentDecomposition.
empty()) {
542 if (computeOneStepTargetProbabilities) {
549 endComponentDecomposition, transitionMatrix, solverRequirementsData.
properMaybeStates, computeOneStepTargetProbabilities ? &targetStates :
nullptr,
550 nullptr, &rewardVector, transitionMatrix, computeOneStepTargetProbabilities ? &solverRequirementsData.
oneStepTargetProbabilities.get() :
nullptr,
552 rewardVector = std::move(subvector);
555 if (computeOneStepTargetProbabilities) {
557 explicitRepresentation.first, solverRequirementsData.
properMaybeStates, targetStates);
564template<
typename ValueType>
567 std::vector<ValueType>
const& oneStepTargetProbabilities) {
569 if (direction == storm::OptimizationDirection::Minimize) {
578template<storm::dd::DdType DdType,
typename ValueType>
584 STORM_LOG_THROW(!rewardModel.empty(), storm::exceptions::InvalidPropertyException,
"Missing reward model for formula. Skipping formula.");
589 if (dir == OptimizationDirection::Minimize) {
595 model, transitionMatrixBdd, targetStates,
603 <<
" target states (" << maybeStates.
getNonZeroCount() <<
" states remaining).");
611 infinityStates.
ite(model.
getManager().getConstant(storm::utility::infinity<ValueType>()), model.
getManager().template getAddZero<ValueType>()) +
612 maybeStates.template toAdd<ValueType>() * model.
getManager().getConstant(storm::utility::one<ValueType>())));
615 if (!maybeStates.
isZero()) {
617 bool hasNoEndComponents = dir == storm::solver::OptimizationDirection::Maximize;
618 bool hasUniqueSolution = hasNoEndComponents;
622 linearEquationSolverFactory.
getRequirements(env, hasUniqueSolution, hasNoEndComponents, dir);
624 bool extendMaybeStates =
false;
627 STORM_LOG_DEBUG(
"Scheduling EC elimination, because the solver requires it.");
628 extendMaybeStates =
true;
630 hasUniqueSolution =
true;
634 STORM_LOG_DEBUG(
"Computing valid scheduler, because the solver requires it.");
635 extendMaybeStates =
true;
640 STORM_LOG_DEBUG(
"Computing upper bounds, because the solver requires it.");
641 extendMaybeStates =
true;
649 storm::dd::Bdd<DdType> requiredMaybeStates = extendMaybeStates ? maybeStatesWithTargetStates : maybeStates;
654 conversionWatch.
start();
656 conversionWatch.
stop();
668 .
template toAdd<ValueType>();
673 rewardModel.getTotalRewardVector(maybeStatesAdd, choiceFilterAdd, submatrix, model.
getColumnVariables());
675 conversionWatch.
start();
677 .
template toAdd<uint_fast64_t>()
680 conversionWatch.
stop();
687 conversionWatch.
start();
688 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.
toMatrixVector(
690 conversionWatch.
stop();
695 if (extendMaybeStates) {
701 "The underlying solver requires a unique solution and an initial valid scheduler. This is currently not supported for "
702 "expected reward properties.");
708 hasUniqueSolution =
true;
712 solverRequirementsData.
initialScheduler = computeValidInitialSchedulerForReachabilityRewards<ValueType>(
713 explicitRepresentation.first, solverRequirementsData.
properMaybeStates, targetStates);
718 explicitRepresentation.first, solverRequirementsData.
properMaybeStates, targetStates);
729 std::vector<ValueType> x(explicitRepresentation.first.getRowGroupCount(), storm::utility::zero<ValueType>());
732 std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.
create(env);
735 solver->setHasUniqueSolution(hasUniqueSolution);
736 solver->setHasNoEndComponents(hasNoEndComponents);
744 solver->setMatrix(std::move(explicitRepresentation.first));
748 solver->setInitialScheduler(std::move(solverRequirementsData.
initialScheduler.get()));
751 solver->setLowerBound(storm::utility::zero<ValueType>());
752 solver->setRequirementsChecked();
753 solver->solveEquations(env, dir, x, explicitRepresentation.second);
759 x = std::move(extendedVector);
763 if (extendMaybeStates) {
770 infinityStates.
ite(model.
getManager().getConstant(storm::utility::infinity<ValueType>()), model.
getManager().template getAddZero<ValueType>()),
771 maybeStates, odd, x));
775 model.
getManager().template getAddZero<ValueType>())));
780template<storm::dd::DdType DdType,
typename ValueType>
785 return computeReachabilityRewards(env, dir, model, transitionMatrix, rewardModel, targetStates, qualitative);
Add< LibraryType, ValueType > swapVariables(std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const &metaVariablePairs) const
Swaps the given pairs of meta variables in the ADD.
storm::storage::SparseMatrix< ValueType > toMatrix() const
Converts the ADD to a (sparse) matrix.
std::pair< storm::storage::SparseMatrix< ValueType >, std::vector< ValueType > > toMatrixVector(storm::dd::Add< LibraryType, ValueType > const &vector, std::set< storm::expressions::Variable > const &groupMetaVariables, storm::dd::Odd const &rowOdd, storm::dd::Odd const &columnOdd) const
Converts the ADD to a row-grouped (sparse) matrix and the given vector to a row-grouped vector.
Add< LibraryType, ValueType > sumAbstract(std::set< storm::expressions::Variable > const &metaVariables) const
Sum-abstracts from the given meta variables.
Bdd< LibraryType > notZero() const
Computes a BDD that represents the function in which all assignments with a function value unequal to...
Bdd< LibraryType > existsAbstract(std::set< storm::expressions::Variable > const &metaVariables) const
Existentially abstracts from the given meta variables.
bool isZero() const
Retrieves whether this DD represents the constant zero function.
virtual uint_fast64_t getNonZeroCount() const override
Retrieves the number of encodings that are mapped to a non-zero value.
Bdd< LibraryType > swapVariables(std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const &metaVariablePairs) const
Swaps the given pairs of meta variables in the BDD.
Odd createOdd() const
Creates an ODD based on the current BDD.
storm::storage::BitVector toVector(storm::dd::Odd const &rowOdd) const
Converts the BDD to a bit vector.
Bdd< LibraryType > ite(Bdd< LibraryType > const &thenBdd, Bdd< LibraryType > const &elseBdd) const
Performs an if-then-else with the given operands, i.e.
Bdd< LibraryType > renameVariables(std::set< storm::expressions::Variable > const &from, std::set< storm::expressions::Variable > const &to) const
Renames the given meta variables in the BDD.
Bdd< LibraryType > relationalProduct(Bdd< LibraryType > const &relation, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables) const
Computes the relational product of the current BDD and the given BDD representing a relation.
ValueType computeUpperBound()
Computes an upper bound on the expected rewards.
std::vector< ValueType > computeUpperBounds()
Computes upper bounds on the expected rewards.
static std::unique_ptr< CheckResult > computeGloballyProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &psiStates, bool qualitative)
static std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &nextStates)
static std::unique_ptr< CheckResult > computeInstantaneousRewards(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepBound)
storm::models::symbolic::NondeterministicModel< DdType, ValueType >::RewardModelType RewardModelType
static std::unique_ptr< CheckResult > computeReachabilityTimes(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &targetStates, bool qualitative)
static std::unique_ptr< CheckResult > computeCumulativeRewards(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepBound)
static std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &phiStates, storm::dd::Bdd< DdType > const &psiStates, uint_fast64_t stepBound)
static std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &phiStates, storm::dd::Bdd< DdType > const &psiStates, bool qualitative)
static std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, RewardModelType const &rewardModel, storm::dd::Bdd< DdType > const &targetStates, bool qualitative)
static std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, OptimizationDirection dir, storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, storm::dd::Add< DdType, ValueType > const &transitionMatrix, storm::dd::Bdd< DdType > const &nextStates)
storm::dd::DdManager< Type > & getManager() const
Retrieves the manager responsible for the DDs that represent this model.
std::set< storm::expressions::Variable > const & getColumnVariables() const
Retrieves the meta variables used to encode the columns of the transition matrix and the vector indic...
std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const & getRowColumnMetaVariablePairs() const
Retrieves the pairs of row and column meta variables.
std::set< storm::expressions::Variable > const & getRowVariables() const
Retrieves the meta variables used to encode the rows of the transition matrix and the vector indices.
storm::dd::Bdd< Type > const & getReachableStates() const
Retrieves the reachable states of the model.
virtual uint_fast64_t getNumberOfStates() const override
Returns the number of states of the model.
Base class for all nondeterministic symbolic models.
virtual std::set< storm::expressions::Variable > const & getNondeterminismVariables() const override
Retrieves the meta variables used to encode the nondeterminism in the model.
void setUpperBound(ValueType const &value)
Sets an upper bound for the solution that can potentially be used by the solver.
void setUpperBounds(std::vector< ValueType > const &values)
Sets upper bounds for the solution that can potentially be used by the solver.
virtual std::unique_ptr< MinMaxLinearEquationSolver< ValueType, SolutionType > > create(Environment const &env) const override
MinMaxLinearEquationSolverRequirements getRequirements(Environment const &env, bool hasUniqueSolution=false, bool hasNoEndComponents=false, boost::optional< storm::solver::OptimizationDirection > const &direction=boost::none, bool hasInitialScheduler=false, bool trackScheduler=false) const
Retrieves the requirements of the solver that would be created when calling create() right now.
A class representing the interface that all min-max linear equation solvers shall implement.
SolverRequirement const & validInitialScheduler() const
void clearValidInitialScheduler()
void clearUniqueSolution()
bool hasEnabledRequirement() const
SolverRequirement const & uniqueSolution() const
bool hasEnabledCriticalRequirement() const
std::string getEnabledRequirementsAsString() const
Returns a string that enumerates the enabled requirements.
SolverRequirement const & upperBounds() const
std::unique_ptr< Multiplier< ValueType > > create(Environment const &env, storm::storage::SparseMatrix< ValueType > const &matrix)
A bit vector that is internally represented as a vector of 64-bit values.
bool full() const
Retrieves whether all bits are set in this bit vector.
bool empty() const
Retrieves whether no bits are set to true in this bit vector.
void set(uint_fast64_t index, bool value=true)
Sets the given truth value at the given index.
uint_fast64_t getNumberOfSetBits() const
Returns the number of bits that are set to true in this bit vector.
bool get(uint_fast64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
bool empty() const
Checks if the decomposition is empty.
std::size_t size() const
Retrieves the number of blocks of this decomposition.
This class represents the decomposition of a nondeterministic model into its maximal end components.
This class defines which action is chosen in a particular state of a non-deterministic model.
SchedulerChoice< ValueType > const & getChoice(uint_fast64_t modelState, uint_fast64_t memoryState=0) const
Gets the choice defined by the scheduler for the given model and memory state.
A class that holds a possibly non-square matrix in the compressed row storage format.
index_type getRowGroupCount() const
Returns the number of row groups in the matrix.
std::vector< index_type > const & getRowGroupIndices() const
Returns the grouping of rows of this matrix.
std::vector< value_type > getConstrainedRowGroupSumVector(storm::storage::BitVector const &rowGroupConstraint, storm::storage::BitVector const &columnConstraint) const
Computes a vector whose entries represent the sums of selected columns for all rows in selected row g...
storm::storage::SparseMatrix< value_type > transpose(bool joinGroups=false, bool keepZeros=false) const
Transposes the matrix.
A class that provides convenience operations to display run times.
MilisecondType getTimeInMilliseconds() const
Gets the measured time in milliseconds.
void start()
Start stopwatch (again) and start measuring time.
void stop()
Stop stopwatch and add measured time to total time.
#define STORM_LOG_INFO(message)
#define STORM_LOG_DEBUG(message)
#define STORM_LOG_THROW(cond, exception, message)
storm::storage::BitVector computeTargetStatesForReachabilityRewardsFromExplicitRepresentation(storm::storage::SparseMatrix< ValueType > const &transitionMatrix)
void eliminateEndComponentsAndExtendedStatesUntilProbabilities(std::pair< storm::storage::SparseMatrix< ValueType >, std::vector< ValueType > > &explicitRepresentation, SolverRequirementsData< ValueType > &solverRequirementsData, storm::storage::BitVector const &targetStates)
void eliminateEndComponentsAndTargetStatesReachabilityRewards(std::pair< storm::storage::SparseMatrix< ValueType >, std::vector< ValueType > > &explicitRepresentation, SolverRequirementsData< ValueType > &solverRequirementsData, storm::storage::BitVector const &targetStates, bool computeOneStepTargetProbabilities)
void setUpperRewardBounds(storm::solver::MinMaxLinearEquationSolver< ValueType > &solver, storm::OptimizationDirection const &direction, storm::storage::SparseMatrix< ValueType > const &submatrix, std::vector< ValueType > const &choiceRewards, std::vector< ValueType > const &oneStepTargetProbabilities)
std::vector< ValueType > computeOneStepTargetProbabilitiesFromExtendedExplicitRepresentation(storm::storage::SparseMatrix< ValueType > const &extendedMatrix, storm::storage::BitVector const &properMaybeStates, storm::storage::BitVector const &targetStates)
void eliminateExtendedStatesFromExplicitRepresentation(std::pair< storm::storage::SparseMatrix< ValueType >, std::vector< ValueType > > &explicitRepresentation, boost::optional< std::vector< uint64_t > > &scheduler, storm::storage::BitVector const &properMaybeStates)
std::vector< uint64_t > computeValidInitialSchedulerForReachabilityRewards(storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::BitVector const &properMaybeStates, storm::storage::BitVector const &targetStates)
std::vector< uint64_t > computeValidInitialSchedulerForUntilProbabilities(storm::storage::SparseMatrix< ValueType > const &transitionMatrix, std::vector< ValueType > const &b)
std::pair< storm::storage::BitVector, storm::storage::BitVector > performProb01Max(storm::storage::SparseMatrix< T > const &transitionMatrix, std::vector< uint_fast64_t > const &nondeterministicChoiceIndices, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
void computeSchedulerProbGreater0E(storm::storage::SparseMatrix< T > const &transitionMatrix, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, storm::storage::Scheduler< SchedulerValueType > &scheduler, boost::optional< storm::storage::BitVector > const &rowFilter)
Computes a scheduler for the ProbGreater0E-States such that in the induced system the given psiStates...
storm::storage::BitVector performProbGreater0A(storm::storage::SparseMatrix< T > const &transitionMatrix, std::vector< uint_fast64_t > const &nondeterministicChoiceIndices, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool useStepBound, uint_fast64_t maximalSteps, boost::optional< storm::storage::BitVector > const &choiceConstraint)
Computes the sets of states that have probability greater 0 of satisfying phi until psi under any pos...
void computeSchedulerProb1E(storm::storage::BitVector const &prob1EStates, storm::storage::SparseMatrix< T > const &transitionMatrix, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, storm::storage::Scheduler< SchedulerValueType > &scheduler, boost::optional< storm::storage::BitVector > const &rowFilter)
Computes a scheduler for the given prob1EStates such that in the induced system the given psiStates a...
storm::storage::BitVector performProb1A(storm::models::sparse::NondeterministicModel< T, RM > const &model, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
Computes the sets of states that have probability 1 of satisfying phi until psi under all possible re...
storm::storage::BitVector performProbGreater0E(storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool useStepBound, uint_fast64_t maximalSteps)
Computes the sets of states that have probability greater 0 of satisfying phi until psi under at leas...
storm::storage::BitVector performProb0E(storm::models::sparse::NondeterministicModel< T, RM > const &model, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
Computes the sets of states that have probability 0 of satisfying phi until psi under at least one po...
std::pair< storm::storage::BitVector, storm::storage::BitVector > performProb01Min(storm::storage::SparseMatrix< T > const &transitionMatrix, std::vector< uint_fast64_t > const &nondeterministicChoiceIndices, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
storm::storage::BitVector performProb1E(storm::storage::SparseMatrix< T > const &transitionMatrix, std::vector< uint_fast64_t > const &nondeterministicChoiceIndices, storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, boost::optional< storm::storage::BitVector > const &choiceConstraint)
Computes the sets of states that have probability 1 of satisfying phi until psi under at least one po...
bool isZero(ValueType const &a)
boost::optional< std::vector< uint64_t > > initialScheduler
boost::optional< SparseMdpEndComponentInformation< ValueType > > ecInformation
boost::optional< std::vector< ValueType > > oneStepTargetProbabilities
storm::storage::BitVector properMaybeStates