Sunteți pe pagina 1din 7

UNIVERSITATEA HYPERION

FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA


STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
Referat Inteligenta Artificiala

Cap 1.4. Folosirea programelor sursa Cpp. Parametri de simulare

Fiecare program din aceasta lucrare are o structura impartita in sectiuni, dupa cum urmeaza:

Sectiunea 1: Descrierea programului

Sectiunea 2: Fisiere Cpp

Sectiunea 3: Declararea variabilelor

Sectiunea 4: Proceduri. Functii

Sectiunea 5: START Program

Sectiunea 6: Introducerea datelor

Sectiunea 7: Print rezultate finale

Sectiunea 8: STOP Program.

La randul ei, sectiunea 1 cuprinde mai multe paragrafe:

1) Scopul programului. Scopul algoritmului. Exemple de probleme rezolvate


2) Functii (proceduri) folosite in program
3) Functia de raspuns f(s)
4) Regula de actualizare a ponderilor w
5) Conditia de oprire a programului

Este foarte important ca utilizatorul unui program sa citeasca foarte atent sectiunea 1 in care este facuta
descrierea programului. Descrierea prezinta aspectele importante din algoritmul codificat si redat in
programul sursa.

Pentru executie fiecare program sursa are nevoie de date de intrare (Sectiunea 6). Datele de intrare sunt
de doua feluri:

a) Date vectoriale: x, d, w0 etc.;


b) Date nevectoriale, adica numere reale (parametric): n, N, N1, N2, N3, M, L, p, a, b, c, aw, bv, ro,
epsilon, Tip, nrcicluri, Nrx, k max, …

Elementele n, N, N, Tip sunt impuse de problema care se rezolva. Restul elementelor (parametric) sunt
alese de rezolvitor asa incat rezolvarea problemei sa reuseasca, algoritmul sa nu cicleze, rezultatele sa
fie convenabile (la reprezentarea grafica), programul sa aiba timp de executie redus etc. Fiecare alegere
a unui set de parametric se numeste simulare. Deci, utilizatorul programului foloseste mai multe
simulari pana cand este satisfacut de rezultat. Un parametru important al simularii este eroarea epsilon
UNIVERSITATEA HYPERION
FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA
STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
admisa. Aceasta depinde essential de vectorii de intrare. De exemplu, eroarea epsilon poate sa difere la
doua problem de acelasi tip care au date de intrare vectoriale diferite.

Cap 2. Algoritmul perceptronului cu regula de actualizare bazata pe eroare.

2.1. ALGOPSSe. Cpp 1

// Program 1 Algoritmul Perceptronului ALGOPSSe

// Cpp 1 ALGOPSSe 1 cu w0 si unipolar

// Algoritm de Invatare Supervizata pe multumea I(x,d)

// Sectiunea 1. Descrierea programului

// 1) Scopul Algoritmului. Scopul programului

// Invatare supervizata pe multimea I(x,d)

//Multimea de instruire este I(x,d); vectorul d are numai elemente 0 si 1

// a) se determina hiperplanul H(w*) care imparte multimea de intrare I(x,d) in doua clase disjuncte A1 si
// A2

// b) Folosind w* se clasifica direct vectorul xnew sosit in retea

// Aplicatii la separarea prin H* a doua clase linear separabile

// Exemplul 1. Realizarea dunctiilor logice OR, AND, implicatie

// Exemplul 2. Separare, carte[NP, FB], pag 71, problemele 4,6

// 2) Proceduri create si folosite. Procedura de produs scalar net = <x,w>

// 3) Functia de raspuns f(s) = f(net) = functia unipolara Heaviside 0 si 1

// net = <x,w>; vectorul d are numai elemente de 0 si 1

// 4) regula de actualizare a ponderilor

// w(t+1) = w(t) + cex(t) t = 1,N

// Regula se aseamana cu cea de la ADALINE secvential

// 5)Stop Program. Conditia de oprire este:

// contor = N (eroarea e= 0 de N ori consecutiv)

// REGULA pentru ca H0 sa nu treaca prin vreun xi; // prod scalar ‹x,w0> nu este 0

