Sympy玩转逻辑符号运算

作者: 阿狸不歌 | 来源:发表于2019-03-27 15:52 被阅读0次

    读《计算机科学精粹》一书的时候,发现很多时候需要用到符号运算,本来想自己写一个的,后来发现sympy 把事情都做好了,而且sympy在 jupyter scipy-notebook 里面就有,用起来实在是非常的方便。

    计算机科学精粹

    下面就试做一下 第一章 1.2 逻辑中的题目,用以抛砖引玉

    过热的服务器💥如果服务器过热且空调关闭,会导致服务器崩溃;如果服务器过热且机箱冷却器失效,同样会导致服务器崩溃。那么服务器需要满足哪些条件才能正常工作?

    符号分配

    '''
    A: 服务器过热。
    B: 空调关闭
    C: 机箱冷却器失效
    D: 服务器崩溃
    '''
    from sympy.logic import *
    from sympy import symbols, Symbol
    A = Symbol("服务器过热")          # 声明一个符号
    B, C = symbols("空调关闭, 机箱冷却器失效")    # 声明多个符号,用“逗号”或“空格” 分割
    D = (A & B) | (A & C)       # 即 ( A AND B ) OR ( A AND C )   , D 为服务器崩溃
    
    单独输出表达式 D单独输出表达式 D

    采用分配律对上式进行因式分解

    from sympy.logic.boolalg import simplify_logic
    D = simplify_logic(D)
    D
    
    因式分解 可以用 simplify_logic因式分解 可以用 simplify_logic

    当满足条件!D服务器可以正常工作。相应的换质位形式为

    ~D
    
    !D!D

    采用德摩根定律去除括号

    '''
    ~A: ~服务器过热    == 服务器没有过热
    ~B: ~空调关闭      == 空调正常工作
    ~C: ~机箱冷却器失效 == 机箱冷却正常工作
    ~D: ~服务器崩溃    == 服务器正常工作
    '''
    from sympy.logic.boolalg import to_dnf
    to_dnf(~D)
    
    去除括号去除括号

    从上式可知,只要满足条件 !A(服务器没有过热)或 !B AND !C(空调和机箱冷却器均正常工作),服务器就能正常工作。


    小结

    sympy 几乎涵盖了各种各样的数学符号运算,逻辑符号运算只是其中小小的一部分,其它强大的功能值得进一步发掘!

    相关文章

      网友评论

        本文标题:Sympy玩转逻辑符号运算

        本文链接:https://www.haomeiwen.com/subject/iqnzvqtx.html