model-checking - CUDD:ZDD 的量化
问题描述
我正在使用 CUDD ( https://github.com/ivmai/cudd ) 使用 bdd 和 zdd 功能进行模型检查,我想知道如何量化 zdds。
对于 bdd,有 bddExistAbstract 和 bddUnivAbstract 函数(参见http://web.mit.edu/sage/export/tmp/y/usr/share/doc/polybori/cudd/cuddAllDet.html#Cudd_bddUnivAbstract)。
该手册说,这些函数普遍地和存在地从 bdd 中抽象出给定的变量(以封面形式)。我不太清楚“抽象出来”是什么意思,因此我坚持弄清楚量化如何改变 zdds。
你们能帮忙吗?谢谢。
解决方案
Python 包dd
实现了到 CUDD 的 Cython 接口,该接口通过量化扩展了 CUDD 的 ZDD 功能。例如,要在 ZDD 上使用存在量化:
from dd import cudd_zdd
zdd = cudd_zdd.ZDD() # create a ZDD manager
zdd.declare('x', 'y') # add variables to the manager
u = zdd.add_expr(r'x /\ y') # create a BDD `u` for the expression x /\ y
v = zdd.exist(['y'], u) # quantify over variable y, i.e., compute \E y: x /\ y
>>> zdd.to_expr(v) # convert to an expression as string
'x'
ZDD 量化的实现可以在以下位置找到:
并且出于开发目的还存在许多 Python 级别的实现:
该软件包dd
可以从PyPI安装,带有pip install dd
. 这将在 Linux 上安装 CUDD 绑定。在 macOS 上,与 CUDD 的绑定需要从 的源代码编译dd
,因此 macOS 的安装变为:
pip download dd --no-deps
tar xzf dd-*.tar.gz
cd dd-*/
python setup.py install --fetch --cudd --cudd_zdd
如文件README.md中所述。
推荐阅读
- python - 线性回归的无穷大值误差
- swift - 如何在 do-catch 块之前初始化结构
- javascript - 如何在 node.js ES5 中分解多个文件中的方法链接以进行模块化?
- python - 在 Azure 上运行 Python 代码所需的 CPU 和 RAM
- javascript - 如何将 marklogic 文档复制到 unix 主机位置
- snowflake-cloud-data-platform - 如何跨列查找和计算唯一值?
- google-apps-script - 如果 Google Script 的“我的执行”显示脚本未在指定时间内运行,如何获得通知
- html - 带有大下拉菜单的导航栏菜单
- corda - 如何在 Corda 中检索交易列表的交易 ID (txhash)
- react-native - 当 DatePicker 的 onDateChange 时 setState 未定义