我正在与(https://github.com/ivmai/cudd)合作,目标是执行以下重复过程:
(1) 输入:(相干,非递减)布尔函数表达式 top = a_1 a_2 a_3...+ x_1 x_2 x_3... + z_1 z_2 z_3...)。我正在使用的布尔值有数千个变量(ai...zj)和数百个术语。
(2) 处理:将布尔值转换为 BDD 以简化最小项或互斥割集(我们在可靠性世界中称之为)的计算。
(3) 输出:取一组我的最小割集(minterms)。通过将 (2) 中找到的所有小项相加来计算顶部事件概率。
我找到了一种使用劳动密集型手动 C 接口来构建布尔值的方法。我还发现了如何使用出色的 tulip-dd Py 界面来实现它,但无法像 cudd 那样进行扩展。
现在我希望通过 cudd 的 C++ 接口,我可以两全其美(我要求太多了吗?)也就是说,tulip-dd 的便利性和 cudd 的可扩展性。所以这里有一些示例代码。我失败的地方是第 3 步,打印出我以前可以在 C 中完成的最小术语。我如何使用 C++ 接口来完成它?!请参阅代码中的注释以了解我的具体想法和尝试。
int main()
{
/*DdManager* gbm; /* Global BDD manager. I suppose we do not use this if we use the Cudd type below.*/
/* (1-2) Declare the vars and build the Boolean. Convert Boolean to BDD */
Cudd mgr(0, 0);
BDD a = mgr.bddVar();
BDD b = mgr.bddVar();
BDD c = mgr.bddVar();
BDD d = mgr.bddVar();
BDD e = mgr.bddVar();
BDD top = a*(b + c + d*e);
/* How to print out the equivalent to below, which prints out all minterms and their relevant vars in C.
But the mgr below has to be a *DManager ? If so, how to convert? */
Cudd_PrintDebug(mgr, BDD, 2, 4);
return 0
}
谢谢,桂