Bazele Implementării Rețelelor Sociale Inteligente

UNIVERSITATEA DE VEST “VASILE GOLDIȘ” ARAD

FACULTATEA DE STIINTE ECONOMICE, INFORMATICĂ ȘI INGINERIE

LUCRARE DE LICENȚA

Bazele implementării rețelelor sociale inteliginte

Conducător științific

Prof.univ.dr. Popescu Marius

Absolvent

Popa Stefan-Cosmin

Arad

2016

CUPRINS

Introducere

In lucrare se implementează un software web in limbajul node.js, în vederea analizei rețelelor neuronale, al inteligenței artificiale într-un mediu virtual, cu aplicație in rețelele sociale. Softul permite experimentarea capacității unor entități virtuale de a învăța să acționeze ca un grup, or individual, să se ferească de marginile mediului în care se află, sau de obstacole și a învăța să se hrănească, pentru a trăi. Aplicația reprezintă o noutate în sensul că până de curând, o dată cu apariția node.js, implementarea conceptului de rețele neuronale într-un limbaj scripting nu era posibilă. Acest concept poate fi dezvoltat în aplicații practice cum ar fi rețele sociale, motoare de căutare cu inteligență artificială, asistenți personali e.g. Siri etc, scopul final fiind de a obține o soluție software eficientă, care poate evolua în timp.

Aplicația descrisă în lucrare este bazată pe un design original cu o interfață în care se poate observa activitatea inteligenței artificiale. In literatura de specialitate nu există lucrări similare, care să aibă o abordare plastică a inteligenței artificiale, decât lucrări abordate matematic, mai puțin accesibile programatorilor neexperimentați. Lucrare are ca scop facilitarea procesului de dezvoltare a aplicațiilor bazate pe inteligență artificială utilizând node.js, care este un limbaj popular, întrucât folosește JavaScript atât pe partea de server cât și de client, ceea ce înseamnă că dezvoltatorii trebuie doar să programeze într-un singur limbaj, în toate straturile (layers). Chiar dacă este încă în faza "beta" limbajul este folosit de multe companii mari (Microsoft, Yahoo!, LinkedIn, eBay, The New York Times, etc), pentru că este stabil și performant. Foarte puține limbaje de programare au avut o dezvoltare atât de rapidă. Cea mai mare parte dintre resursele prezente pe GitHub sunt tot în JavaScript, sau Node.js. Prin urmare, este o bună oportunitate să se dezvolte aplicații bazate pe inteligență artificială, care până în prezent nu sunt numeroase. Limbajul de programare node.js este destul de fiabil pentru a crea servicii e.g. API (Application Programming Interface) care să permită multithreading – capacitatea aplicației de a da răspunsuri concomitente. Partea benefică a Node.js o constituie cantitatea imensă de cod, deja prezentată pe GitHub. Dezvoltatorului îi rămâne obligația de a îmbina resursele, pentru a economisi timp la crearea unei aplicații noi. In cele ce urmează se vor prezenta câteva noțiuni de bază, dar și punerea lor în practică în cadrul aplicației software.

Tehnologii utilizate

Aplicația folosește în partea de front-end următoarele tehnologii: HTML5[10], CSS3[5], JavaScript [2], HTML5 Canvas [3]. Limbajul Node.js este un mediu de rulare cu librarii si rulează aplicații JavaScript in afara browser-ului. In back-end folosește Node.js și librăria Synaptic [4]. Aplicația este găzduită pe un server debian 8 personal, unde a fost testată, și funcționează într-un browser web modern (Google Chrome v49, recomandat, Microsoft Edge v25, Mozilla Firefox v45). De obicei, Node.js este folosit pentru rularea de aplicații server în timp real și excelează prin performanța utilizării non-blocking I/O și evenimente asincrone. Este de un real avantaj faptul că se pot construi cu același limbaj backend-ul frontend-ului, deja construit în JavaScript.

Retele Neuronale

Neuronul este unitatea de bază a unei rețele neuronale cu intrări, procesare și ieșiri, a cărui funcționare depinde de o serie de ponderi sinaptice (weight), care aplicate datelor de intrare generează ieșirile, prin intermediul funcției de activare [6]. Funcția de activare prezenta in figura 2 este de obicei o funcție sigmoida. Rețelele neuronale sunt compuse din noduri multiple care imită neuronii biologici din creierul uman și care sunt conectați prin legături (links) și interacționează între ei (Fig.1). Fiecare nod poate lua date de intrare și poate executa operații simple de date, rezultatul fiind transmis altor neuroni. Nodul de ieșire este denumit nod de valoare, sau de activare. Fiecare legătură este asociată cu o pondere sinaptică (weight), neuronii fiind capabili să învețe modificând valoarea ponderi sinapticei a legăturii asemeni sinapselor biologice.

Fig.1. Exemplu de rețea neuronală simplă.

Fig.2. Modul de funcționare al unui perceptron.

Fiecare linie, ilustrată în Fig.1, reprezintă conexiunea dintre doi neuroni, iar conexiunile pot avea o anumită direcție în funcție de tipologia diagramei, indicând parcursul/fluxul informației. Fiecare conexiune are o pondere sinaptică (weight), un număr întreg (variabilă) care controlează semnalul dintre doi neuroni. Dacă rețeaua generează un output “bun”, sau „dorit”, atunci nu este necesară ajustarea ponderi sinaptice, însă dacă generează unul “nesatisfăcător”, „nedorit” sau o eroare, atunci sistemul modifică ponderea sinaptică, pentru a îmbunătății rezultatele viitoare. Cel mai utilizat algoritmul pentru rețelele neuronale este algoritmul back propagation [1]. Acesta este un algoritm de învățare, în care neuroni rețelei învață din exemple. Astfel, dacă îi se trimite algoritmului o sarcină pe care se dorește să o îndeplinească, el va modifica ponderea sinaptică a rețelei la sfârșitul învățării, pentru a produce un output specific datelor input. Algoritmul ajustează ponderea sinaptică folosind Gradient Descent pentru calculul minimizării funcției [7]. In cazul rețelei FeedForward propagarea informației este unidirecțională și, de aceea, este una dintre cele mai simple rețele neuronale, respectiv, un neuron trimite informațiile altui neuron de la care nu primește informații. Astfel de rețele nu au bucle de feedback și sunt utilizate pentru generarea, recunoașterea sau clasificarea formelor având intrări și ieșiri fixe.

Prezentarea aplicației

Pentru implementarea aplicației s-a optat pentru utilizarea librăriei Synaptic.js [8]. La fel ca și celelalte opțiuni, respectiv Brain.js și Mind.js, este posibil crearea unei rețele neuronale complete cu ajutorul doar a câtorva linii de cod. In interiorul librăriei se întâlnesc mai multe arhitecturi preconfigurate ale rețelelor neuronale, care au stat la baza demarării softului prezentat. Aplicația simulează o mulțime virtuală definită de marginile canvas-ului HTML5 (a pânzei de desenat), în care entitățile create vor explora o lume/hartă, vor avea obstacole de evitat, se vor hrăni și vor muri. In cele ce urmează se vor detalia opțiunile și modul de funcționare al aplicației. Entitățile sunt împărțite în două clase, una de entități (care învață împreună și se comportă ca un grup), iar cealaltă în care entitățile lucrează individual. Așadar, se observă că la inițializarea aplicației toate entitățile apar în locuri complet aleatorii pe hartă (Fig.3 si Fig.4). Pe măsură ce se întâlnesc, cele de culoare roșie tind să formeze un grup și să meargă în grup (Fig.4).

Fig.3 Generarea entităților.

Fig.4 Entitățile de culoare roșie folosesc funcția cohesion.

Acest lucru este posibil datorită utilizării funcții cohesion, care definește coabitarea între membrii unui grup, definită după cum urmează

cohesion:function(neighboors)

{ var sum=new Vector(0,0); var count=0;

for (var i in neighboors)

{if (neighboors[i]!=this)//&&!neighboors[i].special)

{sum.add(neighboors[i].location);count++;

}

}

sum.div(count);return sum;

}

