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_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.");