|
@ -185,6 +185,12 @@ namespace storm { |
|
|
// Check if we are done
|
|
|
// Check if we are done
|
|
|
auto convergenceCheckResult = checkConvergence(relative, precision); |
|
|
auto convergenceCheckResult = checkConvergence(relative, precision); |
|
|
result = convergenceCheckResult.currentValue; |
|
|
result = convergenceCheckResult.currentValue; |
|
|
|
|
|
|
|
|
|
|
|
if(gameNondetTs() && iter > 1) { |
|
|
|
|
|
xOld() = xOldTemp; |
|
|
|
|
|
xNew() = xNewTemp; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (convergenceCheckResult.isPrecisionAchieved) { |
|
|
if (convergenceCheckResult.isPrecisionAchieved) { |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
@ -192,13 +198,11 @@ namespace storm { |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if(gameNondetTs() && iter > 1) { |
|
|
|
|
|
xOld() = xOldTemp; |
|
|
|
|
|
xNew() = xNewTemp; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// If there will be a next iteration, we have to prepare it.
|
|
|
// If there will be a next iteration, we have to prepare it.
|
|
|
|
|
|
if(!gameNondetTs()) { |
|
|
prepareNextIteration(env); |
|
|
prepareNextIteration(env); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
if (maxIter.is_initialized() && iter == maxIter.get()) { |
|
|
if (maxIter.is_initialized() && iter == maxIter.get()) { |
|
@ -211,17 +215,18 @@ namespace storm { |
|
|
|
|
|
|
|
|
if (choices) { |
|
|
if (choices) { |
|
|
// We will be doing one more iteration step and track scheduler choices this time.
|
|
|
// We will be doing one more iteration step and track scheduler choices this time.
|
|
|
|
|
|
if(!gameNondetTs()) { |
|
|
prepareNextIteration(env); |
|
|
prepareNextIteration(env); |
|
|
|
|
|
} |
|
|
performIterationStep(env, dir, choices); |
|
|
performIterationStep(env, dir, choices); |
|
|
} |
|
|
} |
|
|
std::cout << "result (" << iter << " steps):" << std::endl; |
|
|
std::cout << "result (" << iter << " steps):" << std::endl; |
|
|
for(int i = 0; i < xNew().size() ; i++ ) { |
|
|
|
|
|
std::cout << std::setprecision(4) << i << "\t: " << xNew().at(i) << "\t" << xNew().at(i) * _uniformizationRate << "\t" << std::setprecision(16) << xOld().at(i) *_uniformizationRate << std::endl; |
|
|
|
|
|
//if(i == 50) {std::cout << "only showing top 50 lines"; break; }
|
|
|
|
|
|
|
|
|
storm::utility::vector::applyPointwise<ValueType, ValueType>(xNew(), xNew(), [&iter] (ValueType const& x_i) -> ValueType { return x_i / (double)iter; }); |
|
|
for(int i = 0; i < xNew().size() ; i++ ) { |
|
|
for(int i = 0; i < xNew().size() ; i++ ) { |
|
|
std::cout << std::setprecision(4) << i << "\t: " << xNew().at(i) << "\t" << xNew().at(i) * _uniformizationRate << "\t" << std::setprecision(16) << xOld().at(i) *_uniformizationRate << std::endl; |
|
|
std::cout << std::setprecision(4) << i << "\t: " << xNew().at(i) << "\t" << xNew().at(i) * _uniformizationRate << "\t" << std::setprecision(16) << xOld().at(i) *_uniformizationRate << std::endl; |
|
|
//if(i == 50) {std::cout << "only showing top 50 lines"; break; }
|
|
|
//if(i == 50) {std::cout << "only showing top 50 lines"; break; }
|
|
|
} |
|
|
} |
|
|
|
|
|
if(gameNondetTs()) result = xOld().at(0) * _uniformizationRate; // TODO is "init" always going to be .at(0) ?
|
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|