首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cudd_PrintMinterm,访问产品之和中的单个腹地

Cudd_PrintMinterm,访问产品之和中的单个腹地
EN

Stack Overflow用户
提问于 2020-08-09 13:10:01
回答 1查看 144关注 0票数 0

这可能是这个论坛的常驻CUDD/BDD专家@DCTLib的一个问题,但如果其他人有见解,当然欢迎!

考虑一个给定的腹地,比如:0--0-0

我需要分别取每一个城域网,并将" 1“替换为P(x_i) (我正在处理变量的概率),0替换为1-P(x_i),并将"-”替换为1。然后我将腹中的因子P(X_i).(1-P(X_j))相加,以获得最高事件的概率。(与腹壁相对应的概率的和积)

我需要一个接一个地使用它们的原因是,我正在处理的大型文件会炸掉memory.Once --我有80到100个变量,您在TB OoM中拥有整个minterm文本文件转储的大小。如果可能的话,我想把每个minterm,添加到运行和,并删除它一次。

希望这是明确的,但如果不是,可能需要一些迭代。谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-09 15:07:00

你在这里有几个选择:

( a)在BDD上似乎已经有了一个输出Cudd_PrintMinterm的文本文件。计算你的值的总和实际上不是一个CUDD问题。只需逐个解析行并动态计算和:

代码语言:javascript
复制
std::ifstream inFile("minterms.txt");
std::string currentLine;
double sumSoFar = 0;
while (std::getline(inFile,currentLine)) {
     // Process the line "currentLine"
};
if (inFile.fail()) throw "Oopsie";

但是您也可以在python中这样做。您可能需要使用这种方法来提高数值的准确性。

( b)按照描述问题的方式,不需要在中间层迭代,而是可以为每个BDD节点n分配一个概率p(n),并计算到根BDD节点的概率。这样做的方法是将概率1赋值给真叶,将概率0赋值给假叶,对于每个内部节点(t,e,x)有真正的继承者t,否则后继e和变量x计算。

代码语言:javascript
复制
p(n) = p(t)*p(x) + p(e)*(1-p(x))

那么p(根)就是你正在寻找的东西。这种方法更优雅,但要求您编写一个(通常是递归的)过程来处理BDD结构本身。这里有一个计算满意分配的示例(使用封装CUDDs自己类型的数据类型):https://github.com/VerifiableRobotics/slugs/blob/master/src/BFAbstractionLibrary/BFCudd.cpp

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63326728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档