| 
					
					
						
							
						
					
					
				 | 
				@ -29,26 +29,10 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				            this->formulas = formulas; | 
				 | 
				 | 
				            this->formulas = formulas; | 
			
		
		
	
		
			
				 | 
				 | 
				            this->validate = validate; | 
				 | 
				 | 
				            this->validate = validate; | 
			
		
		
	
		
			
				 | 
				 | 
				            this->precision = precision; | 
				 | 
				 | 
				            this->precision = precision; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            if (numberOfSamples > 0) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                // sampling
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                if (model->isOfType(storm::models::ModelType::Dtmc)) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    this->resultCheckOnSamples = std::map<typename utility::parametric::VariableType<ValueType>::type, std::pair<bool, bool>>( | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            checkOnSamples(model->as<storm::models::sparse::Dtmc<ValueType>>(), numberOfSamples)); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } else if (model->isOfType(storm::models::ModelType::Mdp)) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    this->resultCheckOnSamples = std::map<typename utility::parametric::VariableType<ValueType>::type, std::pair<bool, bool>>( | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            checkOnSamples(model->as<storm::models::sparse::Mdp<ValueType>>(), numberOfSamples)); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                checkSamples= true; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            } else { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                checkSamples= false; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            std::shared_ptr<storm::models::sparse::Model<ValueType>> sparseModel = model->as<storm::models::sparse::Model<ValueType>>(); | 
				 | 
				 | 
				            std::shared_ptr<storm::models::sparse::Model<ValueType>> sparseModel = model->as<storm::models::sparse::Model<ValueType>>(); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            if (regions.size() == 1) { | 
				 | 
				 | 
				            if (regions.size() == 1) { | 
			
		
		
	
		
			
				 | 
				 | 
				                region = *(regions.begin()); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                this->region = *(regions.begin()); | 
			
		
		
	
		
			
				 | 
				 | 
				            } else { | 
				 | 
				 | 
				            } else { | 
			
		
		
	
		
			
				 | 
				 | 
				                assert (regions.size() == 0); | 
				 | 
				 | 
				                assert (regions.size() == 0); | 
			
		
		
	
		
			
				 | 
				 | 
				                typename storm::storage::ParameterRegion<ValueType>::Valuation lowerBoundaries; | 
				 | 
				 | 
				                typename storm::storage::ParameterRegion<ValueType>::Valuation lowerBoundaries; | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -61,7 +45,22 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                    lowerBoundaries.insert(std::make_pair(var, lb)); | 
				 | 
				 | 
				                    lowerBoundaries.insert(std::make_pair(var, lb)); | 
			
		
		
	
		
			
				 | 
				 | 
				                    upperBoundaries.insert(std::make_pair(var, ub)); | 
				 | 
				 | 
				                    upperBoundaries.insert(std::make_pair(var, ub)); | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				                } | 
			
		
		
	
		
			
				 | 
				 | 
				                region =  storm::storage::ParameterRegion<ValueType>(std::move(lowerBoundaries), std::move(upperBoundaries)); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                this->region =  storm::storage::ParameterRegion<ValueType>(std::move(lowerBoundaries), std::move(upperBoundaries)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            if (numberOfSamples > 0) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                // sampling
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                if (model->isOfType(storm::models::ModelType::Dtmc)) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    this->resultCheckOnSamples = std::map<typename utility::parametric::VariableType<ValueType>::type, std::pair<bool, bool>>( | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            checkOnSamples(model->as<storm::models::sparse::Dtmc<ValueType>>(), numberOfSamples)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                } else if (model->isOfType(storm::models::ModelType::Mdp)) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    this->resultCheckOnSamples = std::map<typename utility::parametric::VariableType<ValueType>::type, std::pair<bool, bool>>( | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            checkOnSamples(model->as<storm::models::sparse::Mdp<ValueType>>(), numberOfSamples)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                checkSamples= true; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } else { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                checkSamples= false; | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            this->extender = new storm::analysis::OrderExtender<ValueType>(sparseModel); | 
				 | 
				 | 
				            this->extender = new storm::analysis::OrderExtender<ValueType>(sparseModel); | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -561,17 +560,20 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (auto itr2 = variables.begin(); itr2 != variables.end(); ++itr2) { | 
				 | 
				 | 
				                    for (auto itr2 = variables.begin(); itr2 != variables.end(); ++itr2) { | 
			
		
		
	
		
			
				 | 
				 | 
				                        // Only change value for current variable
 | 
				 | 
				 | 
				                        // Only change value for current variable
 | 
			
		
		
	
		
			
				 | 
				 | 
				                        if ((*itr) == (*itr2)) { | 
				 | 
				 | 
				                        if ((*itr) == (*itr2)) { | 
			
		
		
	
		
			
				 | 
				 | 
				                            auto val = std::pair<typename utility::parametric::VariableType<ValueType>::type, typename utility::parametric::CoefficientType<ValueType>::type>( | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                                    (*itr2), storm::utility::convertNumber<typename utility::parametric::CoefficientType<ValueType>::type>( | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                                            boost::lexical_cast<std::string>((i + 1) / (double(numberOfSamples + 1))))); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            auto lb = region.getLowerBoundary(itr->name()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            auto ub = region.getUpperBoundary(itr->name()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            // Creates samples between lb and ub, that is: lb, lb + (ub-lb)/(#samples -1), lb + 2* (ub-lb)/(#samples -1), ..., ub
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            auto val = | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                                    std::pair<typename utility::parametric::VariableType<ValueType>::type, typename utility::parametric::CoefficientType<ValueType>::type> | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                                            (*itr,utility::convertNumber<typename utility::parametric::CoefficientType<ValueType>::type>(lb + i*(ub-lb)/(numberOfSamples-1))); | 
			
		
		
	
		
			
				 | 
				 | 
				                            valuation.insert(val); | 
				 | 
				 | 
				                            valuation.insert(val); | 
			
		
		
	
		
			
				 | 
				 | 
				                            assert (0 < val.second && val.second < 1); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				                        } else { | 
				 | 
				 | 
				                        } else { | 
			
		
		
	
		
			
				 | 
				 | 
				                            auto val = std::pair<typename utility::parametric::VariableType<ValueType>::type, typename utility::parametric::CoefficientType<ValueType>::type>( | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                                    (*itr2), storm::utility::convertNumber<typename utility::parametric::CoefficientType<ValueType>::type>( | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                                            boost::lexical_cast<std::string>((1) / (double(numberOfSamples + 1))))); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            auto lb = region.getLowerBoundary(itr->name()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            auto val = | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                                    std::pair<typename utility::parametric::VariableType<ValueType>::type, typename utility::parametric::CoefficientType<ValueType>::type> | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                                            (*itr,utility::convertNumber<typename utility::parametric::CoefficientType<ValueType>::type>(lb)); | 
			
		
		
	
		
			
				 | 
				 | 
				                            valuation.insert(val); | 
				 | 
				 | 
				                            valuation.insert(val); | 
			
		
		
	
		
			
				 | 
				 | 
				                            assert (0 < val.second && val.second < 1); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        } | 
				 | 
				 | 
				                        } | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				                    } | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::models::sparse::Dtmc<double> sampleModel = instantiator.instantiate(valuation); | 
				 | 
				 | 
				                    storm::models::sparse::Dtmc<double> sampleModel = instantiator.instantiate(valuation); | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |