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