@ -1,4 +1,6 @@ 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# include  "storm/models/sparse/MarkovAutomaton.h" 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# include  "storm/models/sparse/Ctmc.h" 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# include  "GraphConditions.h" 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# include  "storm/utility/constants.h" 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# include  "storm/exceptions/NotImplementedException.h" 
  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -9,8 +11,8 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template  < typename  ValueType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        ConstraintCollector < ValueType > : : ConstraintCollector ( storm : : models : : sparse : : Dtmc < ValueType >  const &  dtmc )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            process ( dtmc ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        ConstraintCollector < ValueType > : : ConstraintCollector ( storm : : models : : sparse : : Model < ValueType >  const &  model )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            process ( model ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template  < typename  ValueType >  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -50,10 +52,13 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template  < typename  ValueType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        void  ConstraintCollector < ValueType > : : process ( storm : : models : : sparse : : Dtmc < ValueType >  const &  dtmc )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            for ( uint_fast64_t  state  =  0 ;  state  <  dtmc . getNumberOfStates ( ) ;  + + state )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        void  ConstraintCollector < ValueType > : : process ( storm : : models : : sparse : : Model < ValueType >  const &  model )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            for ( uint_fast64_t  action  =  0 ;  action  <  model . getTransitionMatrix ( ) . getRowCount ( ) ;  + + action )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                ValueType  sum  =  storm : : utility : : zero < ValueType > ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                for  ( auto  const &  transition  :  dtmc . getRows ( state ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                for  ( auto  transitionIt  =  model . getTransitionMatrix ( ) . begin ( action ) ;  transitionIt  ! =  model . getTransitionMatrix ( ) . end ( action ) ;  + + transitionIt )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    auto  const &  transition  =  * transitionIt ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    std : : cout  < <  transition . getValue ( )  < <  std : : endl ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    sum  + =  transition . getValue ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( ! storm : : utility : : isConstant ( transition . getValue ( ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        auto  const &  transitionVars  =  transition . getValue ( ) . gatherVariables ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -90,9 +95,17 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // Assert: sum == 1
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    wellformedConstraintSet . emplace ( ( sum . nominator ( )  -  sum . denominator ( ) ) . polynomialWithCoefficient ( ) ,  storm : : CompareRelation : : EQ ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( model . getType ( )  = =  storm : : models : : ModelType : : Ctmc )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auto  const &  exitRateVector  =  static_cast < storm : : models : : sparse : : Ctmc < ValueType >  const & > ( model ) . getExitRateVector ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                wellformedRequiresNonNegativeEntries ( exitRateVector ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  else  if  ( model . getType ( )  = =  storm : : models : : ModelType : : MarkovAutomaton )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auto  const &  exitRateVector  =  static_cast < storm : : models : : sparse : : MarkovAutomaton < ValueType >  const & > ( model ) . getExitRates ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                wellformedRequiresNonNegativeEntries ( exitRateVector ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            for ( auto  const &  rewModelEntry  :  dtmc . getRewardModels ( ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            for ( auto  const &  rewModelEntry  :  model . getRewardModels ( ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( rewModelEntry . second . hasStateRewards ( ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    wellformedRequiresNonNegativeEntries ( rewModelEntry . second . getStateRewardVector ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -117,13 +130,13 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template  < typename  ValueType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        void  ConstraintCollector < ValueType > : : operator ( ) ( storm : : models : : sparse : : Dtmc < ValueType >  const &  dtmc )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            process ( dtmc ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        void  ConstraintCollector < ValueType > : : operator ( ) ( storm : : models : : sparse : : Model < ValueType >  const &  model )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            process ( model ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template  class  ConstraintCollector < storm : : RationalFunction > ;