首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从可用的数据结构生成二进制决策图

从可用的数据结构生成二进制决策图
EN

Stack Overflow用户
提问于 2020-04-22 15:33:00
回答 1查看 1.1K关注 0票数 2

这个问题有点长,请原谅我。

我有一个包含像这个{x1, x2, x3, x4, x5}这样的元素的数据结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{0 0 0 0 0, 0 0 0 1 0, 1 1 1 1 0,.....}

它们表示真值表中的所有TRUEs。当然,这个集合中不存在的5位字符串元素对应于真值表中的。但我没有对应于上述集合数据结构的布尔函数。

我看到了这个问题,但是这里所有的答案都假设布尔函数是给定的,这不是真的。

我需要构建一个ROBDD,然后从给定的集合数据结构到ZDD。最好使用可用的python包,如这些

专家有什么建议吗?我相信在这方面已经做了很多工作。

EN

回答 1

Stack Overflow用户

发布于 2020-05-12 09:02:08

使用package dd (可以使用带有pip install dd的包管理器pip安装),可以将布尔函数为TRUE的一组变量赋值转换为二进制决策图。

下面的Python示例假设函数为TRUE的赋值是一组字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dd import autoref as _bdd


# assignments where the Boolean function is TRUE
data = {'0 0 0 0 0', '0 0 0 1 0', '1 1 1 1 0'}

# variable names
vrs = [f'x{i}' for i in range(1, 6)]
# convert the assignments to dictionaries
assignments = list()
for e in data:
    tpl = e.split()
    assignment = {k: bool(int(v)) for k, v in zip(vrs, tpl)}
    assignments.append(assignment)

# initialize a BDD manager
bdd = _bdd.BDD()
# declare variables
bdd.declare(*vrs)
# create binary decision diagram
u = bdd.false
for assignment in assignments:
    u |= bdd.cube(assignment)

# to confirm
satisfying_assignments = list(bdd.pick_iter(u))
print(satisfying_assignments)

为了更快地实现BDD,以及使用C库卡德实现ZDD,可以按以下方式安装Cython模块扩展dd.cudddd.cudd_zdd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip download dd --no-deps
tar xzf dd-*.tar.gz
cd dd-*
python setup.py install --fetch --cudd --cudd_zdd

对于这个(小的)例子,纯Python模块dd.autoref和Cython模块dd.cudd之间没有实际的速度差别。

可以使用以下代码将上述二元决策图(BDD)复制到零抑制二进制决策图(ZDD)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from dd import _copy
from dd import cudd_zdd


# initialize a ZDD manager
zdd = cudd_zdd.ZDD()
# declare variables
zdd.declare(*vrs)
# copy the BDD to a ZDD
u_zdd = _copy.copy_bdd(u, zdd)

# confirm
satisfying_assignments = list(zdd.pick_iter(u_zdd))
print(satisfying_assignments)

模块dd.cudd_zdd是在dd == 0.5.6中添加的,因此上述安装需要从PyPIGitHub存储库下载dd >= 0.5.6发行版。

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

https://stackoverflow.com/questions/61376862

复制
相关文章
二进制决策图:从树压缩到采样
摘要:任何布尔函数都对应于完整的完整二进制决策树。该树又可以以最大的紧凑形式表示为直接非循环图(\ textsc {dag}),其中共同子树被分解和共享,仅保留每个唯一子树的一个副本。这产生了着名且广泛使用的结构,称为简化有序二元决策图(\ textsc {robdd})。我们建议重新审视经典压缩过程,以提供一种新的方法来枚举给定大小的\ textsc {robdd},而不考虑完全展开的树和压缩步​​骤。我们的方法还为\ textsc {robdd}的集合提供了一个无人值守的过程。作为副产品,我们为\ textsc {robdd}获取一个随机的统一且详尽的采样器,用于给定数量的变量和大小。为了提高效率,我们的算法依赖于预计算步骤。最后,我们提供了一些关键的想法,将方法扩展到其他压缩策略,与\ textsc {bdd} s的变体(即\ textsc {qbdd} s和\ textsc {zbdd} s)相关。
罗大琦
2019/07/18
8920
图的数据结构_数据结构关于图的算法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170982.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
4560
图的数据结构_数据结构关于图的算法
从数据结构到算法:图网络方法初探
本文作者朱梓豪为中科院信工所在读硕士,主要研究方向为图神经网络、视觉问答、视觉对话等。
机器之心
2019/08/16
6720
从数据结构到算法:图网络方法初探
数据结构之图的脑图
?
互联网金融打杂
2018/04/03
1.1K0
数据结构之图的脑图
数据结构与算法(十三)——连通图的最小生成树问题
一个连通图的生成树指的是,极小的连通子图,它含有图中的全部n个顶点,但是只足以构成一棵树的(n-1)条边。
拉维
2022/06/15
3.9K0
数据结构与算法(十三)——连通图的最小生成树问题
攻击推理-如何利用威胁情报报告生成可用攻击子图
当前企业环境面临的攻击越来越趋于隐蔽、长期性,为了更好的针对这些攻击进行有效的检测、溯源和响应,企业通常会部署大量的检测设备。安全运营人员需要根据这些检测设备的日志和告警来对攻击事件进行检测与溯源。然而攻击技术的发展通常领先于检测设备检测能力。当新攻击技术或是新漏洞被发现时,通常是以报告的形式公开,针对这些新攻击的检测能力往往很难快速的部署到检测设备中。
绿盟科技研究通讯
2021/11/17
9470
攻击推理-如何利用威胁情报报告生成可用攻击子图
决策树算法在高可用系统中的运用
决策树算法是机器学习中常见的一种算法,但它的应用远不止于此。本文将展示如何在高可用系统中使用决策树算法来选择最佳的主节点。我们会使用Go语言进行示例说明。
运维开发王义杰
2023/08/10
2100
决策树算法在高可用系统中的运用
从决策者的角度理解 DevOps
在上两篇的文章中,我们分别从【员工】和【Leader】的角度去理解了 DevOps。
尹东勋
2021/10/19
7401
从决策者的角度理解 DevOps
Kubernetes 1.22.1 高可用二进制部署
kube.config 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书
云原生运维
2021/09/17
5.5K1
Kubernetes 1.22.1 高可用二进制部署
【数据结构】图—图的连通分量
建立邻接矩阵,用DFS的方式遍历图,如果只需要从一个节点出发就能遍历所有节点,那么只有一个联通分量,如果需要从多个节点出发才能遍历完所有节点,那么有多个联通分量。
叶茂林
2023/07/30
2730
图的遍历 - 数据结构
图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的其它算法如求解图的连通性问题,拓扑排序,求关键路径等都是建立在遍历算法的基础之上。
黄规速
2022/04/14
5180
图的遍历 - 数据结构
数据结构 图的遍历
图的遍历分为深度优先遍历(Depth_First_Search)和广度优先遍历(Breadth_First_Search),
全栈程序员站长
2022/08/12
5130
数据结构 图的遍历
数据结构 图
1-1 无向连通图至少有一个顶点的度为1 错误: 无向连通图考点: 1. 每条边连接两个顶点,所有顶点的度之和等于边数的2倍 2.记住两个特殊的无相连通图模型: A: B: 1-2 用邻接表法存储图
Kindear
2018/01/15
1.8K0
数据结构 图
从 0 开始学习 JavaScript 数据结构与算法(十二)图
在计算机程序设计中,图也是一种非常常见的数据结构,图论其实是一个非常大的话题,在数学上起源于哥尼斯堡七桥问题。
XPoet
2021/04/26
6950
数据结构——图
图是一组由边连接的顶点。任何二元关系都可以用图来表示。社交网络、道路等都可以用图来表示。
多云转晴
2020/05/21
9130
数据结构-图
图就是由一些点与边组成,点之间是边,边两头有点,类似于我们所画的思维导图。根据点之间连接的边是否有具体指向区分为『有向图』和『无向图』。
小闫同学啊
2020/02/19
7910
数据结构:图
无论是有向图还是无向图,主要的存储方式都有两种:邻接矩阵和邻接表。前者图的数据顺序存储结构,后者属于图的链接存储结构。
HLee
2021/01/19
2K0
数据结构:图
从决策树到XGBOOST
XGBoost在机器学习领域可谓风光无限,作为从学术界来的模范生,帮助工业界解决了许多实际问题,真可谓:
西西木木
2020/06/07
1.5K0
数据结构-图
图是不同于前面两种数据结构的另一种新的数据结构,线性表中元素与元素之间是被串起来的,每个数据元素只有一个直接前驱和一个直接后继,是一种一对一的数据结构;在树的结构中,数据元素之间有明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中的一个元素相关,是一种一对多的数据结构举个例子就是你可以有多个孩子,但是只能有一对父母。但现实中的情况是,人与人之间的关系是复杂的,不是简单的线性关系,也不全是层级关系,而可能交叉相互关系,也就是多对多的数据情况,这就图的一个概念,图是一种多对多的数据结构。
张俊红
2018/10/08
1K0
数据结构-图
数据结构——图
设图 A = (V, E) 有 n 个顶点,则图的邻接矩阵是一个二维数组 A.Edgen,定义为:
ruochen
2021/06/29
8360
数据结构——图

相似问题

是否有成熟的二进制决策图工具可用?

40

在决策树上生成决策曲面图时出错

10

从Python中的数据学习二进制决策图(BDDs)

154

SML中二进制决策图的恢复

10

使用rpart生成sankey图的决策树

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文