zoukankan      html  css  js  c++  java
  • 离散数学——逻辑推理系统

    逻辑判断-推理系统

    • 逻辑判断系统

    设计概要:

    根据联结词的优先级:¬∧∨→↔

    输入中缀逻辑式

    将之转化为后缀表达式

    得到公式模板(后缀式)和变量名集合

    构造<变量名,bool>的映射关系

    根据后缀式和 构造好的<变量-bool> 映射 可计算其真值

    类实现:

    C++:(初次实现,无图形界面)

    class Logic {

    public:

    方法:

    Logic();                                          //构造

    void Load(string);                                //input

    int priority(char);                               //获取运算符优先级

    string trans(string);                             //中缀式->后缀式

    bool calculate(string P, map<string, bool> V);    //真值计算

    void Creat_Table();        //创建真值表

    void ADD_MDF(int);                                //构造主析取范式

    void ADD_MCF(int);                                //构造主合取范式

     

    变量:

    string M_exp;                            //中缀式

    string P_exp;                            //后缀式

    map<string, bool> variate;               //翻译“字典”(变量->bool值)

    vector<map<string, bool, cmp>> Table;    //真值表二维映射组

    string MDF;                              //主析取范式

    string MCF;                              //主合取范式

    };

    Python:(以C++的类为基础,添加图形界面)

     

    真值表存储结构:<int,map<string,bool>> ,string-bool映射的动态数组

    以¬a^b→c为例

    将行号转化为二进制数,每一位二进制赋给对应变量,调用calculate函数计算结果,并将结果添加到真值表中。

    以这些基本方法和数据为基础就可以实现较复杂的功能。

    • 推理系统

    以判断系统为基础,推理系统无非是增加判断逻辑式为重言式

    输入前提:以逗号(,)分隔

    输入结论:

    假设前提为 ¬a∨b, b∧c

     结论为 a

    我所做的处理:前提两侧加”(“  ”)”,用”)∧(”替换逗号,再用”→”连接结论

    比如此时样例为 ((¬a∨b)∧( b∧c))→a,

    可通过逻辑判断系统,判断这个式子为重言式(真值表result全为1)

     

     

     

    • 使用说明

    优化:

    1. 限制键盘输入,只能输入字母和相应联结词
    2. 自动识别变量
    3. 当变量个数超过13,真值计算超过2^13次,排版会导致卡顿,修改:当变量个数超过13,不创建真值表,添加了一个查询控件,可以输入0/1序列查询真值。

     

    遗憾:

    1. 不能预先判断逻辑式是否合法
    2. ¬为单目运算符,实在想不到办法怎么与其他联结词区分
    3. 第一次是用C++写的代码,但在C++的图形界面出了点问题,这是用Python-tkinter写的,现学现卖,难免存在一些问题,代码很乱,可读性不高。

     

    推理系统,其实是以判断系统的功能为基础,做了一点点扩展。

    程序:

    源码:https://pan.baidu.com/s/1LLH__dtWTpdLmSHwqxatcw

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/F-itachi/p/9974341.html
Copyright © 2011-2022 走看看