Browse Source
Started writing the DD abstraction layer.
Started writing the DD abstraction layer.
Former-commit-id: 8720a38b17
tempestpy_adaptions
dehnert
11 years ago
10 changed files with 400 additions and 29 deletions
-
4CMakeLists.txt
-
27CPackConfig.cmake
-
2src/counterexamples/MILPMinimalLabelSetGenerator.h
-
126src/storage/dd/CuddDd.h
-
7src/storage/dd/CuddDdManager.cpp
-
98src/storage/dd/CuddDdManager.h
-
13src/storage/dd/Dd.h
-
13src/storage/dd/DdManager.h
-
38src/storage/dd/DdMetaVariable.cpp
-
101src/storage/dd/DdMetaVariable.h
@ -1,27 +0,0 @@ |
|||||
include(InstallRequiredSystemLibraries) |
|
||||
|
|
||||
# For help take a look at: |
|
||||
# http://www.cmake.org/Wiki/CMake:CPackConfiguration |
|
||||
|
|
||||
### general settings |
|
||||
set(CPACK_PACKAGE_NAME "StoRM") |
|
||||
set(CPACK_PACKAGE_VENDOR "i2 RWTH Aachen University") |
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Stochastic Reward Model Checker - An extensible model checker written in C++.") |
|
||||
|
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") |
|
||||
|
|
||||
### versions |
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${STORM_CPP_VERSION_MAJOR}") |
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "${STORM_CPP_VERSION_MINOR}") |
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "${STORM_CPP_VERSION_PATCH}") |
|
||||
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${STORM_CPP_VERSION_HASH}") |
|
||||
|
|
||||
set(CPACK_GENERATOR "ZIP") |
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") |
|
||||
|
|
||||
### source package settings |
|
||||
set(CPACK_SOURCE_GENERATOR "ZIP") |
|
||||
set(CPACK_SOURCE_IGNORE_FILES "~$;[.]swp$;/[.]svn/;/[.]git/;.gitignore;/build/;tags;cscope.*") |
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-src") |
|
||||
|
|
||||
include(CPack) |
|
@ -0,0 +1,126 @@ |
|||||
|
#ifndef STORM_STORAGE_DD_CUDDDD_H_ |
||||
|
#define STORM_STORAGE_DD_CUDDDD_H_ |
||||
|
|
||||
|
#include "src/storage/dd/Dd.h" |
||||
|
#include "src/storage/dd/CuddDdManager.h" |
||||
|
|
||||
|
// Include the C++-interface of CUDD. |
||||
|
#include "cuddObj.hh" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
|
||||
|
template<> |
||||
|
class Dd<CUDD> { |
||||
|
/*! |
||||
|
* Creates a DD that encapsulates the given CUDD ADD. |
||||
|
* |
||||
|
* @param cuddAdd The CUDD ADD to store. |
||||
|
*/ |
||||
|
Dd(ADD cuddAdd); |
||||
|
|
||||
|
// Instantiate all copy/move constructors/assignments with the default implementation. |
||||
|
Dd(Dd<CUDD> const& other) = default; |
||||
|
Dd(Dd<CUDD>&& other) = default; |
||||
|
Dd& operator=(Dd<CUDD> const& other) = default; |
||||
|
Dd& operator=(Dd<CUDD>&& other) = default; |
||||
|
|
||||
|
/*! |
||||
|
* Adds the two DDs. |
||||
|
* |
||||
|
* @param other The DD to add to the current one. |
||||
|
* @return The result of the addition. |
||||
|
*/ |
||||
|
Dd<CUDD> operator+(Dd<CUDD> const& other) const; |
||||
|
|
||||
|
/*! |
||||
|
* Adds the given DD to the current one. |
||||
|
* |
||||
|
* @param other The DD to add to the current one. |
||||
|
* @return A reference to the current DD after the operation. |
||||
|
*/ |
||||
|
Dd<CUDD>& operator+=(Dd<CUDD> const& other); |
||||
|
|
||||
|
/*! |
||||
|
* Multiplies the two DDs. |
||||
|
* |
||||
|
* @param other The DD to multiply with the current one. |
||||
|
* @return The result of the multiplication. |
||||
|
*/ |
||||
|
Dd<CUDD> operator*(Dd<CUDD> const& other) const; |
||||
|
|
||||
|
/*! |
||||
|
* Multiplies the given DD with the current one and assigns the result to the current DD. |
||||
|
* |
||||
|
* @param other The DD to multiply with the current one. |
||||
|
* @return A reference to the current DD after the operation. |
||||
|
*/ |
||||
|
Dd<CUDD>& operator*=(Dd<CUDD> const& other); |
||||
|
|
||||
|
/*! |
||||
|
* Subtracts the given DD from the current one. |
||||
|
* |
||||
|
* @param other The DD to subtract from the current one. |
||||
|
* @return The result of the subtraction. |
||||
|
*/ |
||||
|
Dd<CUDD> operator-(Dd<CUDD> const& other) const; |
||||
|
|
||||
|
/*! |
||||
|
* Subtracts the given DD from the current one and assigns the result to the current DD. |
||||
|
* |
||||
|
* @param other The DD to subtract from the current one. |
||||
|
* @return A reference to the current DD after the operation. |
||||
|
*/ |
||||
|
Dd<CUDD>& operator-=(Dd<CUDD> const& other); |
||||
|
|
||||
|
/*! |
||||
|
* Divides the current DD by the given one. |
||||
|
* |
||||
|
* @param other The DD by which to divide the current one. |
||||
|
* @return The result of the division. |
||||
|
*/ |
||||
|
Dd<CUDD> operator/(Dd<CUDD> const& other) const; |
||||
|
|
||||
|
/*! |
||||
|
* Divides the current DD by the given one and assigns the result to the current DD. |
||||
|
* |
||||
|
* @param other The DD by which to divide the current one. |
||||
|
* @return A reference to the current DD after the operation. |
||||
|
*/ |
||||
|
Dd<CUDD>& operator/=(Dd<CUDD> const& other); |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the logical complement of the current DD. The result will map all encodings with a value |
||||
|
* unequal to zero to false and all others to true. |
||||
|
* |
||||
|
* @return The logical complement of the current DD. |
||||
|
*/ |
||||
|
Dd<CUDD> operator~() const; |
||||
|
|
||||
|
/*! |
||||
|
* Logically complements the current DD. The result will map all encodings with a value |
||||
|
* unequal to zero to false and all others to true. |
||||
|
*/ |
||||
|
void complement(); |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the manager that is responsible for this DD. |
||||
|
* |
||||
|
* A pointer to the manager that is responsible for this DD. |
||||
|
*/ |
||||
|
std::shared_ptr<DdManager<CUDD>> getDdManager() const; |
||||
|
|
||||
|
private: |
||||
|
// A pointer to the manager responsible for this DD. |
||||
|
std::shared_ptr<DdManager<CUDD>> ddManager; |
||||
|
|
||||
|
// The ADD created by CUDD. |
||||
|
ADD cuddAdd; |
||||
|
|
||||
|
// The names of all meta variables that appear in this DD. |
||||
|
std::unordered_set<std::string> containedMetaVariableNames; |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* STORM_STORAGE_DD_CUDDDD_H_ */ |
@ -0,0 +1,7 @@ |
|||||
|
#include "src/storage/dd/CuddDdManager.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,98 @@ |
|||||
|
#ifndef STORM_STORAGE_DD_CUDDDDMANAGER_H_ |
||||
|
#define STORM_STORAGE_DD_CUDDDDMANAGER_H_ |
||||
|
|
||||
|
#include <unordered_set> |
||||
|
#include <unordered_map> |
||||
|
|
||||
|
#include "src/storage/dd/DdManager.h" |
||||
|
|
||||
|
// Include the C++-interface of CUDD. |
||||
|
#include "cuddObj.hh" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
// To break the cylic dependencies, we need to forward-declare the other DD-related classes. |
||||
|
template<DdType Type> class DdMetaVariable; |
||||
|
template<DdType Type> class Dd; |
||||
|
|
||||
|
template<> |
||||
|
class DdManager<CUDD> : std::enable_shared_from_this<DdManager<CUDD>> { |
||||
|
/*! |
||||
|
* Creates an empty manager without any meta variables. |
||||
|
*/ |
||||
|
DdManager(); |
||||
|
|
||||
|
// Explictly forbid copying a DdManager, but allow moving it. |
||||
|
DdManager(DdManager<CUDD> const& other) = delete; |
||||
|
DdManager(DdManager<CUDD>&& other) = default; |
||||
|
DdManager<CUDD>& operator=(DdManager<CUDD> const& other) = delete; |
||||
|
DdManager<CUDD>& operator=(DdManager<CUDD>&& other) = default; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves a DD representing the constant one function. |
||||
|
* |
||||
|
* @return A DD representing the constant one function. |
||||
|
*/ |
||||
|
Dd<CUDD> getOne(); |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves a DD representing the constant zero function. |
||||
|
* |
||||
|
* @return A DD representing the constant zero function. |
||||
|
*/ |
||||
|
Dd<CUDD> getZero(); |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves a DD representing the constant function with the given value. |
||||
|
* |
||||
|
* @return A DD representing the constant function with the given value. |
||||
|
*/ |
||||
|
Dd<CUDD> getConstant(double value); |
||||
|
|
||||
|
/*! |
||||
|
* Adds a meta variable with the given name and range. |
||||
|
* |
||||
|
* @param name The name of the meta variable. |
||||
|
* @param low The lowest value of the range of the variable. |
||||
|
* @param high The highest value of the range of the variable. |
||||
|
* @param addSuccessorVariable If set, a second meta variable is added. This can then be used, for example, |
||||
|
* to encode the value of the meta variable in a successor state. |
||||
|
* @param useInterleavedVariableOrdering If set, the variables used for the successor meta variable are |
||||
|
* interleaved with the ones for the added meta variable. |
||||
|
*/ |
||||
|
void addMetaVariable(std::string const& name, int_fast64_t low, int_fast64_t high, bool addSuccessorVariable = false, bool useInterleavedVariableOrdering = true); |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the meta variable with the given name if it exists. |
||||
|
* |
||||
|
* @param metaVariableName The name of the meta variable to retrieve. |
||||
|
* @return The meta variable with the given name. |
||||
|
*/ |
||||
|
DdMetaVariable<CUDD> const& getMetaVariable(std::string const& metaVariableName) const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the successor meta variable of the one with the given name if it exists. |
||||
|
* |
||||
|
* @param metaVariableName The name of the meta variable whose successor meta variable to retrieve. |
||||
|
* @return The successor meta variable of the one with the given name. |
||||
|
*/ |
||||
|
DdMetaVariable<CUDD> const& getSuccessorMetaVariable(std::string const& metaVariableName) const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the names of all meta variables that have been added to the manager. |
||||
|
* |
||||
|
* @return The set of all meta variable names of the manager. |
||||
|
*/ |
||||
|
std::unordered_set<std::string> getAllMetaVariableNames(); |
||||
|
|
||||
|
private: |
||||
|
// A mapping from variable names to the meta variable information. |
||||
|
std::unordered_map<std::string, DdMetaVariable<CUDD>> metaVariableMap; |
||||
|
|
||||
|
// The manager responsible for the DDs created/modified with this DdManager. |
||||
|
Cudd cuddManager; |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* STORM_STORAGE_DD_CUDDDDMANAGER_H_ */ |
@ -0,0 +1,13 @@ |
|||||
|
#ifndef STORM_STORAGE_DD_DD_H_ |
||||
|
#define STORM_STORAGE_DD_DD_H_ |
||||
|
|
||||
|
#include "src/storage/dd/DdType.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
// Declare Dd class so we can then specialize it for the different DD types. |
||||
|
template<DdType Type> class Dd; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* STORM_STORAGE_DD_DD_H_ */ |
@ -0,0 +1,13 @@ |
|||||
|
#ifndef STORM_STORAGE_DD_DDMANAGER_H_ |
||||
|
#define STORM_STORAGE_DD_DDMANAGER_H_ |
||||
|
|
||||
|
#include "src/storage/dd/DdType.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
// Declare DdManager class so we can then specialize it for the different DD types. |
||||
|
template<DdType Type> class DdManager; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* STORM_STORAGE_DD_DDMANAGER_H_ */ |
@ -0,0 +1,38 @@ |
|||||
|
#include "src/storage/dd/DdMetaVariable.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
template<DdType Type> |
||||
|
DdMetaVariable<Type>::DdMetaVariable(std::string const& name, int_fast64_t low, int_fast64_t high, std::vector<Dd<Type>> const& ddVariables, std::shared_ptr<DdManager<Type>> manager) : name(name), low(low), high(high), ddVariables(ddVariables), manager(manager) { |
||||
|
// Intentionally left empty.
|
||||
|
} |
||||
|
|
||||
|
template<DdType Type> |
||||
|
std::string const& DdMetaVariable<Type>::getName() const { |
||||
|
return this->name; |
||||
|
} |
||||
|
|
||||
|
template<DdType Type> |
||||
|
int_fast64_t DdMetaVariable<Type>::getLow() const { |
||||
|
return this->low; |
||||
|
} |
||||
|
|
||||
|
template<DdType Type> |
||||
|
int_fast64_t DdMetaVariable<Type>::getHigh() const { |
||||
|
return this->high; |
||||
|
} |
||||
|
|
||||
|
template<DdType Type> |
||||
|
std::vector<Dd<Type>> const& DdMetaVariable<Type>::getDdVariables() const { |
||||
|
return this->ddVariables; |
||||
|
} |
||||
|
|
||||
|
template<DdType Type> |
||||
|
Dd<Type> const& DdMetaVariable<Type>::getCube() const { |
||||
|
return this->cube; |
||||
|
} |
||||
|
|
||||
|
// Explicitly instantiate DdMetaVariable.
|
||||
|
template<> class DdMetaVariable<CUDD>; |
||||
|
} |
||||
|
} |
@ -0,0 +1,101 @@ |
|||||
|
#ifndef STORM_STORAGE_DD_DDMETAVARIABLE_H_ |
||||
|
#define STORM_STORAGE_DD_DDMETAVARIABLE_H_ |
||||
|
|
||||
|
#include <memory> |
||||
|
#include <vector> |
||||
|
#include <cstdint> |
||||
|
#include <string> |
||||
|
|
||||
|
#include "src/storage/dd/CuddDdManager.h" |
||||
|
#include "src/storage/dd/CuddDd.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace dd { |
||||
|
|
||||
|
template <DdType Type> |
||||
|
class DdMetaVariable { |
||||
|
// Declare the other DD-related classes as friends so they can access the internals of a meta variable. |
||||
|
friend class Dd<Type>; |
||||
|
|
||||
|
/*! |
||||
|
* Creates a meta variable with the given name, range bounds. |
||||
|
* |
||||
|
* @param name The name of the meta variable. |
||||
|
* @param low The lowest value of the range of the variable. |
||||
|
* @param high The highest value of the range of the variable. |
||||
|
* @param ddVariables The vector of variables used to encode this variable. |
||||
|
* @param manager A pointer to the manager that is responsible for this meta variable. |
||||
|
*/ |
||||
|
DdMetaVariable(std::string const& name, int_fast64_t low, int_fast64_t high, std::vector<Dd<Type>> const& ddVariables, std::shared_ptr<DdManager<Type>> manager); |
||||
|
|
||||
|
// Explictly generate all default versions of copy/move constructors/assignments. |
||||
|
DdMetaVariable(DdMetaVariable const& other) = default; |
||||
|
DdMetaVariable(DdMetaVariable&& other) = default; |
||||
|
DdMetaVariable& operator=(DdMetaVariable const& other) = default; |
||||
|
DdMetaVariable& operator=(DdMetaVariable&& other) = default; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the name of the meta variable. |
||||
|
* |
||||
|
* @return The name of the variable. |
||||
|
*/ |
||||
|
std::string const& getName() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the lowest value of the range of the variable. |
||||
|
* |
||||
|
* @return The lowest value of the range of the variable. |
||||
|
*/ |
||||
|
int_fast64_t getLow() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the highest value of the range of the variable. |
||||
|
* |
||||
|
* @return The highest value of the range of the variable. |
||||
|
*/ |
||||
|
int_fast64_t getHigh() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the manager that is responsible for this meta variable. |
||||
|
* |
||||
|
* A pointer to the manager that is responsible for this meta variable. |
||||
|
*/ |
||||
|
std::shared_ptr<DdManager<Type>> getDdManager() const; |
||||
|
|
||||
|
private: |
||||
|
/*! |
||||
|
* Retrieves the variables used to encode the meta variable. |
||||
|
* |
||||
|
* @return A vector of variables used to encode the meta variable. |
||||
|
*/ |
||||
|
std::vector<Dd<Type>> const& getDdVariables() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the cube of all variables that encode this meta variable. |
||||
|
* |
||||
|
* @return The cube of all variables that encode this meta variable. |
||||
|
*/ |
||||
|
Dd<Type> const& getCube() const; |
||||
|
|
||||
|
// The name of the meta variable. |
||||
|
std::string name; |
||||
|
|
||||
|
// The lowest value of the range of the variable. |
||||
|
int_fast64_t low; |
||||
|
|
||||
|
// The highest value of the range of the variable. |
||||
|
int_fast64_t high; |
||||
|
|
||||
|
// The vector of variables that are used to encode the meta variable. |
||||
|
std::vector<Dd<Type>> ddVariables; |
||||
|
|
||||
|
// The cube consisting of all variables that encode the meta variable. |
||||
|
Dd<Type> cube; |
||||
|
|
||||
|
// A pointer to the manager responsible for this meta variable. |
||||
|
std::shared_ptr<DdManager<Type>> manager; |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* STORM_STORAGE_DD_DDMETAVARIABLE_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue