37 std::shared_ptr<storm::logic::OperatorFormula const> ) {
38 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The specified property is not supported by this value type.");
39 return std::map<storm::storage::sparse::state_type, storm::RationalFunction>();
42template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
46 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing reward bounded values with interval models.");
61 std::vector<ValueType> x, b;
62 std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> linEqSolver;
70 std::vector<std::vector<ValueType>> cdfData;
79 uint64_t numCheckedEpochs = 0;
80 for (
auto const& epoch : epochOrder) {
85 rewardUnfolding.
setSolutionForCurrentEpoch(epochModel.analyzeSingleObjective(preciseEnv, x, b, linEqSolver, lowerBound, upperBound));
89 std::vector<ValueType> cdfEntry;
90 for (uint64_t i = 0; i < rewardUnfolding.
getEpochManager().getDimensionCount(); ++i) {
96 cdfData.push_back(std::move(cdfEntry));
105 std::map<storm::storage::sparse::state_type, ValueType> result;
113 std::vector<std::string> headers;
114 for (uint64_t i = 0; i < rewardUnfolding.
getEpochManager().getDimensionCount(); ++i) {
115 headers.push_back(rewardUnfolding.
getDimension(i).formula->toString());
117 headers.push_back(
"Result");
135template<
typename ValueType,
typename SolutionType>
138 bool computeReward) {
145 auto const uncertaintyResolutionMode = goal.getUncertaintyResolutionMode();
147 env, std::move(goal), minMaxLinearEquationSolverFactory, std::move(submatrix),
148 convert(OptimizationDirection::Maximize));
149 solver->setUncertaintyResolutionMode(uncertaintyResolutionMode);
150 solver->setHasUniqueSolution(computeReward);
151 solver->setHasNoEndComponents(
false);
154 auto req =
solver->getRequirements(env);
155 if (!computeReward) {
160 STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(), storm::exceptions::UncheckedRequirementException,
161 "Solver requirements " + req.getEnabledRequirementsAsString() +
" not checked.");
163 solver->setRequirementsChecked();
166 solver->solveEquations(env, x, b);
171template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
183 maybeStates = hint.template asExplicitModelCheckerHint<ValueType>().getMaybeStates();
186 std::vector<SolutionType>
const& resultsForNonMaybeStates = hint.template asExplicitModelCheckerHint<SolutionType>().getResultHint();
189 for (uint64_t state : nonMaybeStates) {
191 statesWithProbability1.
set(state,
true);
195 "Expected that the result hint specifies probabilities in {0,1} for non-maybe states.");
200 <<
" states remaining).");
203 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
206 statesWithProbability1 = std::move(statesWithProbability01.second);
207 maybeStates = ~(statesWithProbability0 | statesWithProbability1);
211 <<
" states remaining).");
219 bool maybeStatesNotRelevant = goal.hasRelevantValues() && goal.relevantValues().
isDisjointFrom(maybeStates);
222 if (qualitative || maybeStatesNotRelevant) {
226 if (!maybeStates.
empty()) {
231 std::vector<ValueType> b;
243 result = std::move(resultForMaybeStates);
247 bool convertToEquationSystem =
252 if (convertToEquationSystem) {
261 std::vector<SolutionType> x;
273 goal.restrictRelevantValues(maybeStates);
274 std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>>
solver =
277 solver->solveEquations(env, x, b);
287template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
292 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing all until probabilities with interval models.");
294 uint_fast64_t numberOfStates = transitionMatrix.
getRowCount();
301 if (!relevantStates.
empty()) {
304 bool convertToEquationSystem =
315 submatrix = submatrix.
getSubmatrix(
true, relevantStates, relevantStates, convertToEquationSystem);
317 if (convertToEquationSystem) {
333 for (uint64_t state : relevantStates) {
334 if (initialStates.
get(state)) {
341 goal.restrictRelevantValues(relevantStates);
342 std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>>
solver =
345 solver->solveEquations(env, x, b);
354template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
359 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing globally probabilities with interval models.");
362 std::vector<SolutionType> result =
computeUntilProbabilities(env, std::move(goal), transitionMatrix, backwardTransitions,
364 for (
auto& entry : result) {
371template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
375 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support next probabilities with interval models.");
378 std::vector<ValueType> result(transitionMatrix.
getRowCount());
383 multiplier->multiply(env, result,
nullptr, result);
388template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
391 RewardModelType
const& rewardModel, uint_fast64_t stepBound) {
393 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support cumulative rewards with interval models.");
396 std::vector<ValueType> result(transitionMatrix.
getRowCount());
399 std::vector<ValueType> totalRewardVector = rewardModel.getTotalRewardVector(transitionMatrix);
403 multiplier->repeatedMultiply(env, result, &totalRewardVector, stepBound);
409template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
412 RewardModelType
const& rewardModel, uint_fast64_t stepCount) {
414 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support instantaneous rewards with interval models.");
417 STORM_LOG_THROW(rewardModel.hasStateRewards(), storm::exceptions::InvalidPropertyException,
418 "Computing instantaneous rewards for a reward model that does not define any state-rewards. The result is trivially 0.");
421 std::vector<ValueType> result = rewardModel.getStateRewardVector();
425 multiplier->repeatedMultiply(env, result,
nullptr, stepCount);
431template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
436 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing total rewards with interval models.");
443 return computeReachabilityRewards(env, std::move(goal), transitionMatrix, backwardTransitions, rewardModel, rew0States, qualitative, hint);
452 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The specified property is not supported by this value type.");
456template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
459 RewardModelType
const& rewardModel, uint_fast64_t stepBound, ValueType discountFactor) {
461 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support discounted cumulative rewards with interval models.");
464 STORM_LOG_THROW(!rewardModel.empty(), storm::exceptions::InvalidPropertyException,
"Missing reward model for formula. Skipping formula.");
467 std::vector<ValueType> totalRewardVector = rewardModel.getTotalRewardVector(transitionMatrix);
473 multiplier->repeatedMultiplyWithFactor(env, result, &totalRewardVector, stepBound, discountFactor);
486 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"The specified property is not supported by this value type.");
490template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
496 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support discounted total rewards with interval models.");
500 "Exact solving of discounted total reward objectives is currently not supported.");
503 std::vector<ValueType> b;
506 b = rewardModel.getTotalRewardVector(transitionMatrix);
509 return std::vector<SolutionType>(std::move(x));
513template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
519 env, std::move(goal), transitionMatrix, backwardTransitions,
521 return rewardModel.getTotalRewardVector(numberOfRows, transitionMatrix, maybeStates);
523 targetStates, qualitative, [&]() {
return rewardModel.getStatesWithZeroReward(transitionMatrix); }, hint);
526template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
532 env, std::move(goal), transitionMatrix, backwardTransitions,
541template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
547 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing reachability times with interval models.");
550 env, std::move(goal), transitionMatrix, backwardTransitions,
559template<
typename ValueType,
typename SolutionType>
561 std::vector<SolutionType>
const& oneStepTargetProbabilities) {
563 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing upper reward bounds with interval models.");
573 std::vector<storm::RationalFunction>
const& ,
574 std::vector<storm::RationalFunction>
const& ) {
575 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Computing upper reward bounds is not supported for rational functions.");
578template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
583 totalStateRewardVectorGetter,
593 rew0States = targetStates;
599 maybeStates = hint.template asExplicitModelCheckerHint<ValueType>().getMaybeStates();
603 <<
" states remaining).");
605 storm::storage::BitVector trueStates(transitionMatrix.
getRowCount(),
true);
608 maybeStates = ~(rew0States | infinityStates);
611 <<
" states with reward zero (" << maybeStates.
getNumberOfSetBits() <<
" states remaining).");
617 bool maybeStatesNotRelevant = goal.hasRelevantValues() && goal.relevantValues().
isDisjointFrom(maybeStates);
620 if (qualitative || maybeStatesNotRelevant) {
625 if (!maybeStates.
empty()) {
629 storm::storage::SparseMatrix<ValueType> submatrix = transitionMatrix.
filterEntries(transitionMatrix.
getRowFilter(maybeStates));
632 std::vector<ValueType> b = totalStateRewardVectorGetter(submatrix.
getRowCount(), transitionMatrix, maybeStates);
641 storm::solver::GeneralLinearEquationSolverFactory<ValueType> linearEquationSolverFactory;
642 bool convertToEquationSystem =
647 storm::storage::SparseMatrix<ValueType> submatrix = transitionMatrix.
getSubmatrix(
true, maybeStates, maybeStates, convertToEquationSystem);
651 std::vector<ValueType> x;
659 std::vector<ValueType> b = totalStateRewardVectorGetter(submatrix.
getRowCount(), transitionMatrix, maybeStates);
661 storm::solver::LinearEquationSolverRequirements requirements = linearEquationSolverFactory.
getRequirements(env);
662 boost::optional<std::vector<ValueType>> upperRewardBounds;
672 if (convertToEquationSystem) {
678 goal.restrictRelevantValues(maybeStates);
679 std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver =
682 if (upperRewardBounds) {
683 solver->setUpperBounds(std::move(upperRewardBounds.get()));
687 solver->solveEquations(env, x, b);
697template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
698typename SparseDtmcPrctlHelper<ValueType, RewardModelType, SolutionType>::BaierTransformedModel
699SparseDtmcPrctlHelper<ValueType, RewardModelType, SolutionType>::computeBaierTransformation(Environment
const& env,
700 storm::storage::SparseMatrix<ValueType>
const& transitionMatrix,
701 storm::storage::SparseMatrix<ValueType>
const& backwardTransitions,
702 storm::storage::BitVector
const& targetStates,
703 storm::storage::BitVector
const& conditionStates,
704 boost::optional<std::vector<ValueType>>
const& stateRewards) {
706 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support baier transformation with interval models.");
708 BaierTransformedModel result;
711 std::vector<ValueType> probabilitiesToReachConditionStates =
712 computeUntilProbabilities(env, storm::solver::SolveGoal<ValueType>(), transitionMatrix, backwardTransitions,
713 storm::storage::BitVector(transitionMatrix.
getRowCount(),
true), conditionStates,
false);
715 result.beforeStates = storm::storage::BitVector(targetStates.
size(),
true);
716 uint_fast64_t state = 0;
717 uint_fast64_t beforeStateIndex = 0;
718 for (
auto const& value : probabilitiesToReachConditionStates) {
720 result.beforeStates.set(state,
false);
722 probabilitiesToReachConditionStates[beforeStateIndex] = value;
727 probabilitiesToReachConditionStates.resize(beforeStateIndex);
729 if (targetStates.
empty()) {
730 result.noTargetStates =
true;
732 }
else if (!result.beforeStates.empty()) {
738 storm::storage::BitVector allStates(targetStates.
size(),
true);
739 std::vector<uint_fast64_t> numberOfBeforeStatesUpToState = result.beforeStates.getNumberOfSetBitsBeforeIndices();
742 uint_fast64_t normalStatesOffset = result.beforeStates.getNumberOfSetBits();
746 bool addDeadlockState =
false;
747 uint_fast64_t deadlockState = normalStatesOffset + statesWithProbabilityGreater0.
getNumberOfSetBits();
750 storm::storage::SparseMatrixBuilder<ValueType> builder;
753 uint_fast64_t currentRow = 0;
754 for (
auto beforeState : result.beforeStates) {
755 if (conditionStates.
get(beforeState)) {
758 for (
auto const& successorEntry : transitionMatrix.
getRow(beforeState)) {
759 if (statesWithProbabilityGreater0.
get(successorEntry.getColumn())) {
760 builder.
addNextValue(currentRow, normalStatesOffset + numberOfNormalStatesUpToState[successorEntry.getColumn()],
761 successorEntry.getValue());
763 zeroProbability += successorEntry.getValue();
767 builder.
addNextValue(currentRow, deadlockState, zeroProbability);
771 for (
auto const& successorEntry : transitionMatrix.
getRow(beforeState)) {
772 if (result.beforeStates.get(successorEntry.getColumn())) {
773 builder.
addNextValue(currentRow, numberOfBeforeStatesUpToState[successorEntry.getColumn()],
774 successorEntry.getValue() *
775 probabilitiesToReachConditionStates[numberOfBeforeStatesUpToState[successorEntry.getColumn()]] /
776 probabilitiesToReachConditionStates[currentRow]);
784 for (uint64_t state : statesWithProbabilityGreater0) {
786 for (
auto const& successorEntry : transitionMatrix.
getRow(state)) {
787 if (statesWithProbabilityGreater0.get(successorEntry.getColumn())) {
788 builder.
addNextValue(currentRow, normalStatesOffset + numberOfNormalStatesUpToState[successorEntry.getColumn()],
789 successorEntry.getValue());
791 zeroProbability += successorEntry.getValue();
795 addDeadlockState =
true;
796 builder.
addNextValue(currentRow, deadlockState, zeroProbability);
800 if (addDeadlockState) {
805 result.transitionMatrix = builder.
build(addDeadlockState ? (deadlockState + 1) : deadlockState);
806 storm::storage::BitVector newTargetStates = targetStates % result.beforeStates;
807 newTargetStates.
resize(result.transitionMatrix.get().getRowCount());
808 for (uint64_t state : targetStates % statesWithProbabilityGreater0) {
809 newTargetStates.
set(normalStatesOffset + state,
true);
811 result.targetStates = std::move(newTargetStates);
815 std::vector<ValueType> newStateRewards(result.beforeStates.getNumberOfSetBits());
818 newStateRewards.reserve(result.transitionMatrix.get().getRowCount());
819 for (uint64_t state : statesWithProbabilityGreater0) {
820 newStateRewards.push_back(stateRewards.get()[state]);
823 if (addDeadlockState) {
826 result.stateRewards = std::move(newStateRewards);
834template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
835storm::storage::BitVector SparseDtmcPrctlHelper<ValueType, RewardModelType, SolutionType>::BaierTransformedModel::getNewRelevantStates()
const {
836 storm::storage::BitVector newRelevantStates(transitionMatrix.get().getRowCount());
837 for (uint64_t i = 0;
i < this->beforeStates.getNumberOfSetBits(); ++
i) {
838 newRelevantStates.set(i);
840 return newRelevantStates;
843template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
844storm::storage::BitVector SparseDtmcPrctlHelper<ValueType, RewardModelType, SolutionType>::BaierTransformedModel::getNewRelevantStates(
845 storm::storage::BitVector
const& oldRelevantStates)
const {
846 storm::storage::BitVector result = oldRelevantStates % this->beforeStates;
851template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
857 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing conditional probabilities with interval models.");
862 if (!conditionStates.
empty()) {
863 BaierTransformedModel transformedModel =
864 computeBaierTransformation(env, transitionMatrix, backwardTransitions, targetStates, conditionStates, boost::none);
866 if (transformedModel.noTargetStates) {
876 if (goal.hasRelevantValues()) {
877 newRelevantValues = transformedModel.getNewRelevantStates(goal.relevantValues());
879 newRelevantValues = transformedModel.getNewRelevantStates();
881 goal.setRelevantValues(std::move(newRelevantValues));
883 env, std::move(goal), newTransitionMatrix, newTransitionMatrix.
transpose(),
894template<
typename ValueType,
typename RewardModelType,
typename SolutionType>
900 STORM_LOG_THROW(
false, storm::exceptions::NotImplementedException,
"We do not support computing conditional rewards with interval models.");
905 if (!conditionStates.
empty()) {
906 BaierTransformedModel transformedModel = computeBaierTransformation(env, transitionMatrix, backwardTransitions, targetStates, conditionStates,
907 rewardModel.getTotalRewardVector(transitionMatrix));
909 if (transformedModel.noTargetStates) {
919 if (goal.hasRelevantValues()) {
920 newRelevantValues = transformedModel.getNewRelevantStates(goal.relevantValues());
922 newRelevantValues = transformedModel.getNewRelevantStates();
924 goal.setRelevantValues(std::move(newRelevantValues));
925 std::vector<ValueType> conditionalRewards =
927 transformedModel.targetStates.get(), qualitative);
SolverEnvironment & solver()
void setLinearEquationSolverPrecision(boost::optional< storm::RationalNumber > const &newPrecision, boost::optional< bool > const &relativePrecision=boost::none)
bool isForceExact() const
This class contains information that might accelerate the model checking process.
virtual bool isExplicitModelCheckerHint() const
bool solveWithDiscountedValueIteration(Environment const &env, std::optional< OptimizationDirection > dir, std::vector< ValueType > &x, std::vector< ValueType > const &b) const
std::vector< ValueType > computeUpperBounds()
Computes upper bounds on the expected rewards.
static std::vector< SolutionType > computeUntilProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool qualitative, ModelCheckerHint const &hint=ModelCheckerHint())
static std::vector< SolutionType > computeConditionalProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &targetStates, storm::storage::BitVector const &conditionStates, bool qualitative)
static std::vector< SolutionType > computeReachabilityTimes(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &targetStates, bool qualitative, ModelCheckerHint const &hint=ModelCheckerHint())
static std::vector< SolutionType > computeReachabilityRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, RewardModelType const &rewardModel, storm::storage::BitVector const &targetStates, bool qualitative, ModelCheckerHint const &hint=ModelCheckerHint())
static std::vector< SolutionType > computeDiscountedCumulativeRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepBound, ValueType discountFactor)
static std::vector< SolutionType > computeConditionalRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, RewardModelType const &rewardModel, storm::storage::BitVector const &targetStates, storm::storage::BitVector const &conditionStates, bool qualitative)
static std::vector< SolutionType > computeDiscountedTotalRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, RewardModelType const &rewardModel, bool qualitative, ValueType discountFactor, ModelCheckerHint const &hint=ModelCheckerHint())
static std::map< storm::storage::sparse::state_type, SolutionType > computeRewardBoundedValues(Environment const &env, storm::models::sparse::Dtmc< ValueType > const &model, std::shared_ptr< storm::logic::OperatorFormula const > rewardBoundedFormula)
static std::vector< SolutionType > computeAllUntilProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::BitVector const &initialStates, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
static std::vector< SolutionType > computeGloballyProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &psiStates, bool qualitative)
static std::vector< SolutionType > computeTotalRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, RewardModelType const &rewardModel, bool qualitative, ModelCheckerHint const &hint=ModelCheckerHint())
static std::vector< SolutionType > computeCumulativeRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepBound)
static std::vector< SolutionType > computeInstantaneousRewards(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, RewardModelType const &rewardModel, uint_fast64_t stepCount)
static std::vector< SolutionType > computeNextProbabilities(Environment const &env, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::BitVector const &nextStates)
bool hasBottomDimension(Epoch const &epoch) const
uint64_t getDimensionOfEpoch(Epoch const &epoch, uint64_t const &dimension) const
Epoch getStartEpoch(bool setUnknownDimsToBottom=false)
Retrieves the desired epoch that needs to be analyzed to compute the reward bounded values.
SolutionType getInitialStateResult(Epoch const &epoch)
Dimension< ValueType > const & getDimension(uint64_t dim) const
EpochManager const & getEpochManager() const
EpochModel< ValueType, SingleObjectiveMode > & setCurrentEpoch(Epoch const &epoch)
std::vector< Epoch > getEpochComputationOrder(Epoch const &startEpoch, bool stopAtComputedEpochs=false)
Computes a sequence of epochs that need to be analyzed to get a result at the start epoch.
ValueType getRequiredEpochModelPrecision(Epoch const &startEpoch, ValueType const &precision)
Returns the precision required for the analyzis of each epoch model in order to achieve the given ove...
boost::optional< ValueType > getLowerObjectiveBound(uint64_t objectiveIndex=0)
void setSolutionForCurrentEpoch(std::vector< SolutionType > &&inStateSolutions)
boost::optional< ValueType > getUpperObjectiveBound(uint64_t objectiveIndex=0)
Returns an upper/lower bound for the objective result in every state (if this bound could be computed...
void setEquationSystemFormatForEpochModel(storm::solver::LinearEquationSolverProblemFormat eqSysFormat)
This class represents a discrete-time Markov chain.
storm::storage::BitVector const & getInitialStates() const
Retrieves the initial states of the model.
LinearEquationSolverRequirements getRequirements(Environment const &env) const
Retrieves the requirements of the solver if it was created with the current settings.
virtual LinearEquationSolverProblemFormat getEquationProblemFormat(Environment const &env) const
Retrieves the problem format that the solver expects if it was created with the current settings.
SolverRequirement const & upperBounds() const
std::string getEnabledRequirementsAsString() const
Checks whether there are no critical requirements left.
bool hasEnabledCriticalRequirement() 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.
void complement()
Negates all bits in the bit vector.
bool isDisjointFrom(BitVector const &other) const
Checks whether none of the bits that are set in the current bit vector are also set in the given bit ...
std::vector< uint64_t > getNumberOfSetBitsBeforeIndices() const
Retrieves a vector that holds at position i the number of bits set before index i.
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.
void resize(uint64_t newLength, bool init=false)
Resizes the bit vector to hold the given new number of bits.
bool get(uint64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
void addNextValue(index_type row, index_type column, value_type const &value)
Sets the matrix entry at the given row and column to the given value.
SparseMatrix< value_type > build(index_type overriddenRowCount=0, index_type overriddenColumnCount=0, index_type overriddenRowGroupCount=0)
A class that holds a possibly non-square matrix in the compressed row storage format.
void convertToEquationSystem()
Transforms the matrix into an equation system.
const_rows getRow(index_type row) const
Returns an object representing the given row.
void makeRowsAbsorbing(storm::storage::BitVector const &rows, bool dropZeroEntries=false)
This function makes the given rows absorbing.
SparseMatrix getSubmatrix(bool useGroups, storm::storage::BitVector const &rowConstraint, storm::storage::BitVector const &columnConstraint, bool insertDiagonalEntries=false, storm::storage::BitVector const &makeZeroColumns=storm::storage::BitVector()) const
Creates a submatrix of the current matrix by dropping all rows and columns whose bits are not set to ...
std::vector< value_type > getConstrainedRowSumVector(storm::storage::BitVector const &rowConstraint, storm::storage::BitVector const &columnConstraint) const
Computes a vector whose i-th entry is the sum of the entries in the i-th selected row where only thos...
index_type getRowGroupCount() const
Returns the number of row groups in the matrix.
index_type getColumnCount() const
Returns the number of columns of the matrix.
void deleteDiagonalEntries(bool dropZeroEntries=false)
Sets all diagonal elements to zero.
storm::storage::SparseMatrix< value_type > transpose(bool joinGroups=false, bool keepZeros=false) const
Transposes the matrix.
index_type getRowCount() const
Returns the number of rows of the matrix.
storm::storage::BitVector getRowFilter(storm::storage::BitVector const &groupConstraint) const
Returns a bitvector representing the set of rows, with all indices set that correspond to one of the ...
SparseMatrix filterEntries(storm::storage::BitVector const &rowFilter) const
Returns a copy of this matrix that only considers entries in the selected rows.
A class that provides convenience operations to display run times.
bool updateProgress(uint64_t count)
Updates the progress to the current count and logs it (on the progress log channel) if the delay pass...
void setMaxCount(uint64_t maxCount)
Sets the maximal possible count.
void startNewMeasurement(uint64_t startCount)
Starts a new measurement, dropping all progress information collected so far.
A class that provides convenience operations to display run times.
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_STATISTICS(message)
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_THROW(cond, exception, message)
SFTBDDChecker::ValueType ValueType
void exportDataToCSVFile(std::string filepath, std::vector< std::vector< DataType > > const &data, boost::optional< std::vector< Header1Type > > const &header1=boost::none, boost::optional< std::vector< Header2Type > > const &header2=boost::none)
std::vector< SolutionType > computeRobustValuesForMaybeStates(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > &&submatrix, std::vector< ValueType > const &b, bool computeReward)
std::vector< ValueType > computeUpperRewardBounds(storm::storage::SparseMatrix< ValueType > const &transitionMatrix, std::vector< ValueType > const &rewards, std::vector< ValueType > const &oneStepTargetProbabilities)
SettingsType const & getModule()
Get module.
std::unique_ptr< storm::solver::MinMaxLinearEquationSolver< ValueType, SolutionType > > configureMinMaxLinearEquationSolver(Environment const &env, SolveGoal< ValueType, SolutionType > &&goal, storm::solver::MinMaxLinearEquationSolverFactory< ValueType, SolutionType > const &factory, MatrixType &&matrix, OptimizationDirectionSetting optimizationDirectionSetting=OptimizationDirectionSetting::Unset)
std::unique_ptr< storm::solver::LinearEquationSolver< ValueType > > configureLinearEquationSolver(Environment const &env, SolveGoal< ValueType, SolutionType > &&goal, storm::solver::LinearEquationSolverFactory< ValueType > const &factory, MatrixType &&matrix)
std::pair< storm::storage::BitVector, storm::storage::BitVector > performProb01(storm::models::sparse::DeterministicModel< T > const &model, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
Computes the sets of states that have probability 0 or 1, respectively, of satisfying phi until psi i...
storm::storage::BitVector getReachableStates(storm::storage::SparseMatrix< T > const &transitionMatrix, storm::storage::BitVector const &initialStates, storm::storage::BitVector const &constraintStates, storm::storage::BitVector const &targetStates, bool useStepBound, uint_fast64_t maximalSteps, boost::optional< storm::storage::BitVector > const &choiceFilter)
Performs a forward depth-first search through the underlying graph structure to identify the states t...
storm::storage::BitVector performProbGreater0(storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool useStepBound, uint_fast64_t maximalSteps)
Performs a backward depth-first search trough the underlying graph structure of the given model to de...
storm::storage::BitVector performProb1(storm::storage::SparseMatrix< T > const &backwardTransitions, storm::storage::BitVector const &, storm::storage::BitVector const &psiStates, storm::storage::BitVector const &statesWithProbabilityGreater0)
Computes the set of states of the given model for which all paths lead to the given set of target sta...
bool isTerminate()
Check whether the program should terminate (due to some abort signal).
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.
void setAllValues(std::vector< T > &vec, storm::storage::BitVector const &positions, T const &positiveValue=storm::utility::one< T >(), T const &negativeValue=storm::utility::zero< T >())
void selectVectorValues(std::vector< T > &vector, storm::storage::BitVector const &positions, std::vector< T > const &values)
Selects the elements from a vector at the specified positions and writes them consecutively into anot...
storm::storage::BitVector filterZero(std::vector< T > const &values)
Retrieves a bit vector containing all the indices for which the value at this position is equal to ze...
std::vector< Type > filterVector(std::vector< Type > const &in, storm::storage::BitVector const &filter)
bool isOne(ValueType const &a)
bool isZero(ValueType const &a)
TargetType convertNumber(SourceType const &number)
constexpr bool IsIntervalType
Helper to check if a type is an interval.
carl::RationalFunction< Polynomial, true > RationalFunction