// Programul foloseste., doua variabile de lucru:

// contor si ciclu (integer)


UNIVERSITATEA HYPERION
FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA
STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
// Acestea ajuta la STOP Program

// Oprirea Programului. Daca contor = N atunci STOP Program

// Obs. Contor = N daca de N ori CONSECUTIV eroarea este e = 0

// Cand contor = N atunci se cunoaste si ciclu, adica nr de cicluri parcurse w* si numarul de cicluri depind

// de vectorul initial w0 si rata de invatare c

// Se schimba w0 si rata c, se schimba w*, H(w*) sin r de cicluri

// Vectorul Optim de instruire este w*.

// Sosesc N1 vectori noi in system

// Cu ajutorul lui w* acesti vectori sunt clasificati DIRECT

// Sectiunea 2. Fisierele C++

#include<iostream•h>

#include<conio.h>

// #include<math • h>

// Sectiunea 3. Declararea variabilelor

int Tip, i, ciclu, n, N, N1, t , tN, y, contor , t 1, NN1 ;

// i = 1,n t = 1,N

float x[10] [100] ,w0 [10] , w [10] ,ux [10] , vw[10] ,d[100];

float c, net , er, sx,psw0x;

// Sectiunea 4. Proceduri . Functii

// Procedura 1. psnet . Produs Scalar;

// intoarce rezultatul in net

float psnet (int n)

