1. Système de production
Introduction aux systèmes de production
Un système de production fait référence à un ensemble de productions qui coopèrent et travaillent ensemble pour résoudre un problème. Un système de production se compose généralement de trois parties de base, à savoir une base de règles, une base de données complète et un moteur d'inférence.
La base de règles, également appelée base de connaissances, est un ensemble de connaissances dans un certain domaine exprimé sous forme de règles. L'ensemble contient l'état initial du problème et toutes les règles de changement nécessaires pour le transformer en état cible.
La base de données complète, également connue sous le nom de base de données de faits, est une collection de données utilisée pour stocker diverses informations actuellement liées à la résolution de problèmes. Il comprend les informations sur l'état initial du problème, les informations sur l'état cible et les informations temporaires générées pendant le processus de résolution du problème.
Le moteur d'inférence, également connu sous le nom de système de contrôle, est composé d'un ensemble de programmes utilisés pour contrôler et coordonner le fonctionnement de la base de règles et de la base de données complète, et déterminer la méthode de gestion des problèmes et la stratégie de contrôle.
![](https://img-blog.csdnimg.cn/img_convert/d4fc870238f342768a5223f34d64bff3.png)
La structure de base d'un système de production
Les étapes pour résoudre les problèmes du système de production sont généralement les suivantes :
(1) Initialiser la base de données complète (base de données de faits).
(2) Vérifiez s'il existe des règles dans la base de règles qui correspondent à la base de faits. Si c'est le cas, exécutez (3), sinon exécutez (4).
(3) Mettez à jour la base de données complète, c'est-à-dire ajoutez les règles détectées à l'étape (2) qui correspondent à la base de données complète et marquez toutes les règles.
(4) Vérifiez si la base de données complète contient la solution. Si tel est le cas, terminez le processus de solution, sinon passez à (2).
(5) Si plus aucune information requise n'est fournie dans la base de règles, la résolution du problème échoue, sinon la base de données complète est mise à jour et passe à (2).
Style de raisonnement des systèmes de production
(1) Raisonnement avancé
Le raisonnement prospectif, également appelé raisonnement basé sur les données, part de faits connus et parvient à des conclusions grâce à une base de règles. Le processus de raisonnement de base est le suivant :
Étape 1 : Utilisez les faits de la base de données pour faire correspondre les antécédents de toutes les règles de l'ensemble de règles disponible afin d'obtenir un ensemble de règles correspondant.
Étape 2 : utilisez l'algorithme de résolution des conflits pour sélectionner une règle dans l'ensemble de règles correspondant comme règle d'activation.
Étape 3 : Exécutez le conséquent de la règle d'activation, envoyez le conséquent de la règle d'activation à la base de données complète ou apportez les modifications nécessaires à la base de données complète.
Étape 4 : Répétez ce processus jusqu'à ce que l'objectif soit atteint ou qu'il n'y ait plus de règles de correspondance.
(3) Raisonnement inversé
Le raisonnement inversé est également appelé raisonnement axé sur un objectif. Il part du but et utilise des règles inverses pour obtenir des faits connus. Le processus de raisonnement est le suivant :
Étape 1 : utilisez la règle conséquente dans la base de règles pour faire correspondre le fait cible afin d'obtenir un ensemble de règles correspondant.
Étape 2 : utilisez l'algorithme de résolution des conflits pour sélectionner une règle dans l'ensemble de règles correspondant comme règle d'activation.
Étape 3, utilisez l'antécédent de la règle activée comme sous-objectif.
Étape 4 : Répétez ce processus jusqu'à ce que chaque sous-objectif soit un fait connu.
(3) Raisonnement bidirectionnel
Le raisonnement bidirectionnel est un type de raisonnement à la fois descendant et ascendant. Le raisonnement se déroule dans deux directions en même temps jusqu'à ce que les résultats dans les deux directions correspondent sur une interface intermédiaire et se terminent avec succès. Il n'est pas difficile d'imaginer que ce type de raisonnement bidirectionnel est plus petit que le réseau de raisonnement formé par le raisonnement direct ou inverse, de sorte que l'efficacité du raisonnement est plus élevée.
2. Exemples de systèmes de production
1.Système d'identification des animaux
Le système peut identifier six types d'animaux : tigre, léopard, zèbre, girafe, pingouin et albatros.
Sa base de règles contient les 15 règles suivantes :
r1 : SI l'animal a des poils ALORS L'animal est un mammifère
r2 : SI L'animal a du lait ALORS L'animal est un mammifère
r3 : SI L'animal a des plumes ALORS L'animal est un oiseau
r4 : SI L'animal peut voler ET peut pondre des œufs ALORS L'animal est un oiseau
r5 : SI L'animal mange de la viande ALORS L'animal est un carnivore
r6 : SI L'animal a des canines ET a des griffes ET regarde devant lui ALORS L'animal est un carnivore
r7 : SI L'animal est un mammifère ET a des sabots ALORS L'animal est un ongulé
r8 : SI l'animal est un mammifère ET est un ruminant ALORS l'animal est un ongulé
r9 : SI l'animal est un mammifère ET est carnivore ET est fauve ET a des taches sombres sur son corps ALORS l'animal Il est un léopard
r10 : SI L'animal est un mammifère ET C'est un carnivore ET Il est fauve ET Il a des rayures noires sur le corps ALORS L'animal est un tigre
r11 : SI L'animal est un ongulé ET Il a un long cou ET Il a de longues pattes ET Il a des rayures sombres sur son corps Des tachesALORS L'animal est une girafe
r12 : SI L'animal est un ongulé ET Il a des rayures noires ALORS L'animal est un zèbre
r13 : SI L'animal est un oiseau ET Il a un long cou ET Il a de longues pattes ET Il ne peut pas voler ET Il a des couleurs noires et blanches ALORS L'animal est une autruche
r14 : SI L'animal est un oiseau ET sait nager ET ne peut pas voler ET a des couleurs noires et blanches ALORS L'animal est un pingouin
r15 : SI L'animal est un oiseau ET sait voler ALORS L'animal est un albatros
Effectuez l'identification des animaux des girafes sur la base de la base de règles ci-dessus. Avant le raisonnement, les faits de la base de données complète sont donnés comme suit : l'animal a des taches sombres, un long cou, de longues pattes, du lait et des sabots. Le processus de raisonnement est le suivant :
(1) À partir de la présence de lait, utiliser la règle r2 pour déduire que l'animal est un mammifère ;
(2) En vous basant sur les mammifères et les sabots, utilisez la règle r7 pour en déduire qu'il s'agit d'ongulés ;
(3) D'après la règle r11, l'animal à sabots, qui a des taches sombres, un long cou et de longues pattes, est déduit qu'il s'agit d'une girafe.
2. Mise en œuvre du code
#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. Affichage des résultats
![](https://img-blog.csdnimg.cn/img_convert/61009c2821154cb9bc5f883a2c3707be.png)
3. Résumé
Les systèmes de production présentent des caractéristiques de naturel, de modularité, de clarté et d'efficacité, mais ils présentent également des inconvénients tels qu'une faible efficacité, des difficultés dans l'expression des connaissances structurelles, des difficultés d'expansion et une saturation des contrôles. En réalité, la sélection des systèmes experts doit être basée sur les conditions réelles, et le système le plus applicable et le plus efficace doit être sélectionné.