STORM_LOG_THROW(input.model.is_initialized(),storm::exceptions::InvalidArgumentException,"Portfolio engine requires a symbolic model (PRISM or JANI.");
STORM_LOG_THROW(input.model.is_initialized(),storm::exceptions::InvalidArgumentException,"Portfolio engine requires a JANI input model.");
STORM_LOG_THROW(input.model->isJaniModel(),storm::exceptions::InvalidArgumentException,"Portfolio engine requires a JANI input model.");
STORM_LOG_THROW(!properties.empty(),storm::exceptions::InvalidArgumentException,"Portfolio engine requires a property.");
STORM_LOG_WARN_COND(properties.size()==1,"Portfolio engine does not support decisions based on multiple properties. Only the first property will be considered.");
STORM_PRINT_AND_LOG("Portfolio engine picked the following settings: "<<std::endl<<"\tengine="<<mpi.engine<<"\t bisimulation="<<mpi.applyBisimulation<<"\t exact="<<(mpi.verificationValueType!=ModelProcessingInformation::ValueType::FinitePrecision)<<std::endl)
STORM_PRINT_AND_LOG("Portfolio engine picked the following settings: "<<std::endl
STORM_LOG_WARN("The model checking query does not seem to be supported for the selected engine. Storm will try to solve the query, but you will most likely get an error for at least one of the provided properties.");
STORM_LOG_WARN_COND(mpi.transformToJani||!transformToJaniForJit,"The JIT-based model builder is only available for JANI models, automatically converting the PRISM input model.");
STORM_LOG_WARN_COND(mpi.transformToJani||!transformToJaniForDdMA,"Dd-based model builder for Markov Automata is only available for JANI models, automatically converting the PRISM input model.");
STORM_LOG_WARN_COND(transformToJani||!transformToJaniForJit,"The JIT-based model builder is only available for JANI models, automatically converting the PRISM input model.");
STORM_LOG_WARN_COND(transformToJani||!transformToJaniForDdMA,"Dd-based model builder for Markov Automata is only available for JANI models, automatically converting the PRISM input model.");
this->addOption(storm::settings::OptionBuilder(moduleName,symmetryReductionOptionName,false,"Exploit symmetric structure of model.").setShortName(
symmetryReductionOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,noSymmetryReductionOptionName,false,"Do not exploit symmetric structure of model.").setShortName(
noSymmetryReductionOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,modularisationOptionName,false,"Use modularisation (not applicable for expected time).").build());
this->addOption(storm::settings::OptionBuilder(moduleName,disableDCOptionName,false,"Disable Don't Care propagation.").build());
STORM_LOG_INFO("Selecting 'sound value iteration' as the solution technique to guarantee sound results. If you want to override this, please explicitly specify a different method.");
method=MinMaxMethod::SoundValueIteration;
method=MinMaxMethod::OptimisticValueIteration;
STORM_LOG_INFO("Selecting '"<<toString(method)<<"' as the solution technique to guarantee sound results. If you want to override this, please explicitly specify a different method.");
}else{
STORM_LOG_WARN("The selected solution method does not guarantee sound results.");
STORM_LOG_INFO("Selecting '"+toString(method)+"' as the solution technique to guarantee sound results. If you want to override this, please explicitly specify a different method.");
}else{
STORM_LOG_WARN("The selected solution method does not guarantee sound results.");
xxxxxxxxxx