Funcția va găsi toți vecinii în raza care aparțin aceleiași specii și îi va adăuga în grup. In acest mod rețeaua neuronală, care definește entitatea, învață care sunt vecinii și care sunt obstacolele. Metoda este cunoscută ca fiind metoda de training a rețelei neuronale. In acest caz, entitățile vor fi definite în felul următor:

function Creature(world,x,y)

{ this.network=new Architect.Perceptron(40,25,3);

this.world=world;this.mass=.4;

this.maxspeed=3;this.maxforce=.2;

this.lookRange=this.mass*200;

this.length=this.mass*10;

this.base=this.length*.5;

this.HALF_PI=Math.PI*.5;

this.TWO_PI=Math.PI*2;

this.location=new Vector(x,y);

this.velocity=new Vector(0,0);

this.acceleration=new Vector(0,0);

this.color="#C70E4C";

}

Astfel, entităților le este asignată o rețea neuronală (un perceptron), care are 40 de input-uri, 25 layere hidden și 3 output-uri. De asemenea, fiecare entitate trebuie asignată unei mulțimi / lumi. Deoarece se vor aplica legile fizicii mecanice, fiecare entitate va avea o masă, astfel încât atunci când apare o coliziune cu alte obiecte din hartă, va avea o viteză maximă de deplasare, deci o forță maximă de coliziune. Pentru ca o entitate să poată vedea, îi se va atribui variabila lookRange, care va fi egală cu masa multiplicată cu 200, deci, entitatea va avea o rază vizuală de 80 de pixeli în jurul ei. Locația unde se află entitatea va fi dată de mulțime, iar culoarea este o variabilă care se poate seta după doleanțe. Revenind la locație se observă că aceasta se instanțiează o funcție de tip vector. Această funcție este de ajutor la calculul poziției entități în funcție de coordonate, de unghiul de lovire, de masă și de greutate. Mai jos se redau câteva linii de cod din funcție.

angle:function()

{ return Math.atan2(this.y,this.x);

},

setMag:function(m)

{ var angle=this.angle();

this.x=m*Math.cos(angle);

this.y=m*Math.sin(angle);

return this;

},

setAngle:function(a)

{ var mag=this.mag();

this.x=mag*Math.cos(a);

this.y=mag*Math.sin(a);

return this;

},

rotate:function(a)

{ this.setAngle(this.angle()+a);

return this;

},

limit:function(l)

{ var mag=this.mag();

if(mag>l)this.setMag(l);

return this;

},

Afișarea entității în mulțime se face cu funcția moveTo, care preia coordonatele din locațiile de memorie și, în funcție de pericole de pe hartă, va aplica legile fizicii mecanice pentru fiecare element, respectiv, va stabili unghiul de deplasare, coliziune aliniament sau coexistență. Spre exemplu, var separation va folosi funcția separate, pentru a separa entitățile din mulțime de cele de altă culoare, variabilă care se va asigna unei variabile force ce reprezintă un vector, iar apoi se va aplica această variabila asupra entității. La fel se întâmplă și cu celelalte variabile definite în funcția descrisă anterior.

moveTo:function(networkOutput){

var force=new Vector(0,0);

var target=new Vector(networkOutput[0]*this.world.width,

networkOutput[1]*this.world.height);

var angle=(networkOutput[2]*this.TWO_PI)-Math.PI;

var separation=this.separate(this.world.creatures);

var separation2=this.separate(this.world.obstacles);

var alignment=this.align(this.world.creatures).setAngle(angle);

var cohesion=this.seek(target);

force.add(separation);

force.add(separation2);

force.add(alignment);

force.add(cohesion);

this.applyForce(force);

},

Funcția de desenare sau draw va accesa o altă funcție a entității și anume update. Funcția calculează locația unde va fi desenată entitatea în canvas, în funcție de viteză și locația curentă.

draw:function()

{ this.update();

var ctx=this.world.context;ctx.lineWidth=1;

var angle=this.velocity.angle();

x1=this.location.x+Math.cos(angle)*this.base;

y1=this.location.y+Math.sin(angle)*this.base;

x2=this.location.x+Math.cos(angle+this.HALF_PI)*this.base;

y2=this.location.y+Math.sin(angle+this.HALF_PI)*this.base;

x3=this.location.x+Math.cos(angle-this.HALF_PI)*this.base;

y3=this.location.y+Math.sin(angle-this.HALF_PI)*this.base;

ctx.lineWidth=2;ctx.fillStyle=this.color;

ctx.strokeStyle=this.color;ctx.beginPath();

ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);

ctx.lineTo(x3,y3);ctx.stroke();ctx.fill();

},

Funcția de actualizare, definită în cod update, va accesa funcția boundaries a entității, cea care va defini limitele și va adăuga un surplus de accelerare vitezei acestei entități [8].

update:function()

{ this.boundaries();

this.velocity.add(this.acceleration);

this.velocity.limit(this.maxspeed);

if(this.velocity.mag()<1.5)

this.velocity.setMag(1.5);

this.location.add(this.velocity);

this.acceleration.mul(0);

},

Funcția seek va stabili viteza de deplasare în grup, în funcție de locația vecinilor din grup și este definită după cum urmează:

seek:function(target)

{ var seek=target.copy().sub(this.location)

seek.normalize();seek.mul(this.maxspeed);

seek.sub(this.velocity).limit(0.3);

return seek;

},

Pentru implementarea mulțimii, sau definirea hărții sunt utilizate 2 mari funcții, blastoff și loop, care vor fi descrise în cele ce urmează. Funcția blastoff conține: variabila canvas, care va găsi în fișierul html div-ul cu id-ul canvas si îl va transforma în această mulțime; variabila ctx, care definește contextul aplicației, respectiv, 2 – dimensional; variabila obs, care reprezintă numărul de obstacole; variabila num, care reprezintă numărul de entitatea din fiecare grup și variabila fps, care reprezintă rata de afișare a aplicației; variabila world, care va avea o lățime, o înălțime și un array de entități, un array de obstacole, un array de hrană și opțiunea de context. Pentru a popula harta cu entități, obstacole și hrană se va realiza o ciclare, deci, un for pentru fiecare variabila de valori și se va asigna hărții entitatea, obstacolului sau hrana cu cheia din for la valorile x și y random. De asemenea, in aceasta funcție se calculează noua locație și unghiul de incidență asupra fiecărei entități. Funcția loop conține setări pentru context (gen, culoare, formă, dimensiuni), funcția de update pentru entități (obstacole sau hrană), foreach-uri pentru obstacole, entități și hrană (la care se va seta input-ul pentru rețeaua neuronală, unde sunt coordonatele rată de învățare și țintă), funcția de desenare a obstacolelor, entităților și mâncării. Pentru a face funcția recursivă aceasta se reapelează. Fiecare entitate atunci când se întâlnește hrana va lua masa/volumul hranei, iar hrana va dispărea din acea locație de pe hartă și va apărea în alt loc al hărții. Pentru a nu crește excesiv entitățile se va utiliza funcția life, care va scădea din masa entității cu câte 0.1 pe minut până când entitatea va ajunge la 0 și atunci va fi apelata funcția die, care distruge entitatea și o transformă în hrană. Un lucru interesant observat în procesul de hrănire a entităților constă în faptul că acele entități care merg în grup și învață împreună au o rată mai mare de supraviețuire (deoarece ele vor învăța de la celelalte că masa este esențială supraviețuirii), pe când entitățile individuale dacă nu vor găsi hrană vor muri, iar cele care găsesc hrană vor învăța cum să supraviețuiască.

Concluzii

