STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
solverFactory->setRequirementsChecked(true);
solverFactory->setRequirementsChecked(true);
}
}
@ -191,11 +191,11 @@ namespace storm {
// The solution of the min-max equation system will always be unique (assuming graph-preserving instantiations).
// The solution of the min-max equation system will always be unique (assuming graph-preserving instantiations).
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(linearEquationSolverFactory.getRequirements(env).empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement of the linear equation solver could not be matched.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
// Check whether we have the right input format for the solver.
// Check whether we have the right input format for the solver.
STORM_LOG_THROW(linearEquationSolverFactory.getEquationProblemFormat(env)==storm::solver::LinearEquationSolverProblemFormat::EquationSystem,storm::exceptions::FormatUnsupportedBySolverException,"The selected solver does not support the required format.");
STORM_LOG_THROW(linearEquationSolverFactory.getEquationProblemFormat(env)==storm::solver::LinearEquationSolverProblemFormat::EquationSystem,storm::exceptions::FormatUnsupportedBySolverException,"The selected solver does not support the required format.");
STORM_LOG_THROW(linearEquationSolverFactory.getRequirements(env).empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement of the linear equation solver could not be matched.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
// Check whether we have the right input format for the solver.
// Check whether we have the right input format for the solver.
STORM_LOG_THROW(linearEquationSolverFactory.getEquationProblemFormat(env)==storm::solver::LinearEquationSolverProblemFormat::EquationSystem,storm::exceptions::FormatUnsupportedBySolverException,"The selected solver does not support the required format.");
STORM_LOG_THROW(linearEquationSolverFactory.getEquationProblemFormat(env)==storm::solver::LinearEquationSolverProblemFormat::EquationSystem,storm::exceptions::FormatUnsupportedBySolverException,"The selected solver does not support the required format.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement was not checked.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement was not checked.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement of the MinMaxSolver was not met.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement was not checked.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
solver->setRequirementsChecked(true);
solver->setRequirementsChecked(true);
// Use the (0...0) vector as initial guess for the solution.
// Use the (0...0) vector as initial guess for the solution.
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement of the LinearEquationSolver was not met.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement of the linear equation solver could not be matched.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
// Check whether we need to create an equation system.
// Check whether we need to create an equation system.
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement of the linear equation solver could not be matched.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
// Check whether we need to create an equation system.
// Check whether we need to create an equation system.
STORM_LOG_DEBUG("Scheduling valid scheduler computation, because the solver requires it.");
STORM_LOG_DEBUG("Scheduling valid scheduler computation, because the solver requires it.");
clearedRequirements.clearValidInitialScheduler();
clearedRequirements.clearValidInitialScheduler();
}
}
clearedRequirements.clearBounds();
clearedRequirements.clearBounds();
STORM_LOG_THROW(clearedRequirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!clearedRequirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+clearedRequirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_DEBUG("Computing valid scheduler, because the solver requires it.");
STORM_LOG_DEBUG("Computing valid scheduler, because the solver requires it.");
extendMaybeStates=true;
extendMaybeStates=true;
clearedRequirements.clearValidInitialScheduler();
clearedRequirements.clearValidInitialScheduler();
}
}
clearedRequirements.clearLowerBounds();
clearedRequirements.clearLowerBounds();
if(clearedRequirements.requiresUpperBounds()){
if(clearedRequirements.upperBounds()){
STORM_LOG_DEBUG("Computing upper bounds, because the solver requires it.");
STORM_LOG_DEBUG("Computing upper bounds, because the solver requires it.");
extendMaybeStates=true;
extendMaybeStates=true;
clearedRequirements.clearUpperBounds();
clearedRequirements.clearUpperBounds();
}
}
STORM_LOG_THROW(clearedRequirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!clearedRequirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+clearedRequirements.getEnabledRequirementsAsString()+" not checked.");
}
}
// Compute the set of maybe states that we are required to keep in the translation to explicit.
// Compute the set of maybe states that we are required to keep in the translation to explicit.
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement was not checked.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
}
}
// Prepare the right hand side of the equation system
// Prepare the right hand side of the equation system
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"There are unchecked requirements of the solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
// If necessary, convert the matrix from the fixpoint notation to the form needed for the equation system.
// If necessary, convert the matrix from the fixpoint notation to the form needed for the equation system.
STORM_LOG_THROW(req.empty(),storm::exceptions::UncheckedRequirementException,"At least one requirement was not checked.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
// If the solver still requires no end-components, we have to eliminate them later.
// If the solver still requires no end-components, we have to eliminate them later.
if(requirements.requiresNoEndComponents()){
if(requirements.noEndComponents()){
STORM_LOG_ASSERT(!result.hasUniqueSolution(),"The solver requires to eliminate the end components although the solution is already assumed to be unique.");
STORM_LOG_ASSERT(!result.hasUniqueSolution(),"The solver requires to eliminate the end components although the solution is already assumed to be unique.");
STORM_LOG_DEBUG("Scheduling EC elimination, because the solver requires it.");
STORM_LOG_DEBUG("Scheduling EC elimination, because the solver requires it.");
result.eliminateEndComponents=true;
result.eliminateEndComponents=true;
@ -450,7 +449,7 @@ namespace storm {
}
}
// If the solver requires an initial scheduler, compute one now.
// If the solver requires an initial scheduler, compute one now.
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"There are unchecked requirements of the solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Cannot establish requirements for solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Could not establish requirements of solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(requirements.empty(),storm::exceptions::UncheckedRequirementException,"Could not establish requirements of solver.");
STORM_LOG_THROW(!requirements.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+requirements.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UnmetRequirementException,"Requirements of underlying solver not met.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");
STORM_LOG_THROW(req.empty(),storm::exceptions::UnmetRequirementException,"Requirements of underlying solver not met.");
STORM_LOG_THROW(!req.hasEnabledCriticalRequirement(),storm::exceptions::UncheckedRequirementException,"Solver requirements "+req.getEnabledRequirementsAsString()+" not checked.");