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
			
			
		- 
					30src/storm/api/transformation.h
- 
					28src/storm/logic/ExpectedTimeToExpectedRewardVisitor.cpp
- 
					25src/storm/logic/ExpectedTimeToExpectedRewardVisitor.h
- 
					19src/storm/transformer/ContinuousToDiscreteTimeModelTransformer.cpp
- 
					8src/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