产生式系统
概念
产生式系统(production system)是指认知心理学程序表征系统的一种。为解决某一问题或完成某一作业而按一定层次联结组成的认知规则系统。
原理
产生式系统由规则库、推理机、综合数据库,控制程序四部分组成。其中,规则库里面存储大量的知识,综合数据库则是储存事实,综合数据库通过推理机根据规则库里面的知识,由控制程序的控制下完成推理,若是推出中间结果,则把中间结果放到综合数据库中,继续重新推理,直到推理出最终结果或推理失败,程序结束。
例子
下面我们就以交通工具识别系统为例,用java编写。
规则库:
R1:it_is(车),postive(体型小),postive(有轮子);
R2:it_is(飞机),postive(体型大),postive(流线型);
R3:it_is(飞机),postive(天上飞的);
R4:it_is(船),postive(水上游的);
R5:it_is(车),postive(地上跑的);
R6:trto_is(轮船),it_is(船),postive(体型大),postive(冒黑烟);
R7:trto_is(航天飞机),it_is(飞机),postive(有机翼);
R8:trto_is(直升机),it_is(飞机),postive(有螺旋桨);
R9:trto_is(汽车),it_is(车),postive(四个轮);
R10:trto_is(两轮车),it_is(车),postive(两个轮);
代码:
MainGui.java
该类为主界面类,调用GuiFrame类(自定义的类,代码在后面)显示主窗口。
package chanshengsi01;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class MainGUI {
public static void main(String[] args) {
GuiFrame g=new GuiFrame("交通工具识别");//主窗口
}
}
GuiFrame.java
该类主要实现主界面的布局,以及两个按钮的监听器。点击匹配按钮会调用Brain(自定义的类,代码在后面)类的identify函数,来根据输入到综合数据库的事实去匹配结果。点击查看规则按钮会调用GuiRules(自定义的类,代码在后面)显示出规则库里面的知识。
package chanshengsi01;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class GuiFrame extends JFrame {
JButton button;//匹配按钮
JButton button1;//查看规则按钮
JLabel label;//标题标签
JLabel label_result;//结果标签
JTextField textField1;//输入框1
JTextField textField2;//输入框2
JTextField textField3;//输入框3
JTextField textField4;//输入框4
Container contentPane;
public GuiFrame(String title) {
super(title);
this.setSize(330, 350);
this.setLocation(350, 150);
this.setDefaultLookAndFeelDecorated(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("匹配");
button.setBounds(60, 168, 75, 30);
button1 = new JButton("查看规则");
button1.setBounds(150, 168, 100, 30);
label = new JLabel("设置事实:");
label.setBounds(120, 2, 90, 50);
label_result = new JLabel("最终结果是:");
label_result.setBounds(60, 210, 200, 20);
textField1 = new JTextField(16);
textField1.setBounds(55, 40, 200, 23);
textField2 = new JTextField(16);
textField2.setBounds(55, 72, 200, 23);
textField3 = new JTextField(16);
textField3.setBounds(55, 104, 200, 23);
textField4 = new JTextField(16);
textField4.setBounds(55, 136, 200, 23);
contentPane = this.getContentPane();
contentPane.setLayout(null);
// 添加控件
contentPane.add(label);
contentPane.add(textField1);
contentPane.add(textField2);
contentPane.add(textField3);
contentPane.add(textField4)