首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyeda方法“抽象语法树”

pyeda方法“抽象语法树”
EN

Stack Overflow用户
提问于 2020-05-06 05:15:33
回答 1查看 52关注 0票数 2

我真正想做的是将布尔表达式转换为整数线性规划约束。我尝试首先将表达式转换为CNF (使用pyeda),然后从CNF形式转换为约束(因为这非常简单)。但是,我在理解.to_ast()函数输出的抽象语法树时遇到了麻烦。例如,在expression (~C1 | ~P1 | ~O1) & (~C1 | ~P1 | ~O2)上运行.to_ast()时,输出为

代码语言:javascript
复制
('and', ('or', ('lit', -1), ('lit', -2), ('lit', -3)), ('or', ('lit', -1), ('lit', -2), ('lit', -4)))

很明显,-是否定的,而整数表示其中一个变量。有没有人知道从整数到变量的映射?简短问题的详细描述...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-06 17:21:31

是的,您正在查看的整数是文本上的'uniqid‘属性。

代码语言:javascript
复制
>>> from pyeda.inter import *
>>> C1, P1, O1, O2 = map(exprvar, "C1 P1 O1 O2".split())
>>> f = (~C1 | ~P1 | ~O1) & (~C1 | ~P1 | ~O2)
>>> f.to_ast()
('and',
 ('or', ('or', ('lit', -1), ('lit', -2)), ('lit', -3)),
 ('or', ('or', ('lit', -1), ('lit', -2)), ('lit', -4)))
>>> C1.uniqid, P1.uniqid, O1.uniqid, O2.uniqid
(1, 2, 3, 4)
>>> (~C1).uniqid, (~P1).uniqid, (~O1).uniqid, (~O2).uniqid
(-1, -2, -3, -4)

如果需要,您可以直接访问内部映射,但它需要一些特殊知识:

代码语言:javascript
复制
>>> from pyeda.boolalg.expr import _LITS
>>> _LITS
{1: C1, 2: P1, 3: O1, 4: O2, -1: ~C1, -2: ~P1, -3: ~O1, -4: ~O2}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61623196

复制
相关文章

相似问题

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