Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DiscountedTotalRewardFormula.cpp
Go to the documentation of this file.
2#include <boost/any.hpp>
3
4#include <ostream>
5
7
11
13
14namespace storm {
15namespace logic {
17 boost::optional<RewardAccumulation> rewardAccumulation)
18 : TotalRewardFormula(rewardAccumulation), discountFactor(discountFactor) {}
19
23
25 return false;
26}
27
28std::ostream& DiscountedTotalRewardFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
29 // No parentheses necessary
30 out << "Cdiscount=";
31 out << discountFactor.toString();
33 out << "[" << getRewardAccumulation() << "]";
34 }
35 return out;
36}
37
38void DiscountedTotalRewardFormula::gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const {
39 this->getDiscountFactor().gatherVariables(usedVariables);
40}
41
45
46template<>
48 checkNoVariablesInDiscountFactor(discountFactor);
49 double value = discountFactor.evaluateAsDouble();
50 STORM_LOG_THROW(value > 0 && value < 1, storm::exceptions::InvalidPropertyException, "Discount factor must be strictly between 0 and 1.");
51 return value;
52}
53
54template<>
56 checkNoVariablesInDiscountFactor(discountFactor);
57 storm::RationalNumber value = discountFactor.evaluateAsRational();
58 STORM_LOG_THROW(value > 0 && value < 1, storm::exceptions::InvalidPropertyException, "Discount factor must be strictly between 0 and 1.");
59 return value;
60}
61
62void DiscountedTotalRewardFormula::checkNoVariablesInDiscountFactor(storm::expressions::Expression const& factor) {
63 STORM_LOG_THROW(!factor.containsVariables(), storm::exceptions::InvalidOperationException,
64 "Cannot evaluate discount factor '" << factor << "' as it contains undefined constants.");
65}
66
67boost::any DiscountedTotalRewardFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
68 return visitor.visit(*this, data);
69}
70
71} // namespace logic
72} // 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
LabParser.cpp.