| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -578,23 +578,23 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            int64_t lowestLevel = std::numeric_limits<int64_t>::max(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            int64_t highestLevel = std::numeric_limits<int64_t>::min(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            uint64_t numDestinations = 1; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (uint_fast64_t i = 0; i < iteratorList.size(); ++i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (this->getOptions().isBuildChoiceOriginsSet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    edgeIndices.insert(model.encodeAutomatonAndEdgeIndices(edgeCombination[i].first, iteratorList[i]->first)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                lowestLevel = std::min(lowestLevel, iteratorList[i]->second->getLowestAssignmentLevel()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                highestLevel = std::max(highestLevel, iteratorList[i]->second->getHighestAssignmentLevel()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                storm::jani::Edge const& edge = *iteratorList[i]->second; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                lowestLevel = std::min(lowestLevel, edge.getLowestAssignmentLevel()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                highestLevel = std::max(highestLevel, edge.getHighestAssignmentLevel()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                numDestinations *= edge.getNumberOfDestinations(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::vector<ValueType> destinationRewards; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::vector<storm::jani::EdgeDestination const*> destinations; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::vector<LocationVariableInformation const*> locationVars; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            destinations.reserve(iteratorList.size()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            locationVars.reserve(iteratorList.size()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            bool lastDestinationId = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            uint64_t destinationId = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            do { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (uint64_t destinationId = 0; destinationId < numDestinations; ++destinationId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // First assignment level
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                destinations.clear(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                locationVars.clear(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -609,9 +609,6 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    uint64_t localDestinationIndex = destinationIndex % edge.getNumberOfDestinations(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    destinations.push_back(&edge.getDestination(localDestinationIndex)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    locationVars.push_back(&this->variableInformation.locationVariables[edgeCombination[i].first]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (i == iteratorList.size() - 1 && localDestinationIndex == edge.getNumberOfDestinations() - 1) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        lastDestinationId = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    destinationIndex /= edge.getNumberOfDestinations(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    ValueType probability = this->evaluator->asRational(destinations.back()->getProbability()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (edge.hasRate()) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -631,6 +628,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!storm::utility::isZero(successorProbability)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (lowestLevel < highestLevel) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        int64_t assignmentLevel = lowestLevel; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // remaining assignment levels
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        while (assignmentLevel < highestLevel) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -645,15 +643,14 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                ++locationVarIt; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    StateType id = stateToIdCallback(state); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    distribution.add(id, successorProbability); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::utility::vector::addScaledVector(stateActionRewards, destinationRewards, successorProbability); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // Restore the old state information
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        unpackStateIntoEvaluator(state, this->variableInformation, *this->evaluator); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ++destinationId; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } while (!lastDestinationId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    StateType id = stateToIdCallback(successorState); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    distribution.add(id, successorProbability); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::utility::vector::addScaledVector(stateActionRewards, destinationRewards, successorProbability); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (uint_fast64_t i = 0; i < iteratorList.size(); ++i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                storm::jani::Edge const& edge = *iteratorList[i]->second; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -684,6 +681,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // As long as there is one feasible combination of commands, keep on expanding it.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            bool done = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            while (!done) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                distribution.clear(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                EdgeIndexSet edgeIndices; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<ValueType> stateActionRewards(rewardVariables.size(), storm::utility::zero<ValueType>()); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |