4 changed files with 198 additions and 16 deletions
			
			
		- 
					90src/storm-pars/analysis/AssumptionChecker.cpp
- 
					4src/storm-pars/analysis/AssumptionChecker.h
- 
					74src/storm/storage/expressions/ValueTypeToExpression.cpp
- 
					46src/storm/storage/expressions/ValueTypeToExpression.h
| @ -0,0 +1,74 @@ | |||
| //
 | |||
| // Created by Jip Spel on 24.09.18.
 | |||
| //
 | |||
| 
 | |||
| #include "ValueTypeToExpression.h"
 | |||
| #include "storm/utility/constants.h"
 | |||
| 
 | |||
| namespace storm { | |||
|     namespace expressions { | |||
|         template <typename ValueType> | |||
|         ValueTypeToExpression<ValueType>::ValueTypeToExpression(std::shared_ptr<ExpressionManager> manager) : manager(manager) { | |||
|             // Intentionally left empty.
 | |||
|         } | |||
| 
 | |||
|         template <typename ValueType> | |||
|         std::shared_ptr<ExpressionManager> ValueTypeToExpression<ValueType>::getManager()  { | |||
|             return manager; | |||
|         } | |||
| 
 | |||
|         template <typename ValueType> | |||
|         Expression ValueTypeToExpression<ValueType>::toExpression(ValueType function) { | |||
|             auto varsFunction = function.gatherVariables(); | |||
|             for (auto var : varsFunction) { | |||
|                 auto varsManager = manager->getVariables(); | |||
|                 bool found = find_if(varsManager.begin(), varsManager.end(), | |||
|                                      [&](auto val) -> bool { | |||
|                                          return val.getName() == var.name(); | |||
|                                      }) != varsManager.end(); | |||
| //                bool found = false;
 | |||
|                 // TODO kan dit niet anders
 | |||
|                 for (auto itr = varsManager.begin(); !found && itr != varsManager.end(); ++itr) { | |||
|                     found = (*itr).getName().compare(var.name()) == 0; | |||
|                 } | |||
| 
 | |||
|                 if (!found) { | |||
|                     manager->declareIntegerVariable(var.name()); | |||
|                 } | |||
|             } | |||
| 
 | |||
|             auto denominator = function.denominator(); | |||
|             if (!denominator.isConstant()) { | |||
|                 STORM_LOG_DEBUG("Expecting the denominator to be constant"); | |||
|             } | |||
| 
 | |||
|             storm::expressions::Expression denominatorVal = manager->integer(std::stoi(storm::utility::to_string(denominator.constantPart()))); | |||
|             storm::expressions::Expression result; | |||
|             if (function.isConstant()) { | |||
|                 result = manager->integer(std::stoi(storm::utility::to_string(function.constantPart()))); | |||
|             } else { | |||
|                 auto nominator = function.nominatorAsPolynomial().polynomialWithCoefficient(); | |||
|                 result = manager->integer(std::stoi(storm::utility::to_string(nominator.constantPart()))); | |||
|                 for (auto itr = nominator.begin(); itr != nominator.end(); ++itr) { | |||
|                     varsFunction.clear(); | |||
|                     (*itr).gatherVariables(varsFunction); | |||
|                     // TODO: beter maken
 | |||
|                     storm::expressions::Expression nominatorPartExpr = manager->integer( | |||
|                             std::stoi(storm::utility::to_string((*itr).coeff()))); | |||
|                     for (auto var : varsFunction) { | |||
|                         if (!(*itr).derivative(var).isConstant()) { | |||
|                             STORM_LOG_DEBUG("Expecting partial derivatives of nominator parts to be constant"); | |||
|                         } | |||
|                         nominatorPartExpr = nominatorPartExpr * manager->getVariable(var.name()); | |||
|                     } | |||
|                     if (varsFunction.size() >= 1) { | |||
|                         result = result + nominatorPartExpr; | |||
|                     } | |||
|                 } | |||
|                 result = result / denominatorVal; | |||
|             } | |||
|             return result; | |||
|         } | |||
|         template class ValueTypeToExpression<storm::RationalFunction>; | |||
|     } | |||
| } | |||
| @ -0,0 +1,46 @@ | |||
| // | |||
| // Created by Jip Spel on 24.09.18. | |||
| // | |||
| 
 | |||
| #ifndef STORM_VALUETYPETOEXPRESSION_H | |||
| #define STORM_VALUETYPETOEXPRESSION_H | |||
| 
 | |||
| #include "storm/storage/expressions/ExpressionManager.h" | |||
| #include "storm/storage/expressions/Expression.h" | |||
| 
 | |||
| namespace storm { | |||
|     namespace expressions { | |||
|         template<typename ValueType> | |||
|         class ValueTypeToExpression { | |||
|         public: | |||
|             /*! | |||
|              * | |||
|              * | |||
|              * @param manager The manager of the variables. | |||
|              */ | |||
|             ValueTypeToExpression(std::shared_ptr<ExpressionManager> manager); | |||
| 
 | |||
|             /*! | |||
|             * Retrieves the manager responsible for the variables of this valuation. | |||
|             * | |||
|             * @return The pointer to the manager. | |||
|             */ | |||
|             std::shared_ptr<ExpressionManager> getManager(); | |||
| 
 | |||
|             /*! | |||
|              * | |||
|              * @param function | |||
|              * @param manager | |||
|              * @return | |||
|              */ | |||
|             Expression toExpression(ValueType function); | |||
| 
 | |||
|         private: | |||
|             // The manager responsible for the variables of this valuation. | |||
|             std::shared_ptr<ExpressionManager> manager; | |||
|         }; | |||
|     } | |||
| } | |||
| 
 | |||
| 
 | |||
| #endif //STORM_VALUETYPETOEXPRESSION_H | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue