Added proper treatment for both upper bound operators to counterexample generators. Added optional statistics output to SAT-based counterexample generator.
instance->addOption(storm::settings::OptionBuilder("Counterexample","mincmd","","Computes a counterexample for the given symbolic model in terms of a minimal command set.").addArgument(storm::settings::ArgumentBuilder::createStringArgument("propertyFile","The file containing the properties for which counterexamples are to be generated.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).addArgument(storm::settings::ArgumentBuilder::createStringArgument("method","Sets which technique is used to derive the counterexample. Must be either \"milp\" or \"sat\".").setDefaultValueString("sat").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(techniques)).build()).build());
instance->addOption(storm::settings::OptionBuilder("Counterexample","stats","s","Sets whether to display statistics for certain functionalities.").build());
throwstorm::exceptions::InvalidArgumentException()<<"Given probability threshold "<<probabilityThreshold<<" can not be achieved in model with maximal reachability probability of "<<maximalReachabilityProbability<<".";
throwstorm::exceptions::InvalidArgumentException()<<"Given probability threshold "<<probabilityThreshold<<" can not be "<<(strictBound?"achieved":"exceeded")<<" in model with maximal reachability probability of "<<maximalReachabilityProbability<<".";
LOG4CPLUS_ERROR(logger,"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only strict upper bounds are supported for counterexample generation.");
throwstorm::exceptions::InvalidPropertyException()<<"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only strict upper bounds are supported for counterexample generation.";
LOG4CPLUS_ERROR(logger,"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only upper bounds are supported for counterexample generation.");
throwstorm::exceptions::InvalidPropertyException()<<"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only upper bounds are supported for counterexample generation.";
std::cout<<std::endl<<"Computed minimal label set of size "<<usedLabelSet.size()<<" in "<<std::chrono::duration_cast<std::chrono::milliseconds>(endTime-startTime).count()<<"ms."<<std::endl;
throwstorm::exceptions::InvalidArgumentException()<<"Given probability threshold "<<probabilityThreshold<<" can not be achieved in model with maximal reachability probability of "<<maximalReachabilityProbability<<".";
throwstorm::exceptions::InvalidArgumentException()<<"Given probability threshold "<<probabilityThreshold<<" can not be "<<(strictBound?"achieved":"exceeded")<<" in model with maximal reachability probability of "<<maximalReachabilityProbability<<".";
std::cout<<"Checked "<<iterations<<" models in "<<std::chrono::duration_cast<std::chrono::seconds>(endTime-startTime).count()<<"s (out of which "<<zeroProbabilityCount<<" could not reach the target states). Current command set size is "<<commandSet.size()<<"."<<std::endl;
std::cout<<"Checked "<<iterations<<" models in "<<std::chrono::duration_cast<std::chrono::seconds>(totalTime).count()<<"s (out of which "<<zeroProbabilityCount<<" could not reach the target states). Current command set size is "<<commandSet.size()<<"."<<std::endl;
std::cout<<" * total time: "<<std::chrono::duration_cast<std::chrono::milliseconds>(totalTime).count()<<"ms"<<std::endl;
std::cout<<std::endl;
std::cout<<"Other:"<<std::endl;
std::cout<<" * number of models checked: "<<iterations<<std::endl;
std::cout<<" * number of models that could not reach a target state: "<<zeroProbabilityCount<<" ("<<100*static_cast<double>(zeroProbabilityCount)/iterations<<"%)"<<std::endl<<std::endl;
LOG4CPLUS_ERROR(logger,"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only strict upper bounds are supported for counterexample generation.");
throwstorm::exceptions::InvalidPropertyException()<<"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only strict upper bounds are supported for counterexample generation.";
LOG4CPLUS_ERROR(logger,"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only upper bounds are supported for counterexample generation.");
throwstorm::exceptions::InvalidPropertyException()<<"Illegal comparison operator in formula "<<probBoundFormula->toString()<<". Only upper bounds are supported for counterexample generation.";
std::cout<<std::endl<<"Computed minimal label set of size "<<labelSetIterationPair.first.size()<<" in "<<std::chrono::duration_cast<std::chrono::milliseconds>(endTime-startTime).count()<<"ms ("<<labelSetIterationPair.second<<" models tested)."<<std::endl;
std::cout<<std::endl<<"Computed minimal label set of size "<<labelSet.size()<<" in "<<std::chrono::duration_cast<std::chrono::milliseconds>(endTime-startTime).count()<<"ms."<<std::endl;