Browse Source
Introduced heuristic depth with distance from initial state
Introduced heuristic depth with distance from initial state
Former-commit-id: 1b94ebc4f9
main
9 changed files with 192 additions and 100 deletions
-
76src/builder/DftExplorationHeuristic.cpp
-
44src/builder/DftExplorationHeuristic.h
-
33src/builder/ExplicitDFTModelBuilderApprox.cpp
-
31src/builder/ExplicitDFTModelBuilderApprox.h
-
49src/generator/DftNextStateGenerator.cpp
-
21src/generator/DftNextStateGenerator.h
-
2src/modelchecker/dft/DFTModelChecker.cpp
-
9src/storage/dft/DFTState.cpp
-
27src/storage/dft/DFTState.h
@ -0,0 +1,76 @@ |
|||
#include "src/builder/DftExplorationHeuristic.h"
|
|||
#include "src/adapters/CarlAdapter.h"
|
|||
#include "src/utility/macros.h"
|
|||
#include "src/utility/constants.h"
|
|||
#include "src/exceptions/NotImplementedException.h"
|
|||
#include "src/storage/dft/DFTState.h"
|
|||
|
|||
#include <limits>
|
|||
|
|||
namespace storm { |
|||
namespace builder { |
|||
|
|||
template<typename ValueType> |
|||
DFTExplorationHeuristic<ValueType>::DFTExplorationHeuristic() : skip(true), depth(std::numeric_limits<std::size_t>::max()), rate(storm::utility::zero<ValueType>()), exitRate(storm::utility::zero<ValueType>()) { |
|||
// Intentionally left empty
|
|||
} |
|||
|
|||
template<typename ValueType> |
|||
bool DFTExplorationHeuristic<ValueType>::isSkip() const { |
|||
return skip; |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
size_t DFTExplorationHeuristic<ValueType>::getDepth() const { |
|||
return depth; |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
void DFTExplorationHeuristic<ValueType>::setHeuristicValues(size_t depth, ValueType rate, ValueType exitRate) { |
|||
std::cout << "Set priority: " << depth << ", old: " << this->depth << std::endl; |
|||
this->depth = depth; |
|||
// TODO Matthias: update rates and exitRates as well
|
|||
this->rate = rate; |
|||
this->exitRate = exitRate; |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
double DFTExplorationHeuristic<ValueType>::getPriority() const { |
|||
STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "Approximation works only for double."); |
|||
} |
|||
|
|||
template<> |
|||
double DFTExplorationHeuristic<double>::getPriority() const { |
|||
// TODO Matthias: change according to heuristic
|
|||
if (!skip) { |
|||
// TODO Matthias: change to non-magic number
|
|||
return 0; |
|||
} |
|||
//return rate/exitRate;
|
|||
return depth; |
|||
} |
|||
|
|||
template<> |
|||
double DFTExplorationHeuristic<storm::RationalFunction>::getPriority() const { |
|||
STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "Approximation works only for double."); |
|||
/*std::cout << (rate / exitRate) << " < " << threshold << ": " << (number < threshold) << std::endl;
|
|||
std::map<storm::Variable, storm::RationalNumber> mapping; |
|||
storm::RationalFunction eval(number.evaluate(mapping)); |
|||
std::cout << "Evaluated: " << eval << std::endl; |
|||
return eval < threshold;*/ |
|||
} |
|||
|
|||
template<typename ValueType> |
|||
bool compareDepth(std::shared_ptr<storm::storage::DFTState<ValueType>> stateA, std::shared_ptr<storm::storage::DFTState<ValueType>> stateB) { |
|||
return stateA->getPriority() > stateB->getPriority(); |
|||
} |
|||
|
|||
template class DFTExplorationHeuristic<double>; |
|||
template bool compareDepth(std::shared_ptr<storm::storage::DFTState<double>>, std::shared_ptr<storm::storage::DFTState<double>>); |
|||
|
|||
#ifdef STORM_HAVE_CARL
|
|||
template class DFTExplorationHeuristic<storm::RationalFunction>; |
|||
template bool compareDepth(std::shared_ptr<storm::storage::DFTState<storm::RationalFunction>>, std::shared_ptr<storm::storage::DFTState<storm::RationalFunction>>); |
|||
#endif
|
|||
} |
|||
} |
@ -0,0 +1,44 @@ |
|||
#ifndef STORM_BUILDER_DFTEXPLORATIONHEURISTIC_H_ |
|||
#define STORM_BUILDER_DFTEXPLORATIONHEURISTIC_H_ |
|||
|
|||
#include <memory> |
|||
#include <algorithm> |
|||
|
|||
namespace storm { |
|||
|
|||
// Forward declaration |
|||
namespace storage { |
|||
template<typename ValueType> |
|||
class DFTState; |
|||
} |
|||
|
|||
namespace builder { |
|||
|
|||
template<typename ValueType> |
|||
class DFTExplorationHeuristic { |
|||
|
|||
public: |
|||
DFTExplorationHeuristic(); |
|||
|
|||
void setHeuristicValues(size_t depth, ValueType rate, ValueType exitRate); |
|||
|
|||
bool isSkip() const; |
|||
|
|||
size_t getDepth() const; |
|||
|
|||
double getPriority() const; |
|||
|
|||
private: |
|||
bool skip; |
|||
size_t depth; |
|||
ValueType rate; |
|||
ValueType exitRate; |
|||
|
|||
}; |
|||
|
|||
template<typename ValueType> |
|||
bool compareDepth(std::shared_ptr<storm::storage::DFTState<ValueType>> stateA, std::shared_ptr<storm::storage::DFTState<ValueType>> stateB); |
|||
} |
|||
} |
|||
|
|||
#endif /* STORM_BUILDER_DFTEXPLORATIONHEURISTIC_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue