| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -10,8 +10,12 @@ namespace tempest { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // Intentionally left empty.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType, typename IndexType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        storm::storage::PreScheduler<ValueType> PreShield<ValueType, IndexType>::construct() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if constexpr (std::is_same_v<ValueType, storm::RationalFunction>) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "todo"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (this->getOptimizationDirection() == storm::OptimizationDirection::Minimize) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if(this->shieldingExpression->isRelative()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return constructWithCompareType<storm::utility::ElementLessEqual<ValueType>, true>(); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -38,7 +42,7 @@ namespace tempest { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for(uint state = 0; state < this->rowGroupIndices.size() - 1; state++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                uint rowGroupSize = this->rowGroupIndices[state + 1] - this->rowGroupIndices[state]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if(this->relevantStates.get(state)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if(true){ //if(this->relevantStates.get(state)) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::storage::PreSchedulerChoice<ValueType> enabledChoices; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    ValueType optProbability; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if(std::is_same<Compare, storm::utility::ElementGreaterEqual<ValueType>>::value) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -47,7 +51,7 @@ namespace tempest { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        optProbability = *std::min_element(choice_it, choice_it + rowGroupSize); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if(!relative && !choiceFilter(optProbability, optProbability, this->shieldingExpression->getValue())) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        STORM_LOG_WARN("No shielding action possible with absolute comparison for state with index " << state); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        //STORM_LOG_WARN("No shielding action possible with absolute comparison for state with index " << state);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        shield.setChoice(storm::storage::PreSchedulerChoice<ValueType>(), state, 0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        choice_it += rowGroupSize; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        continue; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -65,27 +69,38 @@ namespace tempest { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            preScheduler = std::make_shared<storm::storage::PreScheduler<ValueType>>(shield); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return shield; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType, typename IndexType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void PreShield<ValueType, IndexType>::printToStream(std::ostream& out, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					           this->construct().printToStream(out, this->shieldingExpression, model); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        std::shared_ptr<storm::storage::PreScheduler<ValueType>> PreShield<ValueType, IndexType>::getScheduler() const { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return preScheduler; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType, typename IndexType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        bool PreShield<ValueType, IndexType>::isPreShield() const { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType, typename IndexType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void PreShield<ValueType, IndexType>::printJsonToStream(std::ostream& out, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this->construct().printJsonToStream(out, model); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            preScheduler->printJsonToStream(out, model); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType, typename IndexType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void PreShield<ValueType, IndexType>::printToStream(std::ostream& out, std::shared_ptr<storm::models::sparse::Model<ValueType>> const& model) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            preScheduler->printToStream(out, this->shieldingExpression, model); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // Explicitly instantiate appropriate classes
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template class PreShield<double, typename storm::storage::SparseMatrix<double>::index_type>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#ifdef STORM_HAVE_CARL
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template class PreShield<storm::RationalNumber, typename storm::storage::SparseMatrix<storm::RationalNumber>::index_type>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //template class PreShield<storm::RationalFunction, typename storm::storage::SparseMatrix<storm::RationalFunction>::index_type>;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template class PreShield<storm::RationalFunction, typename storm::storage::SparseMatrix<storm::RationalNumber>::index_type>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#endif
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
										
									
								
							 
xxxxxxxxxx