Browse Source
			
			
			first version of explicit format export [mdps/no rewards only currently]
			
				
		first version of explicit format export [mdps/no rewards only currently]
	
		
	
			
				Former-commit-id:main078efab44d[formerlya1a444a014] Former-commit-id:321bc64e6f
				 7 changed files with 129 additions and 3 deletions
			
			
		- 
					9src/cli/entrypoints.h
 - 
					12src/settings/modules/IOSettings.cpp
 - 
					18src/settings/modules/IOSettings.h
 - 
					14src/storage/SymbolicModelDescription.cpp
 - 
					2src/storage/SymbolicModelDescription.h
 - 
					62src/utility/ExplicitExporter.cpp
 - 
					15src/utility/ExplicitExporter.h
 
@ -0,0 +1,62 @@ | 
				
			|||
#include "ExplicitExporter.h"
 | 
				
			|||
 | 
				
			|||
#include "src/adapters/CarlAdapter.h"
 | 
				
			|||
#include "src/utility/macros.h"
 | 
				
			|||
#include "src/exceptions/NotImplementedException.h"
 | 
				
			|||
#include "src/models/sparse/Dtmc.h"
 | 
				
			|||
#include "src/models/sparse/Mdp.h"
 | 
				
			|||
 | 
				
			|||
#include "src/models/sparse/StandardRewardModel.h"
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
namespace storm { | 
				
			|||
    namespace exporter { | 
				
			|||
        template<typename ValueType> | 
				
			|||
        void explicitExportSparseModel(std::ostream& os, std::shared_ptr<storm::models::sparse::Model<ValueType>> sparseModel,  std::vector<std::string> const& parameters) { | 
				
			|||
            STORM_LOG_THROW(sparseModel->getType() == storm::models::ModelType::Mdp, storm::exceptions::NotImplementedException, "This functionality is not yet implemented." ); | 
				
			|||
            std::shared_ptr<storm::models::sparse::Mdp<ValueType>> mdp = sparseModel->template as<storm::models::sparse::Mdp<ValueType>>(); | 
				
			|||
 | 
				
			|||
            os << "// Exported by Storm" << std::endl; | 
				
			|||
            os << "@type: mdp" << std::endl; | 
				
			|||
            os << "@parameters" << std::endl; | 
				
			|||
            for (auto const& p : parameters) { | 
				
			|||
               os << p << " "; | 
				
			|||
            } | 
				
			|||
            os << std::endl; | 
				
			|||
            os << "@nr_states" << std::endl  << mdp->getNumberOfStates() <<  std::endl; | 
				
			|||
            os << "@model" << std::endl; | 
				
			|||
            storm::storage::SparseMatrix<ValueType> const& matrix = mdp->getTransitionMatrix(); | 
				
			|||
             | 
				
			|||
            for (typename storm::storage::SparseMatrix<ValueType>::index_type group = 0; group < matrix.getRowGroupCount(); ++group) { | 
				
			|||
                os << "state " << group; | 
				
			|||
                for(auto const& label : mdp->getStateLabeling().getLabelsOfState(group)) { | 
				
			|||
                    os << " " << label; | 
				
			|||
                } | 
				
			|||
                os << std::endl; | 
				
			|||
                typename storm::storage::SparseMatrix<ValueType>::index_type start = matrix.getRowGroupIndices()[group]; | 
				
			|||
                typename storm::storage::SparseMatrix<ValueType>::index_type end = matrix.getRowGroupIndices()[group + 1]; | 
				
			|||
                 | 
				
			|||
                for (typename storm::storage::SparseMatrix<ValueType>::index_type i = start; i < end; ++i) { | 
				
			|||
                    // Print the actual row.
 | 
				
			|||
                    os << "\taction"; | 
				
			|||
                    if(mdp->hasChoiceLabeling()) { | 
				
			|||
                        //TODO
 | 
				
			|||
                    } | 
				
			|||
                    os << std::endl; | 
				
			|||
                    for(auto it = matrix.begin(i); it != matrix.end(i); ++it) { | 
				
			|||
                        os << "\t\t" << it->getColumn() << " : " << it->getValue() << std::endl; | 
				
			|||
                    } | 
				
			|||
                     | 
				
			|||
                } | 
				
			|||
            } | 
				
			|||
             | 
				
			|||
        } | 
				
			|||
         | 
				
			|||
         | 
				
			|||
         | 
				
			|||
        template void explicitExportSparseModel<double>(std::ostream& os, std::shared_ptr<storm::models::sparse::Model<double>> sparseModel, std::vector<std::string> const& parameters); | 
				
			|||
         | 
				
			|||
        template void explicitExportSparseModel<storm::RationalNumber>(std::ostream& os, std::shared_ptr<storm::models::sparse::Model<storm::RationalNumber>> sparseModel, std::vector<std::string> const& parameters); | 
				
			|||
        template void explicitExportSparseModel<storm::RationalFunction>(std::ostream& os, std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> sparseModel, std::vector<std::string> const& parameters); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,15 @@ | 
				
			|||
#pragma once | 
				
			|||
#include <iostream> | 
				
			|||
#include <memory> | 
				
			|||
 | 
				
			|||
#include "src/models/sparse/Model.h" | 
				
			|||
 | 
				
			|||
namespace storm { | 
				
			|||
    namespace exporter { | 
				
			|||
         | 
				
			|||
        template<typename ValueType> | 
				
			|||
        void explicitExportSparseModel(std::ostream& os, std::shared_ptr<storm::models::sparse::Model<ValueType>> sparseModel, std::vector<std::string> const& parameters); | 
				
			|||
         | 
				
			|||
         | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue