Binary CUDD:BDD的操作 我正在使用CUDC++接口(),但是几乎没有关于这个库的信息。我想知道如何根据一个变量的值删除它
例如,我现在将下一个表存储在Binary CUDD:BDD的操作 我正在使用CUDC++接口(),但是几乎没有关于这个库的信息。我想知道如何根据一个变量的值删除它,binary,binary-decision-diagram,cudd,Binary,Binary Decision Diagram,Cudd,例如,我现在将下一个表存储在bdd中: |-----|-----|-----| | x1 | x2 | y | |-----|-----|-----| | 0 | 0 | 1 | |-----|-----|-----| | 0 | 1 | 1 | |-----|-----|-----| | 1 | 0 | 1 | |-----|-----|-----| | 1 | 1 | 0 | |-----|-----|-----| 我想根据x2的值将
bdd
中:
|-----|-----|-----|
| x1 | x2 | y |
|-----|-----|-----|
| 0 | 0 | 1 |
|-----|-----|-----|
| 0 | 1 | 1 |
|-----|-----|-----|
| 1 | 0 | 1 |
|-----|-----|-----|
| 1 | 1 | 0 |
|-----|-----|-----|
我想根据x2的值将上一个表拆分为两个独立的bdd
s,然后删除该节点:
如果x2=0
:
|-----|-----|
| x1 | y |
|-----|-----|
| 0 | 1 |
|-----|-----|
| 1 | 1 |
|-----|-----|
如果x2=1
:
|-----|-----|
| x1 | y |
|-----|-----|
| 0 | 1 |
|-----|-----|
| 1 | 0 |
|-----|-----|
<> P/> P> > CUD库的C++界面上几乎没有文档的原因是它只是C函数的包装器,有大量的文档。p>
C++包主要用于清除所有CUDDYRF(…)和CUDDYRelsivEDREF(…)调用C接口需要的代码。请注意,如果需要,也可以使用C++接口的C接口。
要完成您想做的事情,您必须将CUDD提供的布尔运算符组合在一起,以获得具有所需属性的新布尔函数 第一步是将s
限制为x=0和x=1的情况:
BDD s0 = s & !x;
BDD s1 = s & x;
正如您所注意到的,新的BDD(还)没有忘记x变量的值。你希望它们是“不在乎”的w.r.t,等于x的值。因为您已经知道x在s0和s1中被限制为一个特定值,所以可以使用存在抽象运算符:
s0 = s0.ExistAbstract(x);
s1 = s1.ExistAbstract(x);
请注意,x
在这里用作所谓的多维数据集(见下文)
这些是您现在想要的BDD
多维数据集解释:如果同时从多个变量中提取数据集,则应首先从要提取的所有变量中计算此类多维数据集。多维数据集主要用于表示一组变量。从数理逻辑中,我们知道,如果你存在或普遍地抽象出多个变量,那么抽象出这些变量的顺序并不重要。由于CUDD中的递归BDD操作尽可能在BDD对(或三元组)上实现,因此CUDD在内部也将一组变量表示为多维数据集,因此存在抽象操作可以只处理(1)要执行存在抽象的BDD,以及(2)表示要从中提取的变量集的BDD。多维数据集作为BDD的内部表示不应该与仅使用CUDD(而不是扩展CUDD)的开发人员相关,除非表示变量的BDDD也可以用作多维数据集。使用Python包的Cython绑定到CUDD的方法如下:,它使用常量值替换变量
x2
从dd导入cudd作为_bdd
bdd=_bdd.bdd()
bdd.declare('x1','x2')
#变量x1和x2的反合取
u=bdd.add_expr(“~(x1/\x2)”)
let=dict(x2=False)
v=bdd.let(let,u)
断言v==bdd.true,v
let=dict(x2=True)
w=bdd.let(let,u)
w=bdd.add_expr(“~x1”)
断言w==w(w,w)
通过将import语句从dd import autoref更改为
作为_bdd
,相同的代码在纯Python中运行。纯Python版本的dd
可以与pip install dd
一起安装。描述了使用模块dd.cudd
安装dd
。感谢您的回答,这非常有帮助。但我并不真正理解立方体的概念。我试图使用Cudd\u bddComputeCube()
函数,但是我没有得到我想要的BDD。@A.J.X我已经在答案(上面)中添加了对多维数据集背后思想的解释。