Added new minmax method: Vi-to-Pi, which first performs value iteration with doubles, to find a good initial policy for (potentially exact) policy iteration.
this->addOption(storm::settings::OptionBuilder(moduleName,solvingMethodOptionName,false,"Sets which min/max linear equation solving technique is preferred.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of a min/max linear equation solving technique.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(minMaxSolvingTechniques)).setDefaultValueString("topological").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,underlyingEquationSolverOptionName,true,"Sets which solver is considered for solving the underlying equation systems.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the used solver.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(linearEquationSolver)).setDefaultValueString("gmm++").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,underlyingMinMaxMethodOptionName,true,"Sets which minmax method is considered for solving the underlying minmax equation systems.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the used min max method.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(minMaxSolvingTechniques)).setDefaultValueString("value-iteration").build()).build());
STORM_LOG_INFO("Selecting 'Policy iteration' as the solution technique to guarantee exact results. If you want to override this, please explicitly specify a different method.");
method=MinMaxMethod::PolicyIteration;
}else{
STORM_LOG_WARN("The selected solution method does not guarantee exact results.");
STORM_LOG_WARN("The selected solution method "<<toString(method)<<"does not guarantee exact results.");
STORM_LOG_WARN("The selected solution method does not guarantee sound results.");
}
}
STORM_LOG_THROW(method==MinMaxMethod::ValueIteration||method==MinMaxMethod::PolicyIteration||method==MinMaxMethod::RationalSearch||method==MinMaxMethod::SoundValueIteration||method==MinMaxMethod::IntervalIteration,storm::exceptions::InvalidEnvironmentException,"This solver does not support the selected method.");
STORM_LOG_THROW(method==MinMaxMethod::ValueIteration||method==MinMaxMethod::PolicyIteration||method==MinMaxMethod::RationalSearch||method==MinMaxMethod::SoundValueIteration||method==MinMaxMethod::IntervalIteration||method==MinMaxMethod::ViToPi,storm::exceptions::InvalidEnvironmentException,"This solver does not support the selected method.");
STORM_LOG_THROW(!impreciseSolver->getRequirements(viEnv,dir).hasEnabledCriticalRequirement(),storm::exceptions::UnmetRequirementException,"The value-iteration based solver has an unmet requirement.");