{ // Inceput Subrutina psnet

net=0.0;

for (i=1;i<=n;i++)

{net=net+ux[i]*vw[i];}

return net;
UNIVERSITATEA HYPERION
FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA
STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
// Terminat Subrutina psnet

// Sectiunea 5, START Program Principal

// START PROGRAMUL PRINCIPAL

void main ()

{ // Inceput main () Programul principal

// Sectiunea 6. Introducerea datelor initiale

// pasul 1. Se introduc datele de intrare n, N, c, x[],

// d[ ],w[ ],w0[ ]

// Functia prelucrata: 1-OR, 2-AND, 3-Implicatia,

// 4-Alta functie

cout<cendl;

cout<<” Rezultate Program Cpp 1 ALGOPSSe cu f

unipolara \n”; cout<<endl;

cout<<” Tipul functiei Tip: 1-OR, 2-AND, 3-Implicatie, 4-Alta functie”;

cout<<endl;

cout<<” Functia prelucrata este de Tip = “;

cin>>Tip;

cout<<endl;

cout<<” Introduceti n<=10 dimensiunea vectorului x n= “;

cin>>n;

cout«” Introduceti N<=100 nr de vectori de instruire N”;

cin>>N;

cout<<” Introduceti c<=1 rata de invatare c = “;

cin>>c;

cout<<endl;

// Se introduc vectorii de instruire x si valorile

// dorite d

cout<<” Introduceti vectorii de instruire x. Acestia sunt \n”;

for (t=1;t<=N;t++)
UNIVERSITATEA HYPERION
FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA
STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
{ cout<<. x[“;cout<<t;cout<<” ]:\n”;

} for (i=1;i<=n;i++) (cout<<” “; cin»x[i] [t];}

cout<<endl; cout<<endl;

cout<<” Introduceti valorile dorite d. Valorile dor. sunt \n”;

cout<<” d:\n”;

for (i=1;i<=N;i++) {cout<<” “; cin>>d[i];}

// Se introduce vectorul pondere initial w0

Cout<<” Introduceti w0= vectorul pondere initial \n “;

cout«” w0: \n”;

for (i=1;i<=n;i++) {cout<<” “; cin>>w0[i];}

// Pasul 2. Se aplica Regula de alegere a lui wo,,,,,, M . 4

// REGULA de alegere a vectorului w0 (de alegere a hiperplanului H0)

// Toate punctele xi, i= 1,N trebuie sa fie in afara hiperplanului H0

for (t=1;t<=N;T++)

{ psw0x==0 . 0;

for (i=1;i<+n;I++) {psw0x=psw0x+x[i] [t] *w0[i]; }

cout<<” t=”; cout<< t; cout<<” psw0x= “; cout<<psw0x;

if (psw0x==0 . 0)

{ cout<<endl;

cout<<” Vectorul w0 Nu este BUN. Se alege alt w0. STOP PROGRAM \n”;

cout<<” Daca se continua atunci Hs trece prin xi. Clasificare gresita \n”;

getch(); }

cout<<endl;

cout<<” Vectorul w0 este bine ales \n”;

//Pasul 3. Incepe algoritmul ALGOPSSe

// Algoritmul se opreste atunci cand contor = N

// contor =1 daca eroarea er = d[t] –y = 0, altfel


UNIVERSITATEA HYPERION
FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA
STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
// contor =0

For (i=1;i<=n;i++) {w[i]=w0[i];}

//Proba de umplere a lui w = w0

// for (i=1;i<=n;i++) {cout<<” “; cout<<w[i]; }

//Se umple corect

cout<<endl;

cout<<” Vectorul pondere initial w0=w(1) este w(1):”;

for (i=1;i<=n;i++) {cout<<” “; cout<<w[i];]

cout<<endl;cout<<endl;

// Incepe CICLUL ciclu.

// Un cilcu foloseste vectorii x[1] x[2] … x[N]

cout<<endl;

cout<<” Un CICLU foloseste toti vecotrii de instruire x[1] x[2] … x[N] “;

cout<<endl; ciclu =0; contor=0; cout<<endl;

while (contor<N) { //Inceput A

ciclu=ciclu+1;

cout<<” CICLUL “<<ciclu<<” :\n”;

// cout<<endl;

for (t=1;t<=N;t++)

{ // Inceput B

Cout<<” t= "<<t<<”:\n”; cout«endl;

// Se incarca vectorii ux si vw pentru Subrutina psnet

for (i=1;i<=n;i++) {ux[i]=x[i][t]; vw[i]=w[i];}

// Proba ux si vw

// cout<<" ux= ";

// for (i=1;i<=n;i++) {cout<<” “; cout«ux[i];}

// cout<<” vw= “;

// for (i=1;i<=n;i++) {cout<<” “ ; cout<<vw[i];}

// Aici se foloseste Subrutina psnet


UNIVERSITATEA HYPERION
FACULTATEA DE STIINTE EXACTE SI INGINERESTI SPECIALIZAREA INFORMATICA
STUDENT: BRAILA DUMITRU-MARIUS AN 3 SEM 1
net=psnet(n); cout<<” net="; cout<<net; // cout<<endl;

// Functia de raspuns y = f(net) este functia unipolara

// Heaviside

if (net>0.0) y=1; else y=0;

er=d[t]-y; cout<<” eroare= “; cout<<er;

if (er==0.0) contor=contor+1; else contor=0;

cout<<" contor= "; cout<<contor;

cout«endl; cout«endl;

// Actualizeaza vectorul pondere w

t1=t+1;

cout<<" Vectorul pondere w ACTUALIZAT este w(";cout<<t1;cout<<"): "; // \n";

for (i=1;i<=n;i++) {w[i]=w[i]+c*er*x[i] [t]; }

for (i=1;i<=n;i++) {cout<<” “; cout<<w[i] ;} cout<<endl;

cout«endl; cout«endl;

} // Sfarsit B

} // Sfarsit A

// Sectiunea 7. Tiparirea detelor finale

// Pasul 4. Tipareste vectorul pondere final w* si

// nr. total de cicluri

for (i=1;i<=n;i++) {w0[i]=w[i];}

cout<<” Vectorul PONDERE FINAL care INSTRUIESTE RETEAUA este \n”;

cout«” w*= “;

for (i=1;i<=n;i++) {cout<<” ”; cout<<w0[i];}

cout<<endl; cout<<endl;

cout<<” Nr total de CICLURI este CICLUL= “; cout<<ciclu;

// Pasul 5. Sosesc N1 vectori noi in reteaua instruita

// Trebuie N+N1<=100

cout<<endi; cout<<endl; cout<<endl;

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