36template<
typename ValueType>
38 boost::optional<SparseMdpEndComponentInformation<ValueType>>
ecInformation;
48template<
typename ValueType>
56template<
typename ValueType>
58 std::vector<ValueType>
const& b) {
60 std::vector<uint64_t> result(numberOfMaybeStates);
63 for (uint64_t state = 0; state < numberOfMaybeStates; ++state) {
67 targetStates.
set(state);
73 if (!targetStates.
full()) {
77 targetStates, validScheduler, boost::none);
79 for (uint64_t state = 0; state < numberOfMaybeStates; ++state) {
80 if (!targetStates.
get(state)) {
81 result[state] = validScheduler.
getChoice(state).getDeterministicChoice();
89template<
typename ValueType>
94 uint64_t position = 0;
95 for (uint64_t state : properMaybeStates) {
96 scheduler.get()[position] = scheduler.get()[state];
99 scheduler.get().resize(properMaybeStates.getNumberOfSetBits());
100 scheduler.get().shrink_to_fit();
104 explicitRepresentation.first = explicitRepresentation.first.getSubmatrix(
true, properMaybeStates, properMaybeStates);
107template<
typename ValueType>
112 auto& transitionMatrix = explicitRepresentation.first;
113 auto& oneStepProbabilities = explicitRepresentation.second;
118 if (doDecomposition) {
119 auto backwardTransitions = transitionMatrix.transpose(
true);
125 doDecomposition = !candidateStates.
empty();
127 if (doDecomposition) {
134 if (doDecomposition && !endComponentDecomposition.
empty()) {
136 std::vector<ValueType> subvector;
138 endComponentDecomposition, transitionMatrix, solverRequirementsData.
properMaybeStates, &targetStates,
nullptr,
nullptr,
139 explicitRepresentation.first, &subvector,
nullptr);
140 oneStepProbabilities = std::move(subvector);
143 oneStepProbabilities = explicitRepresentation.first.getConstrainedRowGroupSumVector(solverRequirementsData.
properMaybeStates, targetStates);
149template<storm::dd::DdType DdType,
typename ValueType>
158 if (dir == OptimizationDirection::Minimize) {
165 STORM_LOG_INFO(
"Preprocessing: " << statesWithProbability01.first.getNonZeroCount() <<
" states with probability 1, "
166 << statesWithProbability01.second.getNonZeroCount() <<
" with probability 0 (" << maybeStates.
getNonZeroCount()
167 <<
" states remaining).");
174 statesWithProbability01.second.template toAdd<ValueType>() +
178 if (!maybeStates.
isZero()) {
180 bool hasNoEndComponents = dir == storm::solver::OptimizationDirection::Minimize;
184 linearEquationSolverFactory.
getRequirements(env, hasNoEndComponents, hasNoEndComponents, dir);
187 bool extendMaybeStates =
false;
191 STORM_LOG_DEBUG(
"Scheduling EC elimination, because the solver requires a unique solution.");
192 extendMaybeStates =
true;
194 hasNoEndComponents =
true;
197 STORM_LOG_DEBUG(
"Scheduling valid scheduler computation, because the solver requires it.");
206 if (extendMaybeStates) {
216 conversionWatch.
start();
218 conversionWatch.
stop();
228 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation;
229 if (extendMaybeStates) {
234 conversionWatch.
start();
242 conversionWatch.
stop();
259 conversionWatch.
start();
261 conversionWatch.
stop();
274 std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>>
solver =
275 linearEquationSolverFactory.
create(env, std::move(explicitRepresentation.first));
278 solver->setHasUniqueSolution(hasNoEndComponents);
279 solver->setHasNoEndComponents(hasNoEndComponents);
285 solver->setRequirementsChecked();
286 solver->solveEquations(env, dir, x, explicitRepresentation.second);
294 if (extendMaybeStates) {
304 model.
getReachableStates(), statesWithProbability01.second.template toAdd<ValueType>()));
309template<storm::dd::DdType DdType,
typename ValueType>
313 std::unique_ptr<CheckResult> result =
314 computeUntilProbabilities(env, dir == OptimizationDirection::Minimize ? OptimizationDirection::Maximize : OptimizationDirection::Minimize, model,
316 result->asQuantitativeCheckResult<ValueType>().oneMinus();
320template<storm::dd::DdType DdType,
typename ValueType>
327template<storm::dd::DdType DdType,
typename ValueType>
331 uint_fast64_t stepBound) {
335 if (dir == OptimizationDirection::Minimize) {
345 if (!maybeStates.
isZero()) {
349 conversionWatch.
start();
351 conversionWatch.
stop();
372 conversionWatch.
start();
373 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation =
375 conversionWatch.
stop();
379 multiplier->repeatedMultiplyAndReduce(env, dir, x, &explicitRepresentation.second, stepBound);
385 return std::unique_ptr<CheckResult>(
390template<storm::dd::DdType DdType,
typename ValueType>
396 "Computing instantaneous rewards for a reward model that does not define any state-rewards. The result is trivially 0.");
408 conversionWatch.
stop();
413 multiplier->repeatedMultiplyAndReduce(env, dir, x,
nullptr, stepBound);
420template<storm::dd::DdType DdType,
typename ValueType>
425 STORM_LOG_THROW(!rewardModel.
empty(), storm::exceptions::InvalidPropertyException,
"Missing reward model for formula. Skipping formula.");
439 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation =
441 conversionWatch.
stop();
446 multiplier->repeatedMultiplyAndReduce(env, dir, x, &explicitRepresentation.second, stepBound);
453template<
typename ValueType>
458 for (uint64_t rowGroup = 0; rowGroup < transitionMatrix.
getRowGroupCount(); ++rowGroup) {
460 targetStates.
set(rowGroup);
467template<
typename ValueType>
472 std::vector<uint64_t> result(numberOfMaybeStates);
477 properMaybeStates, targetStates, validScheduler);
479 for (uint64_t state = 0; state < numberOfMaybeStates; ++state) {
480 if (!targetStates.
get(state)) {
481 result[state] = validScheduler.
getChoice(state).getDeterministicChoice();
488template<
typename ValueType>
495template<
typename ValueType>
500 auto& transitionMatrix = explicitRepresentation.first;
501 auto& rewardVector = explicitRepresentation.second;
507 for (
auto const& e : rewardVector) {
509 zeroRewardChoices.
set(index);
517 bool keepState =
false;
519 for (
auto row = transitionMatrix.getRowGroupIndices()[state], rowEnd = transitionMatrix.getRowGroupIndices()[state + 1]; row < rowEnd; ++row) {
520 if (zeroRewardChoices.
get(row)) {
527 candidateStates.
set(state,
false);
531 bool doDecomposition = !candidateStates.
empty();
534 if (doDecomposition) {
535 auto backwardTransitions = transitionMatrix.transpose(
true);
541 doDecomposition = !candidateStates.
empty();
543 if (doDecomposition) {
545 endComponentDecomposition =
551 if (doDecomposition && !endComponentDecomposition.
empty()) {
553 if (computeOneStepTargetProbabilities) {
560 endComponentDecomposition, transitionMatrix, solverRequirementsData.
properMaybeStates, computeOneStepTargetProbabilities ? &targetStates :
nullptr,
561 nullptr, &rewardVector, transitionMatrix, computeOneStepTargetProbabilities ? &solverRequirementsData.
oneStepTargetProbabilities.get() :
nullptr,
563 rewardVector = std::move(subvector);
566 if (computeOneStepTargetProbabilities) {
568 explicitRepresentation.first, solverRequirementsData.
properMaybeStates, targetStates);
575template<
typename ValueType>
578 std::vector<ValueType>
const& oneStepTargetProbabilities) {
580 if (direction == storm::OptimizationDirection::Minimize) {
589template<storm::dd::DdType DdType,
typename ValueType>
595 STORM_LOG_THROW(!rewardModel.
empty(), storm::exceptions::InvalidPropertyException,
"Missing reward model for formula. Skipping formula.");
600 if (dir == OptimizationDirection::Minimize) {
606 model, transitionMatrixBdd, targetStates,
614 <<
" target states (" << maybeStates.
getNonZeroCount() <<
" states remaining).");
626 if (!maybeStates.
isZero()) {
628 bool hasNoEndComponents = dir == storm::solver::OptimizationDirection::Maximize;
629 bool hasUniqueSolution = hasNoEndComponents;
633 linearEquationSolverFactory.
getRequirements(env, hasUniqueSolution, hasNoEndComponents, dir);
635 bool extendMaybeStates =
false;
638 STORM_LOG_DEBUG(
"Scheduling EC elimination, because the solver requires it.");
639 extendMaybeStates =
true;
641 hasUniqueSolution =
true;
645 STORM_LOG_DEBUG(
"Computing valid scheduler, because the solver requires it.");
646 extendMaybeStates =
true;
651 STORM_LOG_DEBUG(
"Computing upper bounds, because the solver requires it.");
652 extendMaybeStates =
true;
660 storm::dd::Bdd<DdType> requiredMaybeStates = extendMaybeStates ? maybeStatesWithTargetStates : maybeStates;
665 conversionWatch.
start();
667 conversionWatch.
stop();
679 .template toAdd<ValueType>();
686 conversionWatch.
start();
688 .template toAdd<uint_fast64_t>()
691 conversionWatch.
stop();
698 conversionWatch.
start();
699 std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.
toMatrixVector(
701 conversionWatch.
stop();
706 if (extendMaybeStates) {
712 "The underlying solver requires a unique solution and an initial valid scheduler. This is currently not supported for "
713 "expected reward properties.");
719 hasUniqueSolution =
true;
724 explicitRepresentation.first, solverRequirementsData.
properMaybeStates, targetStates);
729 explicitRepresentation.first, solverRequirementsData.
properMaybeStates, targetStates);
743 std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>>
solver = linearEquationSolverFactory.
create(env);
746 solver->setHasUniqueSolution(hasUniqueSolution);
747 solver->setHasNoEndComponents(hasNoEndComponents);
755 solver->setMatrix(std::move(explicitRepresentation.first));
763 solver->setRequirementsChecked();
764 solver->solveEquations(env, dir, x, explicitRepresentation.second);
772 if (extendMaybeStates) {
780 maybeStates, odd, x));
784 model.
getManager().template getAddZero<ValueType>())));
789template<storm::dd::DdType DdType,
typename ValueType>
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...
std::vector< ValueType > toVector() const
Converts the ADD to a vector.
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.
Bounds computeTotalRewardBounds(std::vector< ValueType > const &rewards)
Computes a lower and an upper bound on the expected total 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.
bool hasStateRewards() const
Retrieves whether the reward model has state rewards.
storm::dd::Add< Type, ValueType > getTotalRewardVector(storm::dd::Add< Type, ValueType > const &transitionMatrix, std::set< storm::expressions::Variable > const &columnVariables) const
Creates a vector representing the complete reward vector based on the state-, state-action- and trans...
bool empty() const
Retrieves whether the reward model is empty.
storm::dd::Add< Type, ValueType > const & getStateRewardVector() const
Retrieves the state rewards of the reward model.
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, SolutionType > > 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.
uint64_t getNumberOfSetBits() const
Returns the number of bits that are set to true in this bit vector.
void set(uint64_t index, bool value=true)
Sets the given truth value at the given index.
size_t size() const
Retrieves the number of bits this bit vector can store.
bool get(uint64_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)
void expandSolutionAfterEndComponentElimination(SolverRequirementsData< ValueType > &solverRequirementsData, std::vector< ValueType > &x)
Lifts the solution of an equation system in which end components have been eliminated back to the pro...
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...
std::vector< Type > filterVector(std::vector< Type > const &in, storm::storage::BitVector const &filter)
bool isZero(ValueType const &a)
TargetType convertNumber(SourceType const &number)
solver::OptimizationDirection OptimizationDirection
boost::optional< std::vector< uint64_t > > initialScheduler
boost::optional< SparseMdpEndComponentInformation< ValueType > > ecInformation
boost::optional< std::vector< ValueType > > oneStepTargetProbabilities
storm::storage::BitVector properMaybeStates