2#include <boost/any.hpp>
16 : rewardModelNameMapping(rewardModelNameMapping) {
21 boost::any result = f.
accept(*
this, boost::any());
22 return boost::any_cast<std::shared_ptr<Formula>>(result);
26 std::vector<std::optional<TimeBound>> lowerBounds, upperBounds;
27 std::vector<TimeBoundReference> timeBoundReferences;
32 lowerBounds.emplace_back();
37 upperBounds.emplace_back();
40 if (tbr.isRewardBound()) {
41 timeBoundReferences.emplace_back(getNewName(tbr.getRewardName()), tbr.getOptionalRewardAccumulation());
43 timeBoundReferences.push_back(tbr);
47 std::vector<std::shared_ptr<Formula const>> leftSubformulas, rightSubformulas;
49 leftSubformulas.push_back(boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula(i).
accept(*
this, data)));
52 return std::static_pointer_cast<Formula>(
53 std::make_shared<BoundedUntilFormula>(leftSubformulas, rightSubformulas, lowerBounds, upperBounds, timeBoundReferences));
55 std::shared_ptr<Formula> left = boost::any_cast<std::shared_ptr<Formula>>(f.
getLeftSubformula().accept(*
this, data));
56 std::shared_ptr<Formula> right = boost::any_cast<std::shared_ptr<Formula>>(f.
getRightSubformula().accept(*
this, data));
57 return std::static_pointer_cast<Formula>(std::make_shared<BoundedUntilFormula>(left, right, lowerBounds, upperBounds, timeBoundReferences));
63 std::vector<TimeBound> bounds;
64 std::vector<TimeBoundReference> timeBoundReferences;
71 timeBoundReferences.push_back(std::move(tbr));
74 return std::static_pointer_cast<Formula>(std::make_shared<CumulativeRewardFormula>(bounds, timeBoundReferences, f.
getRewardAccumulation()));
76 return std::static_pointer_cast<Formula>(std::make_shared<CumulativeRewardFormula>(bounds, timeBoundReferences));
81 std::shared_ptr<Formula> subformula = boost::any_cast<std::shared_ptr<Formula>>(f.
getSubformula().accept(*
this, data));
83 return std::static_pointer_cast<Formula>(
86 return std::static_pointer_cast<Formula>(std::make_shared<RewardOperatorFormula>(subformula, boost::none, f.
getOperatorInformation()));
90std::string
const& RewardModelNameSubstitutionVisitor::getNewName(std::string
const& oldName)
const {
91 auto nameIt = rewardModelNameMapping.find(oldName);
92 if (nameIt == rewardModelNameMapping.end()) {
95 return nameIt->second;
101 std::vector<TimeBound> bounds;
102 std::vector<TimeBoundReference> timeBoundReferences;
109 timeBoundReferences.push_back(std::move(tbr));
112 return std::static_pointer_cast<Formula>(
115 return std::static_pointer_cast<Formula>(std::make_shared<DiscountedCumulativeRewardFormula>(f.
getDiscountFactor(), bounds, timeBoundReferences));
std::shared_ptr< Formula > substitute(Formula const &f) const
RewardModelNameSubstitutionVisitor(std::map< std::string, std::string > const &rewardModelNameMapping)
virtual boost::any visit(BoundedUntilFormula const &f, boost::any const &data) const override
std::string const & getRewardName() const
boost::optional< RewardAccumulation > const & getOptionalRewardAccumulation() const
bool isRewardBound() const