No known key found for this signature in database
GPG Key ID: 83A57678F739FCD3
5 changed files with 129 additions and 6 deletions
-
3src/storm-dft/storage/dft/DFTElementType.h
-
15src/storm-dft/storage/dft/DFTElements.h
-
20src/storm-dft/storage/dft/elements/BESamples.cpp
-
74src/storm-dft/storage/dft/elements/BESamples.h
-
23src/test/storm-dft/storage/DftBETest.cpp
@ -1,13 +1,18 @@ |
|||||
#pragma once |
#pragma once |
||||
|
|
||||
#include "storm-dft/storage/dft/elements/BEExponential.h" |
// BE types |
||||
#include "storm-dft/storage/dft/elements/BEConst.h" |
#include "storm-dft/storage/dft/elements/BEConst.h" |
||||
|
#include "storm-dft/storage/dft/elements/BEExponential.h" |
||||
|
#include "storm-dft/storage/dft/elements/BESamples.h" |
||||
|
|
||||
|
// Gates |
||||
#include "storm-dft/storage/dft/elements/DFTAnd.h" |
#include "storm-dft/storage/dft/elements/DFTAnd.h" |
||||
#include "storm-dft/storage/dft/elements/DFTDependency.h" |
|
||||
#include "storm-dft/storage/dft/elements/DFTMutex.h" |
|
||||
#include "storm-dft/storage/dft/elements/DFTOr.h" |
#include "storm-dft/storage/dft/elements/DFTOr.h" |
||||
|
#include "storm-dft/storage/dft/elements/DFTVot.h" |
||||
#include "storm-dft/storage/dft/elements/DFTPand.h" |
#include "storm-dft/storage/dft/elements/DFTPand.h" |
||||
#include "storm-dft/storage/dft/elements/DFTPor.h" |
#include "storm-dft/storage/dft/elements/DFTPor.h" |
||||
#include "storm-dft/storage/dft/elements/DFTSeq.h" |
|
||||
#include "storm-dft/storage/dft/elements/DFTSpare.h" |
#include "storm-dft/storage/dft/elements/DFTSpare.h" |
||||
#include "storm-dft/storage/dft/elements/DFTVot.h" |
#include "storm-dft/storage/dft/elements/DFTDependency.h" |
||||
|
#include "storm-dft/storage/dft/elements/DFTSeq.h" |
||||
|
#include "storm-dft/storage/dft/elements/DFTMutex.h" |
@ -0,0 +1,20 @@ |
|||||
|
#include "BESamples.h"
|
||||
|
|
||||
|
#include "storm/exceptions/InvalidArgumentException.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace storage { |
||||
|
|
||||
|
template <typename ValueType> |
||||
|
ValueType BESamples<ValueType>::getUnreliability(ValueType time) const { |
||||
|
auto iter = mActiveSamples.find(time); |
||||
|
STORM_LOG_THROW(iter!= mActiveSamples.end(), storm::exceptions::InvalidArgumentException, "No sample for time point " << time << " given."); |
||||
|
return iter->second; |
||||
|
} |
||||
|
|
||||
|
// Explicitly instantiate the class.
|
||||
|
template class BESamples<double>; |
||||
|
template class BESamples<RationalFunction>; |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,74 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "DFTBE.h" |
||||
|
|
||||
|
#include <map> |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace storage { |
||||
|
|
||||
|
/*! |
||||
|
* BE where the failure distribution is defined by samples. |
||||
|
* A sample defines the unreliability at a time point (i.e. the cumulative distribution function F(x)). |
||||
|
*/ |
||||
|
template<typename ValueType> |
||||
|
class BESamples : public DFTBE<ValueType> { |
||||
|
|
||||
|
public: |
||||
|
/*! |
||||
|
* Constructor. |
||||
|
* @param id Id. |
||||
|
* @param name Name. |
||||
|
* @param activeSamples Samples defining unreliability in active state for certain time points. |
||||
|
*/ |
||||
|
BESamples(size_t id, std::string const& name, std::map<ValueType, ValueType> activeSamples) : |
||||
|
DFTBE<ValueType>(id, name), mActiveSamples(activeSamples) { |
||||
|
STORM_LOG_ASSERT(activeSamples.size() > 0, "At least one sample should be given."); |
||||
|
STORM_LOG_ASSERT(this->canFail(), "At least one sample should have a non-zero probability."); |
||||
|
} |
||||
|
|
||||
|
BEType beType() const override { |
||||
|
return BEType::SAMPLES; |
||||
|
} |
||||
|
|
||||
|
/*! |
||||
|
* Return samples defining unreliability in active state. |
||||
|
* @return Samples for active state. |
||||
|
*/ |
||||
|
std::map<ValueType, ValueType> const& activeSamples() const { |
||||
|
return mActiveSamples; |
||||
|
} |
||||
|
|
||||
|
ValueType getUnreliability(ValueType time) const override; |
||||
|
|
||||
|
bool canFail() const override { |
||||
|
// At least one sample is not zero |
||||
|
for (auto const& sample : mActiveSamples) { |
||||
|
if (!storm::utility::isZero(sample.second)) { |
||||
|
return true; |
||||
|
} |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
bool isTypeEqualTo(DFTElement<ValueType> const& other) const override { |
||||
|
if (!DFTBE<ValueType>::isTypeEqualTo(other)) { |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
auto& otherBE = static_cast<BESamples<ValueType> const&>(other); |
||||
|
return mActiveSamples.size() == otherBE.activeSamples().size() && std::equal(mActiveSamples.begin(), mActiveSamples.end(), otherBE.activeSamples().begin()); |
||||
|
} |
||||
|
|
||||
|
std::string toString() const override { |
||||
|
std::stringstream stream; |
||||
|
stream << "{" << this->name() << "} BE samples(" << this->activeSamples().size() << " samples)"; |
||||
|
return stream.str(); |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
std::map<ValueType, ValueType> mActiveSamples; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
Reference in new issue
xxxxxxxxxx