24 std::vector<ValueType> exitRates;
26 exitRates = sparseModel->template as<storm::models::sparse::Ctmc<ValueType>>()->getExitRateVector();
28 exitRates = sparseModel->template as<storm::models::sparse::MarkovAutomaton<ValueType>>()->getExitRates();
32 os <<
"// Exported by storm\n";
33 os <<
"// Original model type: " << sparseModel->getType() <<
'\n';
34 os <<
"@type: " << sparseModel->getType() <<
'\n';
35 os <<
"@parameters\n";
36 if (parameters.empty()) {
37 for (std::string
const& parameter :
getParameters(sparseModel)) {
38 os << parameter <<
" ";
41 for (std::string
const& parameter : parameters) {
42 os << parameter <<
" ";
50 std::unordered_map<ValueType, std::string> placeholders;
54 if (!placeholders.empty()) {
55 os <<
"@placeholders\n";
56 for (
auto const& entry : placeholders) {
57 os <<
"$" << entry.second <<
" : " << entry.first <<
'\n';
61 os <<
"@reward_models\n";
62 for (
auto const& rewardModel : sparseModel->getRewardModels()) {
63 os << rewardModel.first <<
" ";
66 os <<
"@nr_states\n" << sparseModel->getNumberOfStates() <<
'\n';
67 os <<
"@nr_choices\n" << sparseModel->getNumberOfChoices() <<
'\n';
74 os <<
"state " << group;
77 if (!exitRates.empty()) {
79 writeValue(os, exitRates.at(group), placeholders);
83 os <<
" {" << sparseModel->template as<storm::models::sparse::Pomdp<ValueType>>()->getObservation(group) <<
"}";
88 for (
auto const& rewardModelEntry : sparseModel->getRewardModels()) {
96 if (rewardModelEntry.second.hasStateRewards()) {
97 writeValue(os, rewardModelEntry.second.getStateRewardVector().at(group), placeholders);
108 for (
auto const& label : sparseModel->getStateLabeling().getLabelsOfState(group)) {
109 STORM_LOG_THROW(std::count(label.begin(), label.end(),
'\"') == 0, storm::exceptions::NotSupportedException,
110 "Labels with quotation marks are not supported in the DRN format and therefore may not be exported.");
112 if (std::count_if(label.begin(), label.end(), isspace) > 0) {
113 os <<
" \"" << label <<
"\"";
120 if (sparseModel->hasStateValuations()) {
121 os <<
"//" << sparseModel->getStateValuations().getStateInfo(group) <<
'\n';
131 if (sparseModel->hasChoiceLabeling()) {
134 if (sparseModel->getChoiceLabeling().getLabelsOfChoice(row).empty()) {
137 for (
auto const& label : sparseModel->getChoiceLabeling().getLabelsOfChoice(row)) {
145 os <<
"\taction " << row - start;
150 for (
auto const& rewardModelEntry : sparseModel->getRewardModels()) {
158 if (rewardModelEntry.second.hasStateActionRewards()) {
159 writeValue(os, rewardModelEntry.second.getStateActionRewardVector().at(row), placeholders);
170 for (
auto it = matrix.
begin(row); it != matrix.
end(row); ++it) {
171 ValueType prob = it->getValue();
172 os <<
"\t\t" << it->getColumn() <<
" : ";
225 std::unordered_map<storm::RationalFunction, std::string> placeholders;
229 for (
auto const& exitRate : exitRates) {
234 for (
auto const& rewardModelEntry : sparseModel->getRewardModels()) {
235 if (rewardModelEntry.second.hasStateRewards()) {
236 for (
auto const& reward : rewardModelEntry.second.getStateRewardVector()) {
240 if (rewardModelEntry.second.hasStateActionRewards()) {
241 for (
auto const& reward : rewardModelEntry.second.getStateActionRewardVector()) {
248 for (
auto const& entry : sparseModel->getTransitionMatrix()) {
void explicitExportSparseModel(std::ostream &os, std::shared_ptr< storm::models::sparse::Model< ValueType > > sparseModel, std::vector< std::string > const ¶meters, DirectEncodingOptions const &options)
Exports a sparse model into the explicit DRN format.