#include "storm/storage/dd/bisimulation/MdpPartitionRefiner.h" #include "storm/models/symbolic/Mdp.h" namespace storm { namespace dd { namespace bisimulation { template MdpPartitionRefiner::MdpPartitionRefiner(storm::models::symbolic::Mdp const& mdp, Partition const& initialStatePartition) : PartitionRefiner(mdp, initialStatePartition), choicePartition(Partition::createTrivialChoicePartition(mdp, initialStatePartition.getBlockVariables())) { // Initialize the choice signature refiner. std::set choiceSignatureVariables; std::set_union(mdp.getRowVariables().begin(), mdp.getRowVariables().end(), mdp.getNondeterminismVariables().begin(), mdp.getNondeterminismVariables().end(), std::inserter(choiceSignatureVariables, choiceSignatureVariables.begin())); choiceSignatureRefiner = SignatureRefiner(mdp.getManager(), this->statePartition.getBlockVariable(), choiceSignatureVariables); } template bool MdpPartitionRefiner::refine(bisimulation::SignatureMode const& mode) { Partition newChoicePartition = this->internalRefine(choiceSignatureRefiner, choicePartition, mode); if (newChoicePartition == choicePartition) { this->status = Status::FixedPoint; return false; } else { return PartitionRefiner::refine(mode); } } template Partition const& MdpPartitionRefiner::getChoicePartition() const { return choicePartition; } template class MdpPartitionRefiner; template class MdpPartitionRefiner; template class MdpPartitionRefiner; template class MdpPartitionRefiner; } } }