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 |
|||
|
|||
#include "storm-dft/storage/dft/elements/BEExponential.h" |
|||
// BE types |
|||
#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/DFTDependency.h" |
|||
#include "storm-dft/storage/dft/elements/DFTMutex.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/DFTPor.h" |
|||
#include "storm-dft/storage/dft/elements/DFTSeq.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; |
|||
}; |
|||
|
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue