Browse Source

Added priorities to GSPN transformation

main
Matthias Volk 7 years ago
parent
commit
480b1fb8e5
  1. 3
      src/storm-dft/api/storm-dft.cpp
  2. 17
      src/storm-dft/transformations/DftToGspnTransformator.cpp
  3. 12
      src/storm-dft/transformations/DftToGspnTransformator.h

3
src/storm-dft/api/storm-dft.cpp

@ -45,7 +45,8 @@ namespace storm {
// Transform to GSPN // Transform to GSPN
storm::transformations::dft::DftToGspnTransformator<double> gspnTransformator(dft); storm::transformations::dft::DftToGspnTransformator<double> gspnTransformator(dft);
gspnTransformator.transform(dontCareElements, smart, mergeDCFailed);
auto priorities = gspnTransformator.computePriorities();
gspnTransformator.transform(priorities, dontCareElements, smart, mergeDCFailed);
storm::gspn::GSPN* gspn = gspnTransformator.obtainGSPN(); storm::gspn::GSPN* gspn = gspnTransformator.obtainGSPN();
uint64_t toplevelFailedPlace = gspnTransformator.toplevelFailedPlaceId(); uint64_t toplevelFailedPlace = gspnTransformator.toplevelFailedPlaceId();

17
src/storm-dft/transformations/DftToGspnTransformator.cpp

@ -17,8 +17,9 @@ namespace storm {
} }
template<typename ValueType> template<typename ValueType>
void DftToGspnTransformator<ValueType>::transform(std::set<uint64_t> const &dontCareElements, bool smart,
void DftToGspnTransformator<ValueType>::transform(std::map<uint64_t, uint64_t> const &priorities, std::set<uint64_t> const &dontCareElements, bool smart,
bool mergeDCFailed) { bool mergeDCFailed) {
this->priorities = priorities;
this->dontCareElements = dontCareElements; this->dontCareElements = dontCareElements;
this->smart = smart; this->smart = smart;
this->mergedDCFailed = false;//mergeDCFailed; this->mergedDCFailed = false;//mergeDCFailed;
@ -31,10 +32,20 @@ namespace storm {
// TODO // TODO
} }
template<typename ValueType>
std::map<uint64_t, uint64_t> DftToGspnTransformator<ValueType>::computePriorities() {
std::map<uint64_t, uint64_t> priorities;
for (std::size_t i = 0; i < mDft.nrElements(); i++) {
// Give all elements the same priority
priorities[i] = 1;
}
return priorities;
}
template<typename ValueType> template<typename ValueType>
uint64_t DftToGspnTransformator<ValueType>::toplevelFailedPlaceId() { uint64_t DftToGspnTransformator<ValueType>::toplevelFailedPlaceId() {
STORM_LOG_ASSERT(failedPlaces.size() > mDft.getTopLevelIndex(),
"Failed place for top level element does not exist.");
STORM_LOG_ASSERT(failedPlaces.size() > mDft.getTopLevelIndex(), "Failed place for top level element does not exist.");
return failedPlaces.at(mDft.getTopLevelIndex()); return failedPlaces.at(mDft.getTopLevelIndex());
} }

12
src/storm-dft/transformations/DftToGspnTransformator.h

@ -25,13 +25,19 @@ namespace storm {
/*! /*!
* Transform the DFT to a GSPN. * Transform the DFT to a GSPN.
* *
* @param priorities GSPN transition priorities to use for each DFT element.
* @param dontCareElements Set of DFT elements which should have Don't Care propagation. * @param dontCareElements Set of DFT elements which should have Don't Care propagation.
* @param smart Flag indicating if smart semantics should be used. * @param smart Flag indicating if smart semantics should be used.
* Smart semantics will only generate necessary parts of the GSPNs. * Smart semantics will only generate necessary parts of the GSPNs.
* @param mergeDCFailed Flag indicating if Don't Care places and Failed places should be merged. * @param mergeDCFailed Flag indicating if Don't Care places and Failed places should be merged.
*/ */
void
transform(std::set<uint64_t> const &dontCareElements, bool smart = true, bool mergeDCFailed = true);
void transform(std::map<uint64_t, uint64_t> const &priorities, std::set<uint64_t> const &dontCareElements, bool smart = true, bool mergeDCFailed = true);
/*!
* Compute priorities used for GSPN transformation.
* @return Priority mapping.
*/
std::map<uint64_t, uint64_t> computePriorities();
/*! /*!
* Extract Gspn by building * Extract Gspn by building
@ -219,6 +225,8 @@ namespace storm {
bool mergedDCFailed; bool mergedDCFailed;
// Set of DFT elements which should have Don't Care propagation. // Set of DFT elements which should have Don't Care propagation.
std::set<uint64_t> dontCareElements; std::set<uint64_t> dontCareElements;
// Map from DFT elements to their GSPN priorities
std::map<uint64_t, uint64_t> priorities;
// Interface places for DFT elements // Interface places for DFT elements
std::vector<uint64_t> failedPlaces; std::vector<uint64_t> failedPlaces;

Loading…
Cancel
Save