Această aplicație ilustrează modul de implementare a unei forme de viață artificială într-un mediu virtual cu tehnologii cunoscute de majoritatea programatorilor, având aplicații nelimitate în domeniul inteligenței artificiale, care pot conduce la căutări mai rapide, indexări și poate chiar la o inteligență artificială care să învețe să comunice. Prin învățarea unui singur limbaj de programare, anume JavaScript, cu ajutorul Node.js și utilizând librăria Synaptic, se deschide o oportunitate facilă pentru dezvoltarea aplicaților de acest gen, care oferă dezvoltatorului JavaScript posibilitatea să facă tot ce își dorește cu același limbaj de programare. Scopul aplicației este de a servi ca o introducere în înțelegerea rețelelor neuronale evitând partea matematică destul de greoaie.

4.1 Posibilități de dezvoltare

O dată dezvoltată aplicația descrisă anterior se poate crea o platformă de potrivire a persoanelor după anumite criterii și a unui motor de căutare în care predicția introducerii va fi bazată pe aceleași concepte prezentate în această lucrare. De menționat faptul că deja exista un concept similar de folosire a inteligentei artificiale pentru îmbunătățirea căutării, dezvoltat de Google, care este capabil să învețe și să îmbunătățească rezultatele utilizând datele provenite de la oameni [9]. Posibilitățile de dezvoltare pe plan general (scurt) se referă la includerea librăriei Synaptic.js și ajungerea în faza de testare. Posibilitățile de dezvoltare pe plan general (mediu-lung) se referă la optimizarea codului sursă, la dezvoltarea unui serviciu pentru suport ori la dezvoltarea unei funcții de înregistrare automată, utilizând conturi deja existente cu ajutorul Facebook și Google APIs, pentru creșterea numărului de utilizatori. De asemenea, dezvoltarea se referă la antrenarea rețelelor neuronale și colectarea unor date comparative cu alte sisteme de potrivire convenționale, având ca scop analiza performantei, sau adăugarea unui formular de satisfacere, care va ajuta la îmbunătățirea aplicației. O altă perspectivă constă în îmbunătățirea securității aplicației și stoparea suprasolicitării serverului din cauza corturilor generate robotic, sau optimizarea aplicației pentru dispozitive mobile (telefoane inteligente, tablete). Aplicația node.js care este formată dintr-un server http și un restful API. Până în prezent, pentru crearea acestei aplicații s-au folosit următoarele librării/module node.js[11]:

– express este un modul pentru node.js care permite crearea unei aplicații web și postarea ei pe unul dintre porturile http disponibile;

– body-parser este modul care transmite request-urile post în aplicație;

– ejs este un template manager pentru node.js, care permite să se adauge într-o filă cu format html un cod special care poate afișa variabilele în template;

– mongoose este un modul face legătura dintre aplicație și baza de date mongodb[14];

– passport sunt module necesare pentru a crea o autentificare mai facilă și mai sigură;

– bcrypt-nodejs este un modul care se folosește pentru securizarea aplicației și parolelor;

– cookie-parser este un modul ce ajută să se folosească cookies pentru sesiune;

– Synaptic este o librărie pentru rețeaua neuronală [8].

Aplicația are structura următoare [11]: app, views, config, node-modules, routes si auth (Fig.5), Models, user, index (Fig.6), login, register, dashboard, profile, search, database.js

Fig.5 Formular de autentificare.

Fig.6 Pagina principala[12].

Utilizatorul va putea să își modifice profilul, să își caute prieteni utilizând calitățile dorite ale acestuia pentru o triere ulterioară, sau poate să găsească prietenii deja conectați după nume, utilizând o funcție de căutare convențională (Fig.7).

Fig.7 Meniul platformei NNPMP (Neural Network Person Matching Platform).

