基于sympy计算离散数学命题逻辑表达式的真值表、合取/析取范式以及随机生成真值表并由真值表中真值分布求取对应的真值函数或决策函数——在特征组合分类获取特征函数时有用

该文展示了如何使用Sympy库进行命题逻辑表达式的处理,包括定义符号变量,构建逻辑表达式,生成真值表,判断表达式的可满足性,以及转换为合取范式和析取范式。此外,还介绍了从随机真值表中提取决策函数的积和形与和积形表达,并通过示例验证了表达式的正确性。这种方法可用于多元特征选择和二值分类问题。
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(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值