AI-产生式系统-动物识别

简介


用Python编写的人工智能小程序,实现了基于产生式系统的简易动物识别系统,实现了推理机与规则的分离,用户可以添加新的规则或者删除已有的规则而不影响推理机的正常运行。

源代码



from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from PIL import Image,ImageTk


group_o_animal = []     # 存放动物文件原始数据
group_o_cond = []       # 存放条件文件原始数据
group_o_rule = []       # 存放规则文件原始数据
group_animal = []       # 存放所有动物种类
group_database = []     # 存放动态数据库内容
group_all_rule = []     # 存放所有规则
group_test_rule = []    # 存放待测试规则
group_use_rule = []     # 存放推理过程使用规则
group_con_anim = []     # 存放条件加动物
group1 = []             # 存放条件

root = Tk()
root.title("产生式规则--动物识别系统")

# 读取所有动物种类
sv_anm = StringVar()
def read_animal():
    group_o_animal[:] = []
    group_animal[:] = []
    animal_file = open("files/animal.txt")
    for each_line in animal_file:
        group_o_animal.append(each_line)
        (each_str1, each_str2) = each_line.split(";")
        group_animal.append(each_str1)
    animal_file.close()
    sv_anm.set(group_animal)

read_animal()

# 读取所有规则
def read_rule():
    group_o_rule[:] = []
    group_all_rule[:] = []
    all_rule_file = open("files/rule.txt")
    for each_line in all_rule_file:
        group_o_rule.append(each_line)
        (str1, str2) = each_line.split(' --> ')
        (str3, str4) = str2.split(';')
        str5 = str1.split(',')
        grp1 = []
        grp2 = [str3]
        for i in str5:
            grp1.append(i)
        grp2.insert(0, grp1)
        group_all_rule.append(grp2)
    all_rule_file.close()

read_rule()

# 条件选项
frame1 = Frame(root)
frame1.grid(row=0, column=0, columnspan=2, padx=30, pady=35)
sb1 = Scrollbar(frame1)
sb1.pack(side=RIGHT, fill=Y)

v1 = StringVar(value=group1)

def read_cond():
    group_o_cond[:] = []
    group1[:] = []
    con_file = open("files/condition.txt")
    for each_line in con_file:
        group_o_cond.append(each_line)
        (each_str1, each_str2) = each_line.split(";")
        group1.append(each_str1)
    con_file.close()
    v1.set(group1)

read_cond()

lb1 = Listbox(frame1, listvariable=v1, width=23, selectmode=EXTENDED, yscrollcommand=sb1.set)

lb1.pack(side=LEFT, fill=BOTH)
sb1.config(command=lb1.yview)   # 设置为鼠标可拖拽

# 更新条件加动物集合
ca_sv = StringVar()
def update_con_anim():
    group_con_anim[:] = group1[:]
    for i in group_animal:
        group_con_anim.append(i)
    ca_sv.set(group_con_anim)

update_con_anim()
ca_sv.set(group_con_anim)

# 使用规则
frame2 = Frame(root)
frame2.grid(row=0, column=2, padx=30, pady=35)
sb2 = Scrollbar(frame2, orient=HORIZONTAL)
sb2.pack(side=BOTTOM, fill=X)
sb2_1 = Scrollbar(frame2)
sb2_1.pack(side=RIGHT, fill=Y)

group2 = ["使用规则:"]
v2 = StringVar(value=group2)

lb2 = Listbox(frame2, listvariable=v2, width=35, xscrollcommand=sb2.set, yscrollcommand=sb2_1.set)

lb2.pack(side=LEFT, fill=BOTH)
sb2.config(command=lb2.xview)
sb2_1.config(command=lb2.yview)

# 添加按钮响应函数
def callback1_1():
    # 获取用户选中的条件的索引值
    curselection1_1 = lb1.curselection()
    # 将用户选中的规则添加到“已添加规则”里
    for i in curselection1_1:
        lb1.select_clear(i)
        if group1[i] not in group4:
            group4.append(group1[i])
            v4.set(group4)

# 添加按钮
button1_1 = Button(root, text="添加", width=7, command=callback1_1)
button1_1.grid(row=1, column=0, padx=18)

# 删除按钮响应函数
def callback1_2():
    # 获取用户选中的条件的索引值
    curselection1_2 = lb4.curselection()
    # 将索引值下标顺序反序,删除时从后往前删除
    curselection1_3 = []
    for i in curselection1_2:
        curselection1_3.insert(0,i)
    # 将用户选中的规则添加到“已添加规则”里
    for i in curselection1_3:
        lb4.select_clear(i)
        group4.pop(i)
        v4.set(group4)

# 删除按钮
button1_2 = Button(root, text="删除", width=7, command=callback1_2)
button1_2.grid(row=1, column=1, sticky=W)

# 已添加条件
frame4 = Frame(root)
frame4.grid(row=2, column=0, rowspan=5, columnspan=2, padx=30, pady=35)
sb4 = Scrollbar(frame4)
sb4.pack(side=RIGHT, fill=Y)

group4 = []
v4 = StringVar(value=group4)
lb4 = Listbox(frame4, fg="blue", listvariable=v4, width
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值