Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DiscountedTotalRewardFormula.cpp
Go to the documentation of this file.
2
3#include <boost/any.hpp>
4#include <ostream>
5
11
12namespace storm {
13namespace logic {
15 boost::optional<RewardAccumulation> rewardAccumulation)
16 : TotalRewardFormula(rewardAccumulation), discountFactor(discountFactor) {}
17
21
23 return false;
24}
25
26std::ostream& DiscountedTotalRewardFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
27 // No parentheses necessary
28 out << "Cdiscount=";
29 out << discountFactor.toString();
31 out << "[" << getRewardAccumulation() << "]";
32 }
33 return out;
34}
35
36void DiscountedTotalRewardFormula::gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const {
37 this->getDiscountFactor().gatherVariables(usedVariables);
38}
39
43
44template<>
46 checkNoVariablesInDiscountFactor(discountFactor);
47 double value = discountFactor.evaluateAsDouble();
48 STORM_LOG_THROW(value > 0 && value < 1, storm::exceptions::InvalidPropertyException, "Discount factor must be strictly between 0 and 1.");
49 return value;
50}
51
52template<>
54 checkNoVariablesInDiscountFactor(discountFactor);
55 storm::RationalNumber value = discountFactor.evaluateAsRational();
56 STORM_LOG_THROW(value > 0 && value < 1, storm::exceptions::InvalidPropertyException, "Discount factor must be strictly between 0 and 1.");
57 return value;
58}
59
60void DiscountedTotalRewardFormula::checkNoVariablesInDiscountFactor(storm::expressions::Expression const& factor) {
61 STORM_LOG_THROW(!factor.containsVariables(), storm::exceptions::InvalidOperationException,
62 "Cannot evaluate discount factor '" << factor << "' as it contains undefined constants.");
63}
64
65boost::any DiscountedTotalRewardFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
66 return visitor.visit(*this, data);
67}
68
69} // namespace logic
70} // namespace storm
double evaluateAsDouble(Valuation const *valuation=nullptr) const
Evaluates the expression under the valuation of variables given by the valuation and returns the resu...
storm::RationalNumber evaluateAsRational() const
Evaluates the expression and returns the resulting rational number.
bool containsVariables() const
Retrieves whether the expression contains a variable.
std::string toString() const
Converts the expression into a string.
void gatherVariables(std::set< storm::expressions::Variable > &variables) const
Retrieves the set of all variables that appear in the expression.
DiscountedTotalRewardFormula(storm::expressions::Expression const discountFactor, boost::optional< RewardAccumulation > rewardAccumulation=boost::none)
storm::expressions::Expression const & getDiscountFactor() const
virtual boost::any accept(FormulaVisitor const &visitor, boost::any const &data) const override
void gatherUsedVariables(std::set< storm::expressions::Variable > &usedVariables) const override
virtual std::ostream & writeToStream(std::ostream &out, bool allowParentheses=false) const override
Writes the forumla to the given output stream.
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const =0
RewardAccumulation const & getRewardAccumulation() const
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30