Dumitrache Andreea Ștefania, grupa 311 CA
- citesc din fisierul de intrare dimensiunile
matricei
Labyrinth, apoi, cu doua bucleforcitesc elemetele matricei
- initializez matricea de adiacenta
Adjcu zerouri - parcurg labirintul folosind doua bucle
forsi pentru fiecare element al matricei calculez indexulcntce reprezinta numarul celulei curente - calculez b3, b2, b1 si b0, aceste variabile marcheaza existenta zidurilor in jurul celulei curente
- in variabilele
north,south,westsieastcalculez indexii celulelor vecine - daca nu exista un perete in nord (b3 == 0)
iar celula se afla pe prima linie, adaug o
muchie intre celula curenta si nodul
WIN, punand 1 in matricea de adiacenta pe pozitia (cnt, m*n+1), daca celula nu se afla pe prima linie a labirintului, adaug o muchie intre celula curenta si celula vecina din nord - similar adaug muchii pentru celelalte
directii, sud, est si vest, tinand cont de
marginile labirintului si de nodurile
WINsiLOSE - la final adaug muchii intre nodul
WINsi el insusi si intre nodulLOSEsi el insusi
- obtin matricea de adiacenta
Adjfolosind functiaget_adjacency_matrix_and_number_of_links, o functie asemanatoare cuget_adjacency_matrix, doar ca, in plus, pe masura ce parcurg labirintul, calculez si vectorulfin care retin numarul de muchii ce ies din fiecare nod - contruiesc matricea
Linkimpartind fiecare linie din matricea de adiacenta la elemetul corespunzator din vectorulf
- obtin in
ndimensiunea matriceiLink - obtin matricea de iteratie,
G, din matriceaLinkfara ultimele doua linii si coloane - obtin vectorul de iteratie,
c, selectand penultima coloana cu liniile de la 1 la n - 2
- aplic metoda Jacobi
- implementez algoritmul din pseudocodul din enunt
- parcurg vectorul
pathce contine drumul - calculez indexii de linie si coloana
ai celulei curente si ii adaug in
matricea
decoded_path
- deschid fisierul de intrare din care citesc dimensiunile matricei, o initializez apoi ii citesc datele
- citesc elementele matricei
InitialMatrixca siruri de caractere si incerc sa le convertesc la numere in variabilanum - daca conversia reuseste, stochez numarul, altfel stochez sirul de caractere
- parcurg matricea initiala si, pentru fiecare
linie, construiesc vectorul
l, in care memorez elementele numerice ale liniei curente, iar in locul sirurilor de caractere memorez valorile numerice corespunzatoare - dupa ce termin de parcurs o lnie, adaug
vectorul
lin matriceaFeatureMatrix
- calculez costul folosind formula din enunt
- citesc intreg continutul fisierului folosind
textscansi stochez rezultatul in matriceamat - fiecare linie a matricei
mato sparg in elemente delimitate de virgula, pe care le stochez in matriceanew_m - primul element din linie il convertesc in numar
folosind
str2doublesi il stochez inY - restul elementelor incerc sa le convertesc in numere
folosind aceeasi functie,
str2double, iar daca reusesc, stochez numarul, altfel, stochez sirul de caractere
- calculez
Thetafolosind gradientul descendent, asa cum este descris in enunt - la final, adaug bias-ul la
Theta
- verific daca matricea
Aeste pozitiv definita, verificand daca toate valorile proprii ale sale sunt pozitive -calculez valorile proprii ale matricei folosind functiaeig - in cazul in care exista o valoarea proprie negativa, opresc functia
- implementez metoda gradientului conjugat din pseudocodul din enunt
- adaug bias-ul la
Theta
- elimin bias-ul din
Theta - implemetez functia de cost asa cum a fost descrisa in enunt
- elimin bias-ul din
Theta - implemetez functia de cost aplicand formula data in enunt
- folosesc functia load pentru a citi datele
- generez o permutare aleatoare a
datelor folosind functia
randperm - permut liniile lui X si y
- impart datele pentru antrenare si testare conform cerintei
- calculeaz
econform formulei din enunt - initializez matricea cu valori aleatoare din intervalul (-e, e)
- apelez functia
get_thetaspentru a obtineTheta1siTheta2din vectorul de ponderiparams - implementez algoritmul de forward propagation folosind formulele din enunt
- transform vectorul y de labels in matricea
y_msi implemntez functia de cost folosind formula din enunt - implementez algoritmul de backpropagation asa cum este descris in cerinta
- apelez functia
get_gradientscare calculeaza gradientiigrad1sigrad2pe baza valorilordelta1sidelta2incluzand regularizarea si excluzand biasul
- folosesc functia
get_thetaspentru a construiTheta1siTheta2 - implementez algoritmul de forward propagation conform enuntului
- construiesc vectorul
classesselectand, pentru fiecare exemplu, indicele coloanei cu probabilitatea maxima din layer-ul de output