from sympy import symbols, satisfiable, simplify_logic, true, false, And, Or, Not
from sympy.logic.boolalg import ANFform, truth_table, BooleanTrue, to_cnf, to_dnf
# Sum Of Production Form积和式, Production of Sum Form和积式
from sympy.logic import SOPform, POSform
import numpy as np
from itertools import combinations
# 逻辑运算符:~否定,&合取,|析取,!=异或,>>蕴含,==等价
# 定义符号变量
p, q, r = symbols('p q r')
# 定义命题逻辑表达式
exp = (p | q >> r) >> p
# 用真值表法输出表达式的所有值
table = truth_table(exp, [p, q, r])
print('真值表')
print('p q r -> exp')
print('-' * 15)
for t in table:
[pv, qv, rv], rst = t
print(pv, qv, rv, '->', int(rst == true))
# 判断表达式的可满足性并求解
print('逻辑表达式可满足性判别并求解')
models = satisfiable(exp, all_models=True)
if models:
rst = list(models)
data = []
varNames = []
for dv in rst:
if len(varNames) == 0:
varNames = list(dv.keys())
data.append([int(v) for v in list(dv.values())])
#rst.append(
基于sympy计算离散数学命题逻辑表达式的真值表、合取/析取范式以及随机生成真值表并由真值表中真值分布求取对应的真值函数或决策函数——在特征组合分类获取特征函数时有用
于 2023-01-15 02:42:35 首次发布
该文展示了如何使用Sympy库进行命题逻辑表达式的处理,包括定义符号变量,构建逻辑表达式,生成真值表,判断表达式的可满足性,以及转换为合取范式和析取范式。此外,还介绍了从随机真值表中提取决策函数的积和形与和积形表达,并通过示例验证了表达式的正确性。这种方法可用于多元特征选择和二值分类问题。

4701

被折叠的 条评论
为什么被折叠?



