Logic 从真值表创建简化有序二元决策图(ROBDD)

Logic 从真值表创建简化有序二元决策图(ROBDD),logic,solver,truthtable,binary-decision-diagram,Logic,Solver,Truthtable,Binary Decision Diagram,是否有一个软件包(最好是应用程序,而不是库)可以从给定的真值表(以某种文本格式)创建简化有序二元决策图(ROBDS)?对于任何BDD库,您都可以随心所欲。当然,您必须自己编写一段代码 如果您正在寻找一个轻量级工具,我经常使用这样的小程序快速查看函数的BDD: 您也可以尝试以下方法: 它是迄今为止我使用的BDD的最佳工具。BDD是一种内存受限的数据结构,因为它严重依赖于检测重复的子表。您会发现,大多数BDD软件包并不完全适合大型通用真值表,而是针对非常稀疏或高度重复的表达式进行了优化 使用标准BD

是否有一个软件包(最好是应用程序,而不是库)可以从给定的真值表(以某种文本格式)创建简化有序二元决策图(ROBDS)?

对于任何BDD库,您都可以随心所欲。当然,您必须自己编写一段代码

如果您正在寻找一个轻量级工具,我经常使用这样的小程序快速查看函数的BDD:

您也可以尝试以下方法:


它是迄今为止我使用的BDD的最佳工具。

BDD是一种内存受限的数据结构,因为它严重依赖于检测重复的子表。您会发现,大多数BDD软件包并不完全适合大型通用真值表,而是针对非常稀疏或高度重复的表达式进行了优化

使用标准BDD包,您可以使用对变量进行操作的表达式。所以你必须迭代你的真值表,在表中为1构造一个和的乘积表达式。在此过程中,大多数库将动态地重新排序变量以适应内存约束,从而导致另一个巨大的减速。在经历了大约24个变量之后,即使真值表非常稀疏,这些库也将开始对现代系统进行研究

如果只查找给定了一个已隐式定义了变量顺序的真值表的最终BDD节点,那么只需使用一些Unix文本处理工具,就可以跳过外部库和可怕的运行时带来的许多复杂性

关于BDD的一个很好的资源是Knuth的TaocpV4.1b,它展示了BDD节点及其“beads”的等价性,即非方形字符串的子真实表。我将讨论一个更简单的版本,ZDD,它具有类似的结构,称为“zeads”:部分子真实表,它们不是完全零。为了推广回BDD,将管道中的sed+grep替换为过滤方字符串的程序,而不是将正部分保留为非零字符串

要打印truthtable的所有Zead(以ascii“1”和“0”的单行文件形式给出,末尾换行),请在设置变量数和文件名后运行以下命令:

MAX=8; FILENAME="8_vars_truthtable.txt"; for (( ITER=0; ITER<=${MAX}; ITER++ )) ; do INTERVAL=$((2 ** ${ITER})); fold -w ${INTERVAL} ${FILENAME} | sed -n '1~2!p' | grep -v "^0*$" | sort -u ; done

MAX=8;FILENAME=“8_vars_truthtable.txt”;对于((ITER=0;ITER我也搜索了类似的东西,但找不到javascript实现

我现在创建了自己的模块,该模块能够从真值表中创建、最小化和排序优化bdd


提供的页面并非我想要的。我想提供一个真值表并计算它的ROBDD(即简化的OBDD),这是给定函数基于BDD的最小表示形式。该页面不允许这样做。好吧,它从作为表达式给出的函数(实际上不是真值表)中绘制ROBDD.输出是一个ROBDD,尽管标题上说只有BDD。或者您正在寻找最佳的变量顺序?