Fiecare utilizator va putea să își găsească prieteni cu ajutorul formularului de căutare, informații ce vor fi stocate în baza de date și vor fi supuse unei funcții de antrenare a rețelei neuronale după câteva criterii predefinite (sex, vârstă, relații comune). Rețelele neuronale au arătat rezultate bune în clasificarea de text. Deși este greoaie instruirea pentru sarcini complexe, s-a încercat utilizarea lor în această aplicație. In teorie aplicația va funcționa după următorul concept. Va exista un trainer al rețelei neuronale, care va antrena rețeaua neuronală după anumite formule. Un exemplu, ar fi vârsta sau sexul. Astfel, pentru o persoană de sex feminin îi se va asigna o persoană de sex masculin, sau o altă persoană de sex feminin, depinzând de preferințele setate în profil. De asemenea, se vor face calcule pentru determinarea și potrivirea vârstei optime. O dată antrenată rețeaua neuronală, atunci când se va efectua o căutare de persoane, aceasta va returna ca rezultat persoana pe care o consideră potrivită pentru noi. Acest lucru poate însemna o nouă eră a rețelelor sociale, sau matrimoniale, inovativul constând chiar în această potrivire care va fi dată de o inteligență artificială antrenată în acest scop. Deoarece căutarea se va realiza cu tehnologia grafurilor, optimizând rezultatele cu inteligența artificială se vor obține timpi de calcul mult mai reduși. Totodată, este interesant faptul că selecția unui partener va fi făcută „inteligent”, și nu după o serie de criterii de testare de tip if-else.

Fig.8. Dashboard.

In panoul de control (dashboard) se vor putea observa prietenii sugerați, numele, poza lor de profil și alte informații (Fig.8). Tot din meniul acestui panou se va putea lua contact cu acea persoană.

Ghid de utilizare

Bibliografie

Popescu M.C., Balas V., Olaru O., Mastorakis N., The Backpropagation Algorithm Functions for the Multilayer Perceptron, Proceedings of the 11th WSEAS International Conference on Sustainability in Science Engineering, pp.28-31, Timisoara, Romania, 27-29 may 2009

Azat M., “JavaScript and Node FUNdamentals”, Washington, DC, 2014.

Kaufman R. Perlman M. Speciner, “Mastering Node.js”, Eds. Packt Publishing, Livery Place, 2013

Dzitac I., Inteligentă artificială, Editura Universitătii „Aurel Vlaicu”, Arad, 2008

Popescu M.C., Olaru O., Conducerea optimala a proceselor-Proiectare asistata de calculator in Matlab si Simulink, Editura Academiei Tehnice Militare, București, 2009.

6.1 Referințe web

Bootstrap – The world's most popular mobile-first and responsive front-end framework. (2015). Preluat de pe http://getbootstrap.com/

CSS3 – CSS | MDN. (2015). Preluat de pe https://developer.mozilla.org/en/docs/Web/CSS/CSS3

HTML5 – Web developer guide | MDN. (2015). Preluat de pe https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5

Node.js v5.9.0, Documentation: https://nodejs.org/docs/latest/api/

CSS3-CSS|MDN: https://developer.mozilla.org/en/docs/Web/CSS/CSS3

Synaptic.js | https://github.com/cazala/synaptic

Patent Google | http://www.google.com/patents/US20050004905

https://scotch.io/tutorials/easy-node-authentication-setup-and-local

http://getbootstrap.com/getting-started/

https://mongodb.github.io/node-mongodb-native/api-articles/nodekoarticle1.html

https://docs.mongodb.org/manual/mongo/#working-with-the-mongo-s

7. Codul sursă al aplicației

