|  | @ -29,7 +29,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                     // Run through the component and collect some data:
 |  |  |                     // Run through the component and collect some data:
 | 
		
	
		
			
				|  |  |                     // We create two submodels, one consisting of the timed states of the component and one consisting of the instant states of the component.
 |  |  |                     // We create two submodels, one consisting of the timed states of the component and one consisting of the instant states of the component.
 | 
		
	
		
			
				|  |  |                     // For this, we create a state index map that point from state indices of the input model to indices of the corresponding submodel of that state.
 |  |  |                     // For this, we create a state index map that point from state indices of the input model to indices of the corresponding submodel of that state.
 | 
		
	
		
			
				|  |  |                     boost::container::flat_map<uint64_t, uint64_t> toSubModelStateMapping; |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                     std::map<uint64_t, uint64_t> toSubModelStateMapping; | 
		
	
		
			
				|  |  |                     // We also obtain state and choices counts of the two submodels
 |  |  |                     // We also obtain state and choices counts of the two submodels
 | 
		
	
		
			
				|  |  |                     uint64_t numTsSubModelStates(0), numTsSubModelChoices(0); |  |  |                     uint64_t numTsSubModelStates(0), numTsSubModelChoices(0); | 
		
	
		
			
				|  |  |                     uint64_t numIsSubModelStates(0), numIsSubModelChoices(0); |  |  |                     uint64_t numIsSubModelStates(0), numIsSubModelChoices(0); | 
		
	
	
		
			
				|  | @ -38,7 +38,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                     _uniformizationRate = exitRates == nullptr ? storm::utility::one<ValueType>() : storm::utility::zero<ValueType>(); |  |  |                     _uniformizationRate = exitRates == nullptr ? storm::utility::one<ValueType>() : storm::utility::zero<ValueType>(); | 
		
	
		
			
				|  |  |                     // Now run over the MEC and collect the required data.
 |  |  |                     // Now run over the MEC and collect the required data.
 | 
		
	
		
			
				|  |  |                     for (auto const& element : _component) { |  |  |                     for (auto const& element : _component) { | 
		
	
		
			
				|  |  |                         uint64_t const& componentState = getComponentElementState(element); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                         uint64_t componentState = getComponentElementState(element); | 
		
	
		
			
				|  |  |                         if (isTimedState(componentState)) { |  |  |                         if (isTimedState(componentState)) { | 
		
	
		
			
				|  |  |                             toSubModelStateMapping.emplace(componentState, numTsSubModelStates); |  |  |                             toSubModelStateMapping.emplace(componentState, numTsSubModelStates); | 
		
	
		
			
				|  |  |                             ++numTsSubModelStates; |  |  |                             ++numTsSubModelStates; | 
		
	
	
		
			
				|  | @ -78,7 +78,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                     uint64_t currTsRow = 0; |  |  |                     uint64_t currTsRow = 0; | 
		
	
		
			
				|  |  |                     uint64_t currIsRow = 0; |  |  |                     uint64_t currIsRow = 0; | 
		
	
		
			
				|  |  |                     for (auto const& element : _component) { |  |  |                     for (auto const& element : _component) { | 
		
	
		
			
				|  |  |                         uint64_t const& componentState = getComponentElementState(element); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                         uint64_t componentState = getComponentElementState(element); | 
		
	
		
			
				|  |  |                         if (isTimedState(componentState)) { |  |  |                         if (isTimedState(componentState)) { | 
		
	
		
			
				|  |  |                             // The currently processed state is timed.
 |  |  |                             // The currently processed state is timed.
 | 
		
	
		
			
				|  |  |                             if (nondetTs()) { |  |  |                             if (nondetTs()) { | 
		
	
	
		
			
				|  | @ -142,9 +142,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                  |  |  |                  | 
		
	
		
			
				|  |  |                 template <typename ValueType, typename ComponentType, LraViTransitionsType TransitionsType> |  |  |                 template <typename ValueType, typename ComponentType, LraViTransitionsType TransitionsType> | 
		
	
		
			
				|  |  |                 ValueType LraViHelper<ValueType, ComponentType, TransitionsType>::performValueIteration(Environment const& env, ValueGetter const& stateValueGetter, ValueGetter const& actionValueGetter, std::vector<ValueType> const* exitRates, storm::solver::OptimizationDirection const* dir, std::vector<uint64_t>* choices) { |  |  |                 ValueType LraViHelper<ValueType, ComponentType, TransitionsType>::performValueIteration(Environment const& env, ValueGetter const& stateValueGetter, ValueGetter const& actionValueGetter, std::vector<ValueType> const* exitRates, storm::solver::OptimizationDirection const* dir, std::vector<uint64_t>* choices) { | 
		
	
		
			
				|  |  |                      |  |  |  | 
		
	
		
			
				|  |  |                     initializeNewValues(stateValueGetter, actionValueGetter, exitRates); |  |  |                     initializeNewValues(stateValueGetter, actionValueGetter, exitRates); | 
		
	
		
			
				|  |  |                      |  |  |  | 
		
	
		
			
				|  |  |                     ValueType precision = storm::utility::convertNumber<ValueType>(env.solver().lra().getPrecision()); |  |  |                     ValueType precision = storm::utility::convertNumber<ValueType>(env.solver().lra().getPrecision()); | 
		
	
		
			
				|  |  |                     bool relative = env.solver().lra().getRelativeTerminationCriterion(); |  |  |                     bool relative = env.solver().lra().getRelativeTerminationCriterion(); | 
		
	
		
			
				|  |  |                     boost::optional<uint64_t> maxIter; |  |  |                     boost::optional<uint64_t> maxIter; | 
		
	
	
		
			
				|  | @ -201,7 +199,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                     // Set the new choice-based values
 |  |  |                     // Set the new choice-based values
 | 
		
	
		
			
				|  |  |                     ValueType actionRewardScalingFactor = storm::utility::one<ValueType>() / _uniformizationRate; |  |  |                     ValueType actionRewardScalingFactor = storm::utility::one<ValueType>() / _uniformizationRate; | 
		
	
		
			
				|  |  |                     for (auto const& element : _component) { |  |  |                     for (auto const& element : _component) { | 
		
	
		
			
				|  |  |                         uint64_t const& componentState = getComponentElementState(element); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                         uint64_t componentState = getComponentElementState(element); | 
		
	
		
			
				|  |  |                         if (isTimedState(componentState)) { |  |  |                         if (isTimedState(componentState)) { | 
		
	
		
			
				|  |  |                             if (exitRates) { |  |  |                             if (exitRates) { | 
		
	
		
			
				|  |  |                                 actionRewardScalingFactor = (*exitRates)[componentState] / _uniformizationRate; |  |  |                                 actionRewardScalingFactor = (*exitRates)[componentState] / _uniformizationRate; | 
		
	
	
		
			
				|  | 
 |