@ -117,8 +117,8 @@ void printUsage() { 
			
		
	
		
			
				
						double  userTime  =  uLargeInteger . QuadPart  /  10000.0 ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						std : : cout  < <  " CPU Time:  "  < <  std : : endl ;  
			
		
	
		
			
				
						std : : cout  < <  " \t Kernel Time:  "  < <  std : : setprecision ( 3 )  < <  kernelTime  < <  std : : endl ;  
			
		
	
		
			
				
						std : : cout  < <  " \t User Time:  "  < <  std : : setprecision ( 3 )  < <  userTime  < <  std : : endl ;  
			
		
	
		
			
				
						std : : cout  < <  " \t Kernel Time:  "  < <  std : : setprecision ( 5 )  < <  kernelTime  < <  " ms "   < <  std : : endl ;  
			
		
	
		
			
				
						std : : cout  < <  " \t User Time:  "  < <  std : : setprecision ( 5 )  < <  userTime  < <  " ms "   < <  std : : endl ;  
			
		
	
		
			
				
					# endif 
  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -451,6 +451,9 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
								stormSetAlarm ( timeout ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					         
			
		
	
		
			
				
							// Execution Time measurement, start
  
			
		
	
		
			
				
							std : : chrono : : high_resolution_clock : : time_point  executionStart  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// Now, the settings are received and the specified model is parsed. The actual actions taken depend on whether
  
			
		
	
		
			
				
					        // the model was provided in explicit or symbolic format.
  
			
		
	
		
			
				
							if  ( s - > isSet ( " explicit " ) )  {  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -468,6 +471,10 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								std : : shared_ptr < storm : : models : : AbstractModel < double > >  model  =  storm : : parser : : AutoParser : : parseModel ( chosenTransitionSystemFile ,  chosenLabelingFile ,  chosenStateRewardsFile ,  chosenTransitionRewardsFile ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								// Model Parsing Time Measurement, End
  
			
		
	
		
			
				
								std : : chrono : : high_resolution_clock : : time_point  parsingEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
								std : : cout  < <  " Parsing the given model took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( parsingEnd  -  executionStart ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if  ( s - > isSet ( " exportdot " ) )  {  
			
		
	
		
			
				
					                std : : ofstream  outputFileStream ;  
			
		
	
		
			
				
					                outputFileStream . open ( s - > getOptionByLongName ( " exportdot " ) . getArgument ( 0 ) . getValueAsString ( ) ,  std : : ofstream : : out ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -475,11 +482,16 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
					                outputFileStream . close ( ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					             
			
		
	
		
			
				
								//Should there be a counterexample generated in case the formula is not satisfied?
  
			
		
	
		
			
				
								//  Should there be a counterexample generated in case the formula is not satisfied?
  
			
		
	
		
			
				
								if ( s - > isSet ( " counterexample " ) )  {  
			
		
	
		
			
				
									// Counterexample Time Measurement, Start
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  counterexampleStart  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									generateCounterExample ( model ) ;  
			
		
	
		
			
				
								 
			
		
	
		
			
				
									// Counterexample Time Measurement, End
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  counterexampleEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
									std : : cout  < <  " Generating the counterexample took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( counterexampleEnd  -  counterexampleStart ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
								}  else  {  
			
		
	
		
			
				
									// Determine which engine is to be used to choose the right model checker.
  
			
		
	
		
			
				
									LOG4CPLUS_DEBUG ( logger ,  s - > getOptionByLongName ( " matrixLibrary " ) . getArgument ( 0 ) . getValueAsString ( ) ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -488,6 +500,9 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
									storm : : modelchecker : : prctl : : AbstractModelChecker < double > *  modelchecker  =  nullptr ;  
			
		
	
		
			
				
									model - > printModelInformationToStream ( std : : cout ) ;  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
									// Modelchecking Time Measurement, Start
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  modelcheckingStart  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									switch  ( model - > getType ( ) )  {  
			
		
	
		
			
				
									case  storm : : models : : DTMC :  
			
		
	
		
			
				
										LOG4CPLUS_INFO ( logger ,  " Model is a DTMC. " ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -529,8 +544,15 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
									if  ( modelchecker  ! =  nullptr )  {  
			
		
	
		
			
				
										delete  modelchecker ;  
			
		
	
		
			
				
									}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									// Modelchecking Time Measurement, End
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  modelcheckingEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
									std : : cout  < <  " Running the ModelChecker took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( modelcheckingEnd  -  modelcheckingStart ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
								}  
			
		
	
		
			
				
							}  else  if  ( s - > isSet ( " symbolic " ) )  {  
			
		
	
		
			
				
								// Program Translation Time Measurement, Start
  
			
		
	
		
			
				
								std : : chrono : : high_resolution_clock : : time_point  programTranslationStart  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // First, we build the model using the given symbolic model description and constant definitions.
  
			
		
	
		
			
				
					            std : : string  const &  programFile  =  s - > getOptionByLongName ( " symbolic " ) . getArgument ( 0 ) . getValueAsString ( ) ;  
			
		
	
		
			
				
					            std : : string  const &  constants  =  s - > getOptionByLongName ( " constants " ) . getArgument ( 0 ) . getValueAsString ( ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -538,6 +560,10 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
					            std : : shared_ptr < storm : : models : : AbstractModel < double > >  model  =  storm : : adapters : : ExplicitModelAdapter < double > : : translateProgram ( program ,  constants ) ;  
			
		
	
		
			
				
					            model - > printModelInformationToStream ( std : : cout ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
								// Program Translation Time Measurement, End
  
			
		
	
		
			
				
								std : : chrono : : high_resolution_clock : : time_point  programTranslationEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
								std : : cout  < <  " Parsing and translating the Symbolic Input took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( programTranslationEnd  -  programTranslationStart ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if  ( s - > isSet ( " mincmd " ) )  {  
			
		
	
		
			
				
					                if  ( model - > getType ( )  ! =  storm : : models : : MDP )  {  
			
		
	
		
			
				
					                    LOG4CPLUS_ERROR ( logger ,  " Minimal command counterexample generation is only supported for models of type MDP. " ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -549,6 +575,9 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
					                // Determine whether we are required to use the MILP-version or the SAT-version.
  
			
		
	
		
			
				
					                bool  useMILP  =  s - > getOptionByLongName ( " mincmd " ) . getArgumentByName ( " method " ) . getValueAsString ( )  = =  " milp " ;  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
									// MinCMD Time Measurement, Start
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  minCmdStart  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                // Now parse the property file and receive the list of parsed formulas.
  
			
		
	
		
			
				
					                std : : string  const &  propertyFile  =  s - > getOptionByLongName ( " mincmd " ) . getArgumentByName ( " propertyFile " ) . getValueAsString ( ) ;  
			
		
	
		
			
				
					                std : : list < storm : : property : : prctl : : AbstractPrctlFormula < double > * >  formulaList  =  storm : : parser : : PrctlFileParser ( propertyFile ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -564,6 +593,10 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
					                    // Once we are done with the formula, delete it.
  
			
		
	
		
			
				
					                    delete  formulaPtr ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									// MinCMD Time Measurement, End
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  minCmdEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
									std : : cout  < <  " Minimal command Counterexample generation took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( minCmdStart  -  minCmdEnd ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
					            }  else  if  ( s - > isSet ( " prctl " ) )  {  
			
		
	
		
			
				
					                // Determine which engine is to be used to choose the right model checker.
  
			
		
	
		
			
				
									LOG4CPLUS_DEBUG ( logger ,  s - > getOptionByLongName ( " matrixLibrary " ) . getArgument ( 0 ) . getValueAsString ( ) ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -571,6 +604,9 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
									// Depending on the model type, the appropriate model checking procedure is chosen.
  
			
		
	
		
			
				
									storm : : modelchecker : : prctl : : AbstractModelChecker < double > *  modelchecker  =  nullptr ;  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
									// Modelchecking Time Measurement, Start
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  modelcheckingStart  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									switch  ( model - > getType ( ) )  {  
			
		
	
		
			
				
					                    case  storm : : models : : DTMC :  
			
		
	
		
			
				
					                        LOG4CPLUS_INFO ( logger ,  " Model is a DTMC. " ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -602,8 +638,16 @@ int main(const int argc, const char* argv[]) { 
			
		
	
		
			
				
									if  ( modelchecker  ! =  nullptr )  {  
			
		
	
		
			
				
										delete  modelchecker ;  
			
		
	
		
			
				
									}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									// Modelchecking Time Measurement, End
  
			
		
	
		
			
				
									std : : chrono : : high_resolution_clock : : time_point  modelcheckingEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
									std : : cout  < <  " Running the PRCTL ModelChecker took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( modelcheckingEnd  -  modelcheckingStart ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// Execution Time Measurement, End
  
			
		
	
		
			
				
							std : : chrono : : high_resolution_clock : : time_point  executionEnd  =  std : : chrono : : high_resolution_clock : : now ( ) ;  
			
		
	
		
			
				
							std : : cout  < <  " Complete execution took  "  < <  std : : chrono : : duration_cast < std : : chrono : : milliseconds > ( executionEnd  -  executionStart ) . count ( )  < <  "  milliseconds. "  < <  std : : endl ;  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        // Perform clean-up and terminate.
  
			
		
	
		
			
				
							cleanUp ( ) ;