80    ModelCheckerType<ModelType, SolveValueType> modelchecker(model);
 
   82    for (
auto const& property : input.
properties) {
 
   85        modelchecker.specifyFormula(storm::api::createTask<ValueType>(property.getRawFormula(), 
true));
 
   86        modelchecker.setInstantiationsAreGraphPreserving(samples.
graphPreserving);
 
   90        std::vector<typename storm::utility::parametric::VariableType<ValueType>::type> parameters;
 
   91        std::vector<typename std::vector<typename storm::utility::parametric::CoefficientType<ValueType>::type>::const_iterator> iterators;
 
   92        std::vector<typename std::vector<typename storm::utility::parametric::CoefficientType<ValueType>::type>::const_iterator> iteratorEnds;
 
  100            for (
auto const& entry : product) {
 
  101                parameters.push_back(entry.first);
 
  102                iterators.push_back(entry.second.cbegin());
 
  103                iteratorEnds.push_back(entry.second.cend());
 
  109                for (uint64_t i = 0; i < parameters.size(); ++i) {
 
  110                    valuation[parameters[i]] = *iterators[i];
 
  114                std::unique_ptr<storm::modelchecker::CheckResult> result = modelchecker.check(
Environment(), valuation);
 
  115                valuationWatch.
stop();
 
  120                printInitialStatesResult<ValueType>(result, &valuationWatch, &valuation);
 
  122                for (uint64_t i = 0; i < parameters.size(); ++i) {
 
  124                    if (iterators[i] == iteratorEnds[i]) {
 
  126                        iterators[i] = product.at(parameters[i]).cbegin();
 
  129                        if (i == parameters.size() - 1) {
 
 
  149        verifyPropertiesAtSamplePoints<storm::modelchecker::SparseDtmcInstantiationModelChecker, storm::models::sparse::Dtmc<ValueType>, ValueType,
 
  150                                       SolveValueType>(*model->template as<storm::models::sparse::Dtmc<ValueType>>(), input, samples);
 
  152        verifyPropertiesAtSamplePoints<storm::modelchecker::SparseCtmcInstantiationModelChecker, storm::models::sparse::Ctmc<ValueType>, ValueType,
 
  153                                       SolveValueType>(*model->template as<storm::models::sparse::Ctmc<ValueType>>(), input, samples);
 
  155        verifyPropertiesAtSamplePoints<storm::modelchecker::SparseMdpInstantiationModelChecker, storm::models::sparse::Mdp<ValueType>, ValueType,
 
  156                                       SolveValueType>(*model->template as<storm::models::sparse::Mdp<ValueType>>(), input, samples);
 
  158        STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException, 
"Sampling is currently only supported for DTMCs, CTMCs and MDPs.");
 
 
  164    STORM_LOG_THROW(!model || model->isSparseModel(), storm::exceptions::NotSupportedException, 
"Sampling is only supported for sparse models.");
 
  167    if (sampleString.empty()) {
 
  172    std::set<typename storm::utility::parametric::VariableType<ValueType>::type> modelParameters;
 
  176    modelParameters.insert(rewParameters.begin(), rewParameters.end());
 
  178    std::vector<std::string> cartesianProducts;
 
  179    boost::split(cartesianProducts, sampleString, boost::is_any_of(
";"));
 
  180    for (
auto& product : cartesianProducts) {
 
  181        boost::trim(product);
 
  184        std::vector<std::string> valuesForVariables;
 
  185        boost::split(valuesForVariables, product, boost::is_any_of(
","));
 
  186        for (
auto& values : valuesForVariables) {
 
  190        std::set<typename storm::utility::parametric::VariableType<ValueType>::type> encounteredParameters;
 
  193        for (
auto const& varValues : valuesForVariables) {
 
  194            auto equalsPosition = varValues.find(
"=");
 
  195            STORM_LOG_THROW(equalsPosition != varValues.npos, storm::exceptions::WrongFormatException, 
"Incorrect format of samples.");
 
  196            std::string variableName = varValues.substr(0, equalsPosition);
 
  197            boost::trim(variableName);
 
  198            std::string values = varValues.substr(equalsPosition + 1);
 
  201            bool foundParameter = 
false;
 
  203            for (
auto const& parameter : modelParameters) {
 
  204                std::stringstream parameterStream;
 
  205                parameterStream << parameter;
 
  206                if (parameterStream.str() == variableName) {
 
  207                    foundParameter = 
true;
 
  208                    theParameter = parameter;
 
  209                    encounteredParameters.insert(parameter);
 
  212            STORM_LOG_THROW(foundParameter, storm::exceptions::WrongFormatException, 
"Unknown parameter '" << variableName << 
"'.");
 
  214            std::vector<std::string> splitValues;
 
  215            boost::split(splitValues, values, boost::is_any_of(
":"));
 
  216            STORM_LOG_THROW(!splitValues.empty(), storm::exceptions::WrongFormatException, 
"Expecting at least one value per parameter.");
 
  218            auto& list = newCartesianProduct[theParameter];
 
  220            for (
auto& value : splitValues) {
 
  226        STORM_LOG_THROW(encounteredParameters == modelParameters, storm::exceptions::WrongFormatException,
 
  227                        "Variables for all parameters are required when providing samples.");
 
 
  235                       std::string 
const& instantiationString) {
 
  237                    "Gradient descent is currently only supported for DTMCs.");
 
  238    std::shared_ptr<storm::models::sparse::Dtmc<ValueType>> dtmc = model->template as<storm::models::sparse::Dtmc<ValueType>>();
 
  241    auto formula = formulas[0];
 
  243    STORM_LOG_THROW(formula->isProbabilityOperatorFormula() || formula->isRewardOperatorFormula(), storm::exceptions::NotSupportedException,
 
  244                    "Input formula needs to be either a probability operator formula or a reward operator formula.");
 
  248    boost::optional<std::string> rewardModel = boost::none;
 
  249    if (formula->isRewardOperatorFormula()) {
 
  250        if (formula->asRewardOperatorFormula().hasRewardModelName()) {
 
  251            rewardModel = std::string(formula->asRewardOperatorFormula().getRewardModelName());
 
  253            rewardModel = std::string(
"");
 
  256            vars.insert(rewardParameter);
 
  264    for (
auto const& pair : keyValue) {
 
  265        auto variable = carl::VariablePool::getInstance().findVariableWithName(pair.first);
 
  266        auto value = storm::utility::convertNumber<typename storm::utility::parametric::CoefficientType<ValueType>::type>(pair.second);
 
  267        instantiation.emplace(variable, value);
 
  273    std::shared_ptr<storm::logic::Formula> formulaWithoutBound;
 
  275        formulaWithoutBound = std::make_shared<storm::logic::ProbabilityOperatorFormula>(
 
  279        formulaWithoutBound = std::make_shared<storm::logic::RewardOperatorFormula>(formulas[0]->asRewardOperatorFormula().getSubformula().asSharedPointer());
 
  285    for (
auto const& parameter : vars) {
 
  286        std::cout << 
"Derivative w.r.t. " << parameter << 
": ";
 
  289        std::cout << *result << 
'\n';
 
 
std::unique_ptr< modelchecker::ExplicitQuantitativeCheckResult< ConstantType > > check(Environment const &env, storm::utility::parametric::Valuation< FunctionType > const &valuation, typename utility::parametric::VariableType< FunctionType >::type const ¶meter, boost::optional< std::vector< ConstantType > > const &valueVector=boost::none)
check calculates the deriative of the model w.r.t.