STORM_LOG_TRACE("Condition (I) does apply for state "<<state<<" as "<<p[state]<<" < "<<sum<<".");
if(p[state]<probSum){
STORM_LOG_TRACE("Condition (I) does apply for state "<<state<<" as "<<p[state]<<" < "<<probSum<<".");
// Condition (I) applies.
localLambda=sum-p[state];
localLambda=probSum-p[state];
ValueTypenominator=originalRewards[choice];
for(autoconst&e:transitionMatrix.getRow(choice)){
nominator+=e.getValue()*w[e.getColumn()];
@ -80,17 +82,18 @@ namespace storm {
nominator-=w[state];
localLambda=nominator/localLambda;
}else{
STORM_LOG_TRACE("Condition (I) does not apply for state "<<state<<" as "<<p[state]<<" < "<<sum<<".");
STORM_LOG_TRACE("Condition (I) does not apply for state "<<state<<std::setprecision(30)<<" as "<<probSum<<" <="<<p[state]<<".");
// Here, condition (II) automatically applies and as the resulting local lambda is 0, we
// don't need to consider it.
#ifndef NDEBUG
// Actually check condition (II).
ValueTypesum=originalRewards[choice];
ValueTyperewardSum=originalRewards[choice];
for(autoconst&e:transitionMatrix.getRow(choice)){
sum+=e.getValue()*w[e.getColumn()];
rewardSum+=e.getValue()*w[e.getColumn()];
}
STORM_LOG_WARN_COND(w[state]>=sum||storm::utility::ConstantsComparator<ValueType>().isEqual(w[state],sum),"Expected condition (II) to hold in state "<<state<<", but "<<w[state]<<" < "<<sum<<".");
STORM_LOG_WARN_COND(w[state]>=rewardSum||storm::utility::ConstantsComparator<ValueType>().isEqual(w[state],rewardSum),"Expected condition (II) to hold in state "<<state<<", but "<<w[state]<<" < "<<rewardSum<<".");
STORM_LOG_WARN_COND(storm::utility::ConstantsComparator<ValueType>().isEqual(probSum,p[state]),"Expected condition (II) to hold in state "<<state<<", but "<<probSum<<" != "<<p[state]<<".");
STORM_LOG_THROW(!ecInformation||!ecInformation.get().eliminatedEndComponents||!produceScheduler,storm::exceptions::NotSupportedException,"Producing schedulers is not supported if end-components need to be eliminated for the solver.");