@ -64,9 +64,9 @@ public: 
		
	
		
			
					std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  toSparseMatrix ( )  { 	std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  toSparseMatrix ( )  {  
		
	
		
			
						LOG4CPLUS_INFO ( logger ,  " Creating sparse matrix for probabilistic program. " ) ; 		LOG4CPLUS_INFO ( logger ,  " Creating sparse matrix for probabilistic program. " ) ;  
		
	
		
			
				
 
		
	
		
			
						this - > buildMatrix2 < T > ( ) ;  
		
	
		
			
						this - > computeReachableStateSpace ( ) ;  
		
	
		
			
						std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  resultMatrix  =  this - > buildMatrix < T > ( ) ;  
		
	
		
			
						/ / this - > buildMatrix2 < T > ( ) ;  
		
	
		
			
						/ / this - > computeReachableStateSpace ( ) ;  
		
	
		
			
						std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  resultMatrix  =  this - > buildMatrix2  < T > ( ) ;  
		
	
		
			
				
 
		
	
		
			
						LOG4CPLUS_INFO ( logger ,  " Created sparse matrix with  "  < <  resultMatrix - > getRowCount ( )  < <  "  reachable states and  "  < <  resultMatrix - > getNonZeroEntryCount ( )  < <  "  transitions. " ) ; 		LOG4CPLUS_INFO ( logger ,  " Created sparse matrix with  "  < <  resultMatrix - > getRowCount ( )  < <  "  reachable states and  "  < <  resultMatrix - > getNonZeroEntryCount ( )  < <  "  transitions. " ) ;  
		
	
		
			
				
 
		
	
	
		
			
				
					
						
							 
					
					
						
							 
					
					
				 
				@ -236,6 +236,7 @@ private: 
		
	
		
			
									auto  stateIt  =  states - > find ( newStateId ) ; 					auto  stateIt  =  states - > find ( newStateId ) ;  
		
	
		
			
									if  ( stateIt  = =  states - > end ( ) )  { 					if  ( stateIt  = =  states - > end ( ) )  {  
		
	
		
			
										( * states ) [ newStateId ]  =  update . getLikelihoodExpression ( ) - > getValueAsDouble ( state ) ; 						( * states ) [ newStateId ]  =  update . getLikelihoodExpression ( ) - > getValueAsDouble ( state ) ;  
		
	
		
			
										this - > numberOfTransitions + + ;  
		
	
		
			
									}  else  { 					}  else  {  
		
	
		
			
										( * states ) [ newStateId ]  + =  update . getLikelihoodExpression ( ) - > getValueAsDouble ( state ) ; 						( * states ) [ newStateId ]  + =  update . getLikelihoodExpression ( ) - > getValueAsDouble ( state ) ;  
		
	
		
			
									} 						} 	 
		
	
	
		
			
				
					
						
							 
					
					
						
							 
					
					
				 
				@ -288,6 +289,7 @@ private: 
		
	
		
			
				
 
		
	
		
			
							} 			}  
		
	
		
			
				
 
		
	
		
			
							if  ( resultStates . size ( )  >  0 )  {  
		
	
		
			
								res . emplace_back ( ) ; 				res . emplace_back ( ) ;  
		
	
		
			
								std : : map < uint_fast64_t ,  double > *  states  =  & res . back ( ) ; 				std : : map < uint_fast64_t ,  double > *  states  =  & res . back ( ) ;  
		
	
		
			
				
 
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -298,6 +300,7 @@ private: 
		
	
		
			
								} 				}  
		
	
		
			
								this - > numberOfTransitions  + =  states - > size ( ) ; 				this - > numberOfTransitions  + =  states - > size ( ) ;  
		
	
		
			
							} 			}  
		
	
		
			
						}  
		
	
		
			
				
 
		
	
		
			
					} 	}  
		
	
		
			
				
 
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -315,6 +318,7 @@ private: 
		
	
		
			
					 */ 	 */  
		
	
		
			
					template < class  T > 	template < class  T >  
		
	
		
			
					std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  buildDTMCMatrix ( std : : map < uint_fast64_t ,  std : : list < std : : map < uint_fast64_t ,  double > > >  intermediate )  { 	std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  buildDTMCMatrix ( std : : map < uint_fast64_t ,  std : : list < std : : map < uint_fast64_t ,  double > > >  intermediate )  {  
		
	
		
			
						std : : cout  < <  " Building DTMC matrix "  < <  std : : endl ;  
		
	
		
			
						std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  result ( new  storm : : storage : : SparseMatrix < T > ( allStates . size ( ) ) ) ; 		std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  result ( new  storm : : storage : : SparseMatrix < T > ( allStates . size ( ) ) ) ;  
		
	
		
			
						uint_fast64_t  numberOfTransitions  =  0 ; 		uint_fast64_t  numberOfTransitions  =  0 ;  
		
	
		
			
						for  ( uint_fast64_t  state  =  0 ;  state  <  this - > allStates . size ( ) ;  state + + )  { 		for  ( uint_fast64_t  state  =  0 ;  state  <  this - > allStates . size ( ) ;  state + + )  {  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -326,19 +330,21 @@ private: 
		
	
		
			
							} 			}  
		
	
		
			
							numberOfTransitions  + =  set . size ( ) ; 			numberOfTransitions  + =  set . size ( ) ;  
		
	
		
			
						} 		}  
		
	
		
			
						std : : cout  < <  " number of Transitions:  "  < <  numberOfTransitions  < <  std : : endl ;  
		
	
		
			
						result - > initialize ( numberOfTransitions ) ; 		result - > initialize ( numberOfTransitions ) ;  
		
	
		
			
						for  ( uint_fast64_t  state  =  0 ;  state  <  this - > allStates . size ( ) ;  state + + )  { 		for  ( uint_fast64_t  state  =  0 ;  state  <  this - > allStates . size ( ) ;  state + + )  {  
		
	
		
			
							/ / if  ( intermediate [ state ] . size ( )  >  1 )  WARNING ;  
		
	
		
			
							double  factor  =  1.0  /  intermediate [ state ] . size ( ) ;  
		
	
		
			
							if  ( intermediate [ state ] . size ( )  >  1 )  {  
		
	
		
			
								std : : cout  < <  " Warning: state  "  < <  state  < <  "  has  "  < <  intermediate [ state ] . size ( )  < <  "  overlapping guards in dtmc "  < <  std : : endl ;  
		
	
		
			
							}  
		
	
		
			
							std : : map < uint_fast64_t ,  double >  map ; 			std : : map < uint_fast64_t ,  double >  map ;  
		
	
		
			
							for  ( auto  choice  :  intermediate [ state ] )  { 			for  ( auto  choice  :  intermediate [ state ] )  {  
		
	
		
			
								for  ( auto  elem  :  choice )  { 				for  ( auto  elem  :  choice )  {  
		
	
		
			
									map [ elem . first ]  + =  elem . second  *  factor  ;  
		
	
		
			
									map [ elem . first ]  + =  elem . second ;  
		
	
		
			
								} 				}  
		
	
		
			
							} 			}  
		
	
		
			
							std : : cout  < <  " adding  "  < <  map . size ( )  < <  "  elements "  < <  std : : endl ;  
		
	
		
			
							double  factor  =  1.0  /  intermediate [ state ] . size ( ) ;  
		
	
		
			
							for  ( auto  it  :  map )  { 			for  ( auto  it  :  map )  {  
		
	
		
			
								result - > addNextValue ( state ,  it . first ,  it . second ) ;  
		
	
		
			
								result - > addNextValue ( state ,  it . first ,  it . second  *  factor  ) ;  
		
	
		
			
							} 			}  
		
	
		
			
				
 
		
	
		
			
						} 		}  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -354,8 +360,9 @@ private: 
		
	
		
			
					 */ 	 */  
		
	
		
			
					template < class  T > 	template < class  T >  
		
	
		
			
					std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  buildMDPMatrix ( std : : map < uint_fast64_t ,  std : : list < std : : map < uint_fast64_t ,  double > > >  intermediate ,  uint_fast64_t  choices )  { 	std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  buildMDPMatrix ( std : : map < uint_fast64_t ,  std : : list < std : : map < uint_fast64_t ,  double > > >  intermediate ,  uint_fast64_t  choices )  {  
		
	
		
			
						std : : cout  < <  " Building MDP matrix "  < <  std : : endl ;  
		
	
		
			
						std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  result ( new  storm : : storage : : SparseMatrix < T > ( allStates . size ( ) ,  choices ) ) ; 		std : : shared_ptr < storm : : storage : : SparseMatrix < T > >  result ( new  storm : : storage : : SparseMatrix < T > ( allStates . size ( ) ,  choices ) ) ;  
		
	
		
			
						result - > initialize ( numberOfTransitions ) ;  
		
	
		
			
						result - > initialize ( this - > numberOfTransitions ) ;  
		
	
		
			
						uint_fast64_t  nextRow  =  0 ; 		uint_fast64_t  nextRow  =  0 ;  
		
	
		
			
						for  ( uint_fast64_t  state  =  0 ;  state  <  this - > allStates . size ( ) ;  state + + )  { 		for  ( uint_fast64_t  state  =  0 ;  state  <  this - > allStates . size ( ) ;  state + + )  {  
		
	
		
			
							for  ( auto  choice  :  intermediate [ state ] )  { 			for  ( auto  choice  :  intermediate [ state ] )  {  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -374,6 +381,7 @@ private: 
		
	
		
			
						this - > prepareAuxiliaryDatastructures ( ) ; 		this - > prepareAuxiliaryDatastructures ( ) ;  
		
	
		
			
						this - > allStates . clear ( ) ; 		this - > allStates . clear ( ) ;  
		
	
		
			
						this - > stateToIndexMap . clear ( ) ; 		this - > stateToIndexMap . clear ( ) ;  
		
	
		
			
						this - > numberOfTransitions  =  0 ;  
		
	
		
			
						uint_fast64_t  choices ; 		uint_fast64_t  choices ;  
		
	
		
			
				
 
		
	
		
			
						std : : map < uint_fast64_t ,  std : : list < std : : map < uint_fast64_t ,  double > > >  intermediate ; 		std : : map < uint_fast64_t ,  std : : list < std : : map < uint_fast64_t ,  double > > >  intermediate ;