#include "storm/solver/AbstractGameSolver.h" #include "storm/settings/SettingsManager.h" #include "storm/settings/modules/NativeEquationSolverSettings.h" #include "storm/adapters/CarlAdapter.h" #include "storm/exceptions/InvalidSettingsException.h" namespace storm { namespace solver { template AbstractGameSolver::AbstractGameSolver() { // Get the settings object to customize solving. storm::settings::modules::NativeEquationSolverSettings const& settings = storm::settings::getModule(); // Get appropriate settings. maximalNumberOfIterations = settings.getMaximalIterationCount(); precision = storm::utility::convertNumber(settings.getPrecision()); relative = settings.getConvergenceCriterion() == storm::settings::modules::NativeEquationSolverSettings::ConvergenceCriterion::Relative; } template AbstractGameSolver::AbstractGameSolver(ValueType precision, uint_fast64_t maximalNumberOfIterations, bool relative) : precision(precision), maximalNumberOfIterations(maximalNumberOfIterations), relative(relative) { // Intentionally left empty. } template void AbstractGameSolver::setTrackScheduler(bool trackScheduler){ this->trackScheduler = trackScheduler; } template bool AbstractGameSolver::hasScheduler() const { return (static_cast(player1Scheduler) && static_cast(player2Scheduler)); } template bool AbstractGameSolver::isTrackSchedulerSet() const { return this->trackScheduler; } template storm::storage::TotalScheduler const& AbstractGameSolver::getPlayer1Scheduler() const { STORM_LOG_THROW(player1Scheduler, storm::exceptions::InvalidSettingsException, "Cannot retrieve scheduler, because none was generated."); return *player1Scheduler.get(); } template storm::storage::TotalScheduler const& AbstractGameSolver::getPlayer2Scheduler() const { STORM_LOG_THROW(player2Scheduler, storm::exceptions::InvalidSettingsException, "Cannot retrieve scheduler, because none was generated."); return *player2Scheduler.get(); } template ValueType AbstractGameSolver::getPrecision() const { return precision; } template bool AbstractGameSolver::getRelative() const { return relative; } template void AbstractGameSolver::setSchedulerHint(storm::storage::TotalScheduler&& player1Scheduler, storm::storage::TotalScheduler&& player2Scheduler) { player1SchedulerHint = player1Scheduler; player2SchedulerHint = player2Scheduler; } template bool AbstractGameSolver::hasSchedulerHints() const { return player1SchedulerHint.is_initialized() && player2SchedulerHint.is_initialized(); } template void AbstractGameSolver::setLowerBound(ValueType const& value) { this->lowerBound = value; } template void AbstractGameSolver::setUpperBound(ValueType const& value) { this->upperBound = value; } template class AbstractGameSolver; template class AbstractGameSolver; } }