Browse Source
			
			
			sub part for parameters, working parsing for non parametric systems into a parametric system
			
				
		sub part for parameters, working parsing for non parametric systems into a parametric system
	
		
	
			
				Former-commit-id: 7714692e32
			
			
				main
			
			
		
				 9 changed files with 279 additions and 86 deletions
			
			
		- 
					3CMakeLists.txt
 - 
					4src/adapters/ExplicitModelAdapter.h
 - 
					74src/modelchecker/reachability/DirectEncoding.h
 - 
					2src/models/Dtmc.h
 - 
					86src/storage/expressions/ExpressionEvaluation.h
 - 
					142src/storm.cpp
 - 
					20src/stormParametric.cpp
 - 
					32src/stormParametric.h
 - 
					2src/utility/constants.h
 
@ -0,0 +1,74 @@ | 
				
			|||
/**  | 
				
			|||
 * @file:   DirectEncoding.h | 
				
			|||
 * @author: Sebastian Junges | 
				
			|||
 * | 
				
			|||
 * @since April 8, 2014 | 
				
			|||
 */ | 
				
			|||
 | 
				
			|||
#pragma once | 
				
			|||
 | 
				
			|||
#ifdef STORM_HAVE_CARL | 
				
			|||
#include <carl/io/WriteTosmt2Stream.h> | 
				
			|||
 | 
				
			|||
namespace storm | 
				
			|||
{ | 
				
			|||
	namespace modelchecker | 
				
			|||
	{ | 
				
			|||
		namespace reachability | 
				
			|||
		{ | 
				
			|||
			class DirectEncoding | 
				
			|||
			{ | 
				
			|||
			public: | 
				
			|||
				template<typename T> | 
				
			|||
				void encodeAsSmt2(const storm::models::Dtmc<T>& model, storm::storage::BitVector finalStates, T threshold, bool lessequal = true) | 
				
			|||
				{ | 
				
			|||
					carl::io::WriteTosmt2Stream smt2; | 
				
			|||
					uint_fast64_t nrStates = model.getNumberOfStates(); | 
				
			|||
					carl::VariablePool& vpool = carl::VariablePool::getInstance(); | 
				
			|||
					std::vector<carl::Variable> stateVars; | 
				
			|||
					for(uint_fast64_t state = 0; state < nrStates; ++state) | 
				
			|||
					{ | 
				
			|||
						carl::Variable stateVar = vpool.getFreshVariable("s_" + std::to_string(state)); | 
				
			|||
						stateVars.push_back(stateVar); | 
				
			|||
						smt2 << carl::io::smt2flag::ASSERT; | 
				
			|||
						smt2 << carl::io::smt2node::AND; | 
				
			|||
						smt2 << carl::Constraint<Polynomial>(Polynomial(stateVar), carl::CompareRelation::GE); | 
				
			|||
						smt2 << carl::Constraint<Polynomial>(Polynomial(stateVar) - Polynomial(1), carl::CompareRelation::LE); | 
				
			|||
						smt2 << carl::io::smt2node::CLOSENODE; | 
				
			|||
					} | 
				
			|||
					smt2 << carl::io::smt2flag::ASSERT; | 
				
			|||
					smt2 << carl::io::smt2node::AND; | 
				
			|||
					smt2.setAutomaticLineBreaks(true); | 
				
			|||
					Polynomial finalStateReachSum; | 
				
			|||
					for(uint_fast64_t state = 0; state < nrStates; ++state) | 
				
			|||
					{ | 
				
			|||
						if(finalStates[state]) | 
				
			|||
						{ | 
				
			|||
							smt2 << carl::Constraint<Polynomial>(Polynomial(stateVars[state]) - Polynomial(1), carl::CompareRelation::EQ);	 | 
				
			|||
							finalStateReachSum += stateVars[state]; | 
				
			|||
						} | 
				
			|||
						else | 
				
			|||
						{ | 
				
			|||
							Polynomial reachpropPol(0); | 
				
			|||
							for(auto const& transition : model.getRows(state)) | 
				
			|||
							{ | 
				
			|||
								reachpropPol += stateVars[transition.first] * transition.second; | 
				
			|||
							} | 
				
			|||
							smt2 << carl::Constraint<Polynomial>(reachpropPol - stateVars[state], carl::CompareRelation::EQ); | 
				
			|||
						} | 
				
			|||
					} | 
				
			|||
					smt2 << carl::io::smt2node::CLOSENODE; | 
				
			|||
					smt2 << carl::io::smt2flag::ASSERT; | 
				
			|||
					 | 
				
			|||
					carl::CompareRelation thresholdRelation = lessequal ? carl::CompareRelation::LE : carl::CompareRelation::GE; | 
				
			|||
					smt2 <<  carl::Constraint<Polynomial>(finalStateReachSum - threshold, thresholdRelation); | 
				
			|||
					smt2 << carl::io::smt2flag::CHECKSAT; | 
				
			|||
					std::cout << smt2; | 
				
			|||
	 | 
				
			|||
				} | 
				
			|||
			}; | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
 | 
				
			|||
#endif | 
				
			|||
@ -0,0 +1,20 @@ | 
				
			|||
#include "stormParametric.h"
 | 
				
			|||
#include "adapters/ExplicitModelAdapter.h"
 | 
				
			|||
 | 
				
			|||
namespace storm | 
				
			|||
{ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
void ParametricStormEntryPoint::createModel() | 
				
			|||
{ | 
				
			|||
    std::shared_ptr<storm::models::AbstractModel < Polynomial>> model = storm::adapters::ExplicitModelAdapter<Polynomial>::translateProgram(mProgram, mConstants); | 
				
			|||
    model->printModelInformationToStream(std::cout); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
void storm_parametric(const std::string& constants, const storm::prism::Program& program) | 
				
			|||
{ | 
				
			|||
    ParametricStormEntryPoint entry(constants, program); | 
				
			|||
    entry.createModel(); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,32 @@ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
#pragma once | 
				
			|||
#include "storage/prism/Program.h" | 
				
			|||
#include "models/AbstractModel.h" | 
				
			|||
#include "storage/parameters.h" | 
				
			|||
 | 
				
			|||
namespace storm | 
				
			|||
{ | 
				
			|||
	class ParametricStormEntryPoint | 
				
			|||
	{ | 
				
			|||
	private: | 
				
			|||
		std::string const& mConstants; | 
				
			|||
		storm::prism::Program const& mProgram; | 
				
			|||
		std::shared_ptr<storm::models::AbstractModel<Polynomial>> mModel; | 
				
			|||
	public: | 
				
			|||
		ParametricStormEntryPoint(std::string const& constants, storm::prism::Program const& program) : | 
				
			|||
		mConstants(constants), | 
				
			|||
		mProgram(program) | 
				
			|||
		{ | 
				
			|||
			 | 
				
			|||
		} | 
				
			|||
		 | 
				
			|||
		void createModel(); | 
				
			|||
		 | 
				
			|||
		virtual ~ParametricStormEntryPoint() {} | 
				
			|||
		 | 
				
			|||
	}; | 
				
			|||
	void storm_parametric(std::string const& constants, storm::prism::Program const&); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue