Pequeño sistema experto basado en sistema de producción-reconocimiento de animales.

1. Sistema de producción

  1. Introducción a los sistemas de producción.

Un sistema de producción se refiere a un conjunto de producciones que cooperan y trabajan juntas para resolver un problema. Un sistema de producción generalmente consta de tres partes básicas: una base de reglas, una base de datos completa y un motor de inferencia.

La base de reglas, también conocida como base de conocimientos, es una colección de conocimientos en un determinado campo expresado en forma de reglas. La colección contiene el estado inicial del problema y todas las reglas de cambio necesarias para transformarlo al estado objetivo.

La base de datos integral, también conocida como base de datos de hechos, es una recopilación de datos que se utiliza para almacenar información diversa actualmente relacionada con la resolución de problemas. Incluye la información del estado inicial del problema, la información del estado objetivo y la información temporal generada durante el proceso de resolución del problema.

El motor de inferencia, también conocido como sistema de control, se compone de un conjunto de programas que se utilizan para controlar y coordinar el funcionamiento de la base de reglas y la base de datos integral, y determinar el método de gestión de problemas y la estrategia de control.

La estructura básica de un sistema de producción.

Los pasos para resolver los problemas del sistema de producción son generalmente los siguientes:


(1) Inicialice la base de datos completa (base de datos de hechos).
(2) Verifique si hay reglas en la base de reglas que coincidan con la base de hechos. Si es así, ejecute (3), de lo contrario ejecute (4).
(3) Actualice la base de datos completa, es decir, agregue las reglas detectadas en el paso (2) que coincidan con la base de datos completa y marque todas las reglas.
(4) Verifique si la base de datos completa contiene la solución. Si es así, finalice el proceso de solución, de lo contrario vaya a (2).
(5) Si no se proporciona más información requerida en la base de reglas, la resolución del problema falla; de lo contrario, la base de datos completa se actualiza y pasa a (2).
  1. Estilo de razonamiento de los sistemas de producción.

(1) Razonamiento directo

El razonamiento directo, también llamado razonamiento basado en datos, parte de hechos conocidos y llega a conclusiones a través de una base de reglas. El proceso de razonamiento básico es el siguiente:

Paso 1: Utilice los hechos de la base de datos para hacer coincidir los antecedentes de todas las reglas en el conjunto de reglas disponible para obtener un conjunto de reglas coincidente.
Paso 2: utilice el algoritmo de resolución de conflictos para seleccionar una regla del conjunto de reglas coincidentes como regla habilitadora.
Paso 3: Ejecutar el consecuente de la regla de habilitación, enviar el consecuente de la regla de habilitación a la base de datos integral o realizar las modificaciones necesarias a la base de datos integral.
Paso 4: repita este proceso hasta alcanzar el objetivo o no haya reglas coincidentes.

(3) Razonamiento inverso

El razonamiento inverso, también llamado razonamiento impulsado por objetivos, comienza desde el objetivo y utiliza reglas a la inversa para obtener hechos conocidos. El proceso de razonamiento es el siguiente:

Paso 1: utilice la regla consecuente en la base de reglas para hacer coincidir el hecho objetivo y obtener un conjunto de reglas coincidente.
Paso 2: utilice el algoritmo de resolución de conflictos para seleccionar una regla del conjunto de reglas coincidentes como regla habilitadora.
Paso 3, utilice el antecedente de la regla habilitada como subobjetivo.
Paso 4: Repita este proceso hasta que cada subobjetivo sea un hecho conocido.

(3) Razonamiento bidireccional

El razonamiento bidireccional es un tipo de razonamiento que es tanto de arriba hacia abajo como de abajo hacia arriba. El razonamiento procede desde dos direcciones al mismo tiempo hasta que los resultados en ambas direcciones coinciden en una interfaz intermedia y finaliza con éxito. No es difícil imaginar que este tipo de razonamiento bidireccional es más pequeño que la red de razonamiento formada por razonamiento directo o inverso, por lo que la eficiencia del razonamiento es mayor.

2. Ejemplos de sistemas de producción

1.Sistema de identificación de animales

El sistema puede identificar seis tipos de animales: tigre, leopardo, cebra, jirafa, pingüino y albatros.
Su base de reglas contiene las siguientes 15 reglas:
r1: SI El animal tiene pelo ENTONCES El animal es un mamífero
r2: SI El animal tiene leche ENTONCES El animal es un mamífero
r3: SI El animal tiene plumas ENTONCES El animal es un pájaro
r4: SI El animal puede volar Y puede poner huevos ENTONCES El animal es un pájaro
r5: SI El animal come carne ENTONCES El animal es un carnívoro
r6: SI El animal tiene caninos Y tiene garras Y mira hacia adelante ENTONCES El animal es un carnívoro
r7: SI El animal es un mamífero Y tiene pezuñas ENTONCES El animal es un ungulado
r8: SI el animal es un mamífero Y es un rumiante ENTONCES el animal es un ungulado
r9: SI el animal es un mamífero Y es un carnívoro Y es leonado Y tiene manchas oscuras en el cuerpo ENTONCES el animal es un leopardo
r10: SI El animal es un mamífero Y es un carnívoro Y es leonado Y tiene rayas negras en el cuerpo ENTONCES El animal es un tigre
r11: SI El animal es un ungulado Y tiene un cuello largo Y tiene patas largas Y tiene rayas oscuras en el cuerpo Manchas ENTONCES El animal es una jirafa
r12: SI El animal es un ungulado Y tiene rayas negras ENTONCES El animal es una cebra
r13: SI El animal es un pájaro Y tiene un cuello largo Y Tiene patas largas Y no puede volar Y tiene colores blanco y negro ENTONCES El animal es un avestruz
r14: SI El animal es un pájaro Y puede nadar Y no puede volar Y tiene colores blanco y negro ENTONCES El animal es un pingüino
r15: SI El animal es un pájaro Y es bueno volando ENTONCES El animal es un albatros