Similar Posts

  • Contabilitatea ȘI Fiscalitatea Decontărilor CU Salariații

    UNIVERSITATEA „NICOLAE TITULESCU” București FACULTATEA DE ȘTIINȚE ECONOMICE SPECIALIZAREA CONTABILITATE ȘI INFORMATICĂ DE GESTIUNE LUCRARE DE DIPLOMĂ CONTABILITATEA ȘI FISCALITATEA DECONTĂRILOR CU SALARIAȚII Coordonator științific: Lect. univ. dr. Paula Dumitru Absolvent: Ioniță Andreea Aurelia București 2016 CUPRINS INTRODUCERE CAPITOLUL I. NOȚIUNI GENERALE PRIVIND SALARIUL Cadrul general al decontărilor cu personalul Conceptul de salariu; Componența salariilor;…

  • Inflatia Si Piata Fortei de Munca

    Cuprins Introducere………………………………………………………………………………………….2 Capitolul 1 Noțiuni de macroeconomie 1.1.Piața forței de muncă……………………………………………………………………………………………………3 1.2.Inflația în economiile moderne………………………………………………………………….. 5 1.3.Metode de calcul a indicatorilor de rezultate……………………………………………………..8 1.4.Avuția Națională…………………………………………………………………………………12 1.5.Fluctuațiile.ciclice.și.trendul.economic……………………………………………………………13. 1.6.Cauzele ciclurilor economice…………………………………………………………………….17 Cɑpitolul 2 Stɑtisticɑ microeconomicɑ 2.1.Stɑtisticɑ, instrument in investigɑreɑ ɑctivității ɑgenților economici……………………………………………………………………………………….23 2.2.Anɑlizɑ stɑtisticɑ ɑ forței de muncɑ…………………………………………………………25 2.3.Anɑlizɑ stɑtisticɑ ɑ cɑpitɑlului fix……………………………………………………………………………..31 2.4.Anɑlizɑ stɑtisticɑ ɑ rezultɑtelor…

  • Deportarile Comuniste din Romania Si Republica Socialista Sovietica Moldoveneasca

    Deportările comuniste din România și Republica Socialistă Sovietică Moldovenească CUPRINS АDΝOΤАRE lɑ tezɑ de doϲtor în eϲonomie ɑ d-lui _____________________________ ϲu temɑ DEPORΤĂRILE СOΜUΝIЅΤE DIΝ ROΜÂΝIА ȘI REPUBLIСА ЅOСIАLIЅΤĂ ЅOVIEΤIСĂ ΜOLDOVEΝEАЅСĂ ЅΤUDIU СOΜPАRАΤIV, Сһișinău, 2014 Ѕtruϲturɑ tezei: introduϲere, pɑtru ϲɑpitole, ϲonϲluzii generɑle și propuneri, bibliogrɑfie ɑlϲătuită din ……. ѕurѕe, expuѕă pe …….. pɑgini, inϲluѕiv ………

  • Chestionar Planificare Participativa

    === 73f11cd84da19b20615ef489bb70c0fc26fbde5d_547468_1 === Nume cursant…………………………………………………………………………………………. Anul Universitar: 2017-2018 Data:…………………………………. Chestionar 1. Lista de mai jos cuprinde principalele elementele ce determină succesul unei colaborări participative. Nevoi clare și o bună programare a activităților. (Sunt grupurile de interes pregătite să colaboreze​​? Necesitatea colaborării este percepută ca o urgență?) Grupuri de interes puternice. (Sunt aceste grupuri credibile, bine…

  • Politica DE Securitate A Nato ÎN Spațiul Post Sovietic Evoluții ȘI Vulnerabilități LA Granița DE Est A României

    === 3314254e04aeb7e4587f5762c980340be205847c_410457_1 === POLITICA DE SECURITATE A NATO ÎN SPAȚIUL POST-SOVIETIC. EVOLUȚII ȘI VULNERABILITĂȚI LA GRANIȚA DE EST A ROMÂNIEI INTRODUCERE Este cunoscut faptul că marea majoritate a transformărilor ce au fost sesizate în ultima perioadî în cadrul mediului de securitate zonal, dar și global, au determinat atragerea atenției comunității internaționale, preocupate în mod constant…

  • Factori Cheie ÎN Implementarea Campaniilor DE Relații Publice ÎN Mediul Online

    ȘCOALA NAȚIONALĂ DE STUDII POLITICE ȘI ADMINISTRATIVE MASTERAT SOCIAL MEDIA ȘI MARKETING ONLINE LUCRARE DE DISERTAȚIE FACTORI CHEIE ÎN IMPLEMENTAREA CAMPANIILOR DE RELAȚII PUBLICE ÎN MEDIUL ONLINE Profesor coordonator: Absolvent: Raluca Ciochină Tatiana – Alexandra Vică București 2016 Introducere Capitolul 1. Provocări în relațiile publice în mediul online Principii și caracteristici/ pp: 3-9 1.2 Instrumente…