Sunteți pe pagina 1din 11

1

Exemple de sisteme bazate pe cunotine



Sistem bazat pe reguli implementat n C# i Clips.
Se creeaz un proiect n C#, folosind mediul Microsoft Visual
Studio sau Microsoft Visula C# Express.
n cadrul proiectului se creeaz interfaa grafic (de obicei se face
drag&drop de componente grafice).
se creaz un fiier Clips (extensia clp) care definete faptele i
regulile pentru modulul de diagnoz. Pentru afiara rezultatelor se
folosete funcia (printout t rezultate).
proiectul se ruleaz din mediul de dezvoltare, care realizeaz i un
executabil. Pentru rulare executabil se caut n directorul
proiectului fiierul /bin/debug/numeAplicatie.exe

2
n proiectul C# se adaug referin ctre fiierul ClipsWrapper.dll
(se face download de pe Internet), care face legtura dintre C# i
mediul Clips. Clasa ClipsWrapper are rolul de a apela indirect
funciile din Clips. Aceast clas trebuie importat n directorul
/bin/debug. n proiect, la References, se alege Add Reference i se
adaug fiierul ClipsWrapper.dll.

n constructorul aplicaiei create n proiect se apeleaz funcia
InitializeCLIPS (care aparine clasei ClipsWrapper) astfel nct
odat cu iniializarea interfeei grafice utilizator i mediul Clips s
fie pregtit s primesc comenzi.

Metodele din clasa ClipsWrapper sunt urmatoarele :

void Clear() terge faptele i regulile curente
3
void InitializeCLIPS() initializeaz mediul Clips
void Load(string filename) ncarc un program Clips dintr-un
fiier
void Reset() terge faptele curente i iniializeaz faptele din
deffacts
string Run() ruleaz programul si returneaz ca string ceea ce
afieaz programul prin intermediul functiei printout t
void Assert(string fact) introduce un fapt n baza de fapte
void DribbleOn(string fisier) creaz un fiier txt care
nregistreaz valoarea returnat de funcia Run()
void DribbleOff() oprete sesiunea de ascultare a funciei
DribbleOn

4
n fiierul Form1.cs (care conine verificrile i evalurile
componentelor de control ale interfeei grafice) este creat o
instan a clasei care face legtura cu mediul Clips.
private ClipsWrapper clips;
public FormPrincipal() {
InitializeComponent(); //initializeaza componentele GUI,
metoda //declarata in fisierul Form1.Designer.cs
clips = new ClipsWrapper();
clips.Clear();
clips.Load("fisier.clp");
clips.Reset();
}
valorile variabilelor citite n GUI i prelucrate n fiierul Form1.cs
sunt introduse n Clips prin comenzi de tipul
clips.Assert("(variabila " + valoare + ")");
5
rularea mediului Clips se face prin urmtoarea comand, introdus
n fiierul Form1.cs dup ce au fost citite toate datele de la
componentele grafice de control. Comanda Run returneaz
rezultatele ntr-un ir de caractere, care apoi poate fi afiat n GUI:
string rezultate = clips.Run();
Exemple de proiecte de predicie i diagnoz: LogicaSimpla,
AlegereApFoto i DiagnozaMedicala.
6
Exemplu LogicaSimpla in C# fiierul cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private ClipsWrapper clips;
7
string var1, var2;

public Form1()
{
InitializeComponent();
//apeleaza clasa care face legatura cu
Clips
clips = new ClipsWrapper();
//sterge mediul Clips
clips.Clear();
//incarca un fisier Clips

clips.Load("d:\\Adina\\SBC\\Curs\\Exemple-
SBC\\Logica-
8
C#\\LogicaSimpla\\LogicaSimpla\\bin\\Debug\\Logica
Simpla.clp");
//se incarca faptele definite prin
deffacts
clips.Reset();
}

private void button1_Click(object sender,
EventArgs e)
{
var1 =
comboBox1.SelectedItem.ToString();
if (radioButton1.Checked) var2 =
"var2-C";
9
if (radioButton2.Checked) var2 =
"var2-D";
clips.Assert("(var1 " + var1 + ")");
clips.Assert("(var2 " + var2 + ")");

string rezultate = clips.Run();
textBox1.Text = rezultate;
clips.Clear();
clips.Load("LogicaSimpla.clp");
clips.Reset();
}

}
}

10
Fisierul clp
(defrule rez1
(var1 var1-A)
(var2 var2-C)
=>
(assert (rezultat AC))
(printout t "Rezultat A si C" crlf)
)
(defrule rez2
(var1 var1-A)
11
(var2 var2-D)
=>
(assert (rezultat AD))
(printout t "Rezultat A si D" crlf)
)
(defrule rez3
(var1 var1-B)
=>
(assert (rezultat B))
(printout t "Rezultat B si nu conteaza Var2" crlf))

S-ar putea să vă placă și