Realice la identificación animal de las jirafas basándose en las reglas anteriores. Antes de razonar, los datos de la base de datos completa son los siguientes: el animal tiene manchas oscuras, cuello largo, patas largas, leche y pezuñas. El proceso de razonamiento es el siguiente:

(1) Con base en la presencia de leche, use la regla r2 para deducir que el animal es un mamífero;

(2) Con base en los mamíferos y las pezuñas, use la regla r7 para deducir que son ungulados;

(3) Según el animal con pezuñas, que tiene manchas oscuras, cuello largo y patas largas, se infiere que es una jirafa usando la regla r11.

2. Implementación del código

#include<iostream>
#include<iomanip>
using namespace std;
char *animal[]={"企鹅","信天翁","鸵鸟","斑马","长颈鹿","虎","金钱豹"};
char *feature[]={"有毛","产奶","有羽毛","会飞","会下蛋","吃肉","有犬齿","有爪","眼睛盯前方","有蹄","反刍","黄褐色","有斑点",
        //0 1 2 3 4 5 6 7 8 9 10 11 12
        "有黑色条纹","长脖","长腿","不会飞","会游泳","黑白两色","善飞","哺乳类","鸟类","肉食类","蹄类",
        //13 14 15 16 17 18 19 20 21 22 23
        "企鹅","信天翁","鸵鸟","斑马","长颈鹿","虎","金钱豹"};
//24 25 26 27 28 29 30
typedef struct //存放规则的结构体
{
    int relation[5];
    int name;
}Rule;
Rule rule[15]={
        {
    
    {0,-1},20},
        {
    
    {1,-1},20},
        {
    
    {2,-1},21},
        {
    
    {3,4,-1},21},
        {
    
    {20,5,-1},22},
        {
    
    {6,7,8,-1},22},
        {
    
    {20,9,-1},23},
        {
    
    {20,10,-1},23},
        {
    
    {20,22,11,12,-1},30},
        {
    
    {20,22,11,13,-1},29},
        {
    
    {23,14,15,12,-1},28},
        {
    
    {23,13,-1},27},
        {
    
    {21,14,15,16,-1},26},
        {
    
    {21,17,18,16,-1},24},
        {
    
    {21,19,-1},25}};
int flag[23]={0};//标记各个特征是否选择
int IsAnimal(int a);
int inference();
void input();
void menu();
void menu()
{
    int i=0;
    for(i=0;i<24;i++)
    {
        if(i%4==0&&i!=0)
        {
            cout<<endl;
        }
        printf("%-3d.%-15s",i,feature[i]);
        //%s ,它的原理其实也是通过字符串首地址输出字符串,printf("%s ", s); 传给它的其实是s所保存的字符串的地址
    }
}
void input()
{
    int ti=0;
    for(int i=0;i<24;i++)
    {
        flag[i]=0;
    }
    while(ti!=-1)
    {
        cout<<"\n 输入选择(-1 结束):";
        cin>> ti;
        if(ti>=0&&ti<=23)
            flag[ti]=1;
        else if(ti!=-1)
        {
            cout<<"输入错误!请输入 0~23 之间的数字!"<< endl; //notanimal=25
            cin.clear();//清除流错误错误标
            cin.sync(); 清空输入缓冲区
        }
    }
}
int IsAnimal(int a)
{
    if(a>=24&&a<=30)
        return 1;
    else
        return 0;
}
int inference()//正向推理
{
    int ti;
    int i,j;
    int tres;
    cout<<endl;
    for(i=0;i<15;i++)
    {
        j=0;
        ti=rule[i].relation[j];
        while(ti!=-1) //-1 作为结束
        {
            if(flag[ti]==0)
                break;
            j++;
            ti=rule[i].relation[j];
        }
        if(ti==-1)//ti==-1 代表规则满足
        {
            tres=rule[i].name;
            flag[tres]=1;
            printf("运用了规则%d : ",i+1);
            j=0;
            while(rule[i].relation[j]!=-1)
            {
                cout<<feature[rule[i].relation[j]]<<" ";
                j++;
            }
            cout<<"====> "<<feature[tres]<<endl;
            if(IsAnimal(tres))
            {
                return 1;
            }
        }
    }
    if(i==15)
    {
        cout<<"没有这种动物";
    }
    return -1;
}
int main()
{
    char q;
    while(q!='n')
    {
        menu();
        input();
        inference();
        cout<<"\n 继续?(Y/N)"<<endl;
        cin>>q;
        system("cls");
    }
}

3. Visualización de resultados

3. Resumen

Los sistemas de producción tienen las características de naturalidad, modularidad, claridad y efectividad, pero también tienen deficiencias como baja eficiencia, inconvenientes para expresar el conocimiento estructural, dificultad de expansión y saturación de control. En realidad, la selección de sistemas expertos debería basarse en las condiciones reales, y debería seleccionarse el sistema con mayor aplicabilidad y eficiencia.

Supongo que te gusta

Origin blog.csdn.net/m0_51260564/article/details/129433442
Recomendado
Clasificación