|
@ -361,9 +361,7 @@ namespace { |
|
|
std::unique_ptr<storm::modelchecker::CheckResult> result; |
|
|
std::unique_ptr<storm::modelchecker::CheckResult> result; |
|
|
auto transitionMatrix = model->getTransitionMatrix(); |
|
|
auto transitionMatrix = model->getTransitionMatrix(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto formulas = std::move(modelFormulas.second); |
|
|
auto formulas = std::move(modelFormulas.second); |
|
|
|
|
|
|
|
|
storm::logic::GameFormula const& gameFormula = formulas[0]->asGameFormula(); |
|
|
storm::logic::GameFormula const& gameFormula = formulas[0]->asGameFormula(); |
|
|
|
|
|
|
|
|
storm::modelchecker::CheckTask<storm::logic::GameFormula, ValueType> checkTask(gameFormula); |
|
|
storm::modelchecker::CheckTask<storm::logic::GameFormula, ValueType> checkTask(gameFormula); |
|
@ -371,13 +369,12 @@ namespace { |
|
|
storm::storage::BitVector statesOfCoalition = model->computeStatesOfCoalition(gameFormula.getCoalition()); |
|
|
storm::storage::BitVector statesOfCoalition = model->computeStatesOfCoalition(gameFormula.getCoalition()); |
|
|
statesOfCoalition.complement(); |
|
|
statesOfCoalition.complement(); |
|
|
|
|
|
|
|
|
// TODO Fabian: get optimization direction
|
|
|
|
|
|
|
|
|
|
|
|
storm::storage::BitVector psiStates = checker->check(this->env(), gameFormula.getSubformula().asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula().asStateFormula())->asExplicitQualitativeCheckResult().getTruthValuesVector(); |
|
|
storm::storage::BitVector psiStates = checker->check(this->env(), gameFormula.getSubformula().asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula().asStateFormula())->asExplicitQualitativeCheckResult().getTruthValuesVector(); |
|
|
storm::storage::BitVector phiStates(model->getNumberOfStates(), true); |
|
|
storm::storage::BitVector phiStates(model->getNumberOfStates(), true); |
|
|
|
|
|
|
|
|
storm::storage::SparseMatrix<ValueType> backwardTransitions = model->getBackwardTransitions(); |
|
|
storm::storage::SparseMatrix<ValueType> backwardTransitions = model->getBackwardTransitions(); |
|
|
storm::OptimizationDirection optimizationDirection = storm::OptimizationDirection::Maximize; |
|
|
|
|
|
|
|
|
storm::OptimizationDirection optimizationDirection = gameFormula.getSubformula().asOperatorFormula().getOptimalityType(); |
|
|
auto minimizerStates = optimizationDirection == storm::OptimizationDirection::Maximize ? statesOfCoalition : ~statesOfCoalition; |
|
|
auto minimizerStates = optimizationDirection == storm::OptimizationDirection::Maximize ? statesOfCoalition : ~statesOfCoalition; |
|
|
|
|
|
|
|
|
storm::modelchecker::helper::internal::SoundGameViHelper<ValueType> viHelper(transitionMatrix, backwardTransitions, statesOfCoalition, psiStates, optimizationDirection); |
|
|
storm::modelchecker::helper::internal::SoundGameViHelper<ValueType> viHelper(transitionMatrix, backwardTransitions, statesOfCoalition, psiStates, optimizationDirection); |
|
@ -506,6 +503,8 @@ namespace { |
|
|
xL = _x1L; |
|
|
xL = _x1L; |
|
|
xU = _x1U; |
|
|
xU = _x1U; |
|
|
|
|
|
|
|
|
|
|
|
// testing x vectors
|
|
|
|
|
|
// =====================================================
|
|
|
EXPECT_NEAR(this->parseNumber("0"), xL[0], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0"), xL[0], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.333333"), xL[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.333333"), xL[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xL[2], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xL[2], this->precision()); |
|
@ -515,6 +514,7 @@ namespace { |
|
|
EXPECT_NEAR(this->parseNumber("0.666666"), xU[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.666666"), xU[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xU[2], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xU[2], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0"), xU[3], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0"), xU[3], this->precision()); |
|
|
|
|
|
// =====================================================
|
|
|
|
|
|
|
|
|
// perform second iteration step
|
|
|
// perform second iteration step
|
|
|
reducedMinimizerActions = {storm::storage::BitVector(transitionMatrix.getRowCount(), true)}; |
|
|
reducedMinimizerActions = {storm::storage::BitVector(transitionMatrix.getRowCount(), true)}; |
|
@ -616,6 +616,8 @@ namespace { |
|
|
xL = _x2L; |
|
|
xL = _x2L; |
|
|
xU = _x2U; |
|
|
xU = _x2U; |
|
|
|
|
|
|
|
|
|
|
|
// testing x vectors
|
|
|
|
|
|
// =====================================================
|
|
|
EXPECT_NEAR(this->parseNumber("0.333333"), xL[0], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.333333"), xL[0], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.444444"), xL[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.444444"), xL[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xL[2], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xL[2], this->precision()); |
|
@ -625,6 +627,7 @@ namespace { |
|
|
EXPECT_NEAR(this->parseNumber("0.555555"), xU[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0.555555"), xU[1], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xU[2], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("1"), xU[2], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0"), xU[3], this->precision()); |
|
|
EXPECT_NEAR(this->parseNumber("0"), xU[3], this->precision()); |
|
|
|
|
|
// =====================================================
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|