问题标签 [pyeda]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
164 浏览

python - 如何使用包含布尔表达式的字符串创建 PyEDA 布尔表达式?

我正在( (A & B) | (C & ~D) )从前端获取布尔表达式。我需要将其转换为 PyEDA 可以解决的布尔表达式。在 PyEDA 中编写布尔表达式有两个步骤。

  1. A,B,C,D = map(exprvar, "abcd") - This becomes a problem when number of boolean variables are dynamic使用或创建布尔变量 A、B、C、D A = exprvars("a", 4) - solves the dynamic variable issue but need to convert letters in the equation to A[0],A[1]...
  2. 将表达式写为( (A & B) | (C & ~D) )

尝试了以下方法。boolean_exp 表示布尔表达式字符串,num_variables 表示字符串中变量的数量。

这种方法不起作用,因为创建的表达式和变量是字符串类型,而正确的类型应该是<class 'pyeda.boolalg.expr.OrOp'>表达式和<class 'pyeda.boolalg.expr.variables'>​​变量。

在交互模式下,我们可以轻松地完成上述步骤,但是如何在脚本模式下使用从前端发送的具有动态变量数量的布尔表达式字符串来构建这个表达式?

0 投票
1 回答
122 浏览

data-structures - 有效地创建结构化的二元决策图

我正在尝试创建具有特定结构的 BDD。我有一个布尔变量 x_i 的一维序列,例如 x_1、x_2、x_3、x_4、x_5。如果没有孤立的一或零(可能在边缘除外),我的条件就满足了。

我已经使用pyeda实现了这一点,如下所示。该条件相当于检查连续的三元组 ([x_1, x_2, x_3]; [x_2, x_3, x_4]; ...) 并检查它们的真值是否为 [[1,1,1], [0, 0,0],[1,1,0],[0,1,1],[1,0,0],[0,0,1]]。

最终的图表如下所示:

BDD

这适用于短序列,但是当长度超过 25 时,最后的减少变得非常缓慢。我想要一些适用于更长序列的东西。

我想知道在这种情况下直接构建 BDD 是否更有效,因为问题有很多结构。但是,我找不到任何方法来直接在 pyeda 中操作 BDD。

有谁知道我怎样才能更有效地完成这项工作?

0 投票
1 回答
26 浏览

pyeda - 如何将否定传播到文字?

我想转换一个表达式,以便所有否定运算符都向下传播到文字。就这样~(a | b)变成了~a & ~b。有人对此有解决方案吗?

0 投票
0 回答
40 浏览

solver - 如何使用 Python 解决以字符串格式给出的布尔表达式?

我试图解决以字符串格式表示的布尔表达式 ( ( i_0 & i_1 ) ^ i_2 ) ^ i_3

使用 PyEDA 包,我可以将文本转换为表达式,如下所示:

变量的数量(i_0、i_1、i_2、...)可以达到 1000 秒。要执行的操作是基本的布尔操作,即。与、或、非、异或

现在我怎样才能为这个表达式提供输入并解决它?输入可以是常量或 NumPy 数组。

我做得对还是 PyEDA 只能用于将文本转换为表达式?

如果有任何其他方法可以解决此问题,请提供帮助。

谢谢!

0 投票
1 回答
14 浏览

python - 用于表示点与不等式 DNF 之间的距离的 Python 库

让我们将变量的数量固定为 4:x0、x1、x2、x3。

我正在寻找一个允许我执行以下操作的 python 构造:

(i) 将析取正规公式存储在内存中,其中原子公式为不等式:a0x0 + a1x1 + a2x2 + a3x3 >= a4 或等式:a0x0 + a1x1 + a2x2 + a3x3 == a4。

(ii) 给定一个不在 DNF 中的公式,我有一个函数可以将其转换为该公式。

(iii) 给定一个点 (u1,u2,u3,u4),我可以找到该点到 DNF 公式的设定距离。

我知道 numpy 允许我编写原子公式并计算它们与点的距离,但它不允许我编写它们的连词或析取词;而且我无法计算从点到 DNF 的设定距离。

我什至检查了 pyeda,但原子公式必须是布尔变量,并且不允许不等式和等式。

我可以重写整个代码来为 DNF 定义我自己的类,并定义我自己的距离函数,但我不想重新发明轮子。我可以使用哪些 python 库(以及如何)让我以最简单的方式完成我的任务?