Browse Source
transformer: Added functionality to also translate expected time formulas to expected rewards.
main
transformer: Added functionality to also translate expected time formulas to expected rewards.
main
5 changed files with 95 additions and 15 deletions
-
28src/storm/api/transformation.h
-
28src/storm/logic/ExpectedTimeToExpectedRewardVisitor.cpp
-
25src/storm/logic/ExpectedTimeToExpectedRewardVisitor.h
-
17src/storm/transformer/ContinuousToDiscreteTimeModelTransformer.cpp
-
6src/storm/transformer/ContinuousToDiscreteTimeModelTransformer.h
@ -0,0 +1,28 @@ |
|||||
|
#include "storm/logic/ExpectedTimeToExpectedRewardVisitor.h"
|
||||
|
#include "storm/logic/Formulas.h"
|
||||
|
|
||||
|
#include "storm/utility/macros.h"
|
||||
|
|
||||
|
#include "storm/exceptions/InvalidPropertyException.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace logic { |
||||
|
|
||||
|
ExpectedTimeToExpectedRewardVisitor::ExpectedTimeToExpectedRewardVisitor(std::string const& timeRewardModelName) : timeRewardModelName(timeRewardModelName) { |
||||
|
// Intentionally left empty
|
||||
|
} |
||||
|
|
||||
|
std::shared_ptr<Formula> ExpectedTimeToExpectedRewardVisitor::substitute(Formula const& f) const { |
||||
|
boost::any result = f.accept(*this, boost::any()); |
||||
|
return boost::any_cast<std::shared_ptr<Formula>>(result); |
||||
|
} |
||||
|
|
||||
|
boost::any ExpectedTimeToExpectedRewardVisitor::visit(TimeOperatorFormula const& f, boost::any const& data) const { |
||||
|
STORM_LOG_THROW(f.getSubformula().isEventuallyFormula(), storm::exceptions::InvalidPropertyException, "Expected eventually formula within time operator. Got " << f << " instead."); |
||||
|
std::shared_ptr<Formula> subsubformula = boost::any_cast<std::shared_ptr<Formula>>(f.getSubformula().asEventuallyFormula().getSubformula().accept(*this, data)); |
||||
|
STORM_LOG_THROW(f.getSubformula().isReachabilityTimeFormula(), storm::exceptions::InvalidPropertyException, "Expected time path formula within time operator. Got " << f << " instead."); |
||||
|
std::shared_ptr<Formula> subformula = std::make_shared<EventuallyFormula>(subsubformula, storm::logic::FormulaContext::Reward); |
||||
|
return std::static_pointer_cast<Formula>(std::make_shared<RewardOperatorFormula>(subformula, timeRewardModelName, f.getOperatorInformation())); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <map> |
||||
|
|
||||
|
#include "storm/logic/CloneVisitor.h" |
||||
|
|
||||
|
#include "storm/storage/expressions/Expression.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace logic { |
||||
|
|
||||
|
class ExpectedTimeToExpectedRewardVisitor : public CloneVisitor { |
||||
|
public: |
||||
|
ExpectedTimeToExpectedRewardVisitor(std::string const& timeRewardModelName); |
||||
|
|
||||
|
std::shared_ptr<Formula> substitute(Formula const& f) const; |
||||
|
|
||||
|
virtual boost::any visit(TimeOperatorFormula const& f, boost::any const& data) const override; |
||||
|
|
||||
|
private: |
||||
|
std::string const& timeRewardModelName; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue