FM to BDD
This transformation converts a feature model into a Binary Decision Diagram (BDD) representation. BDDs are efficient for representing and manipulating logical functions, making them ideal for feature model analysis.
flamapy relies on file extensions to identify the required transformation. Ensure you specify the correct file extension for this transformation.
Code Examples
from flamapy.metamodels.fm_metamodel.transformations.featureide_reader import FeatureIDEReader
from flamapy.metamodels.bdd_metamodel.transformations.fm_to_bdd import FmToBDD
# Load the feature model from a FeatureIDE file
feature_model = FeatureIDEReader('path/to/feature/model.xml').transform()
# Transform the feature model into a BDD representation
bdd_model = FmToBDD(feature_model).transform()
print(bdd_model)
Building large BDDs
The size of a BDD, and the cost of building it, depend on the order of its variables.
FmToBDD builds the BDD clause by clause over a feature-tree variable order. With dd
built against CUDD it also reorders variables dynamically. A native builder (Logic2BDD on
CUDD, by D. Fernández-Amorós, UNED) is in preparation and not part of 2.9. These options can
be passed to FmToBDD(...) or set with environment variables:
| Option | Environment variable | Values (default first) |
|---|---|---|
builder |
FLAMAPY_BDD_BUILDER |
python; native and auto are experimental |
var_order |
FLAMAPY_BDD_VAR_ORDER |
tree, force, model |
build |
FLAMAPY_BDD_BUILD |
incremental, monolithic (Python builder) |
clause_order |
FLAMAPY_BDD_CLAUSE_ORDER |
minspan, minmax, model (Python builder) |
reorder |
FLAMAPY_BDD_REORDER |
auto, 1, 0 (Python builder) |
bdd_model = FmToBDD(feature_model, builder="python", var_order="force").transform()
The options change how the BDD is built, never the configurations it represents.