Unelte utilizator

Unelte site


20:teme:prolog-gigel
Diferențe

Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.

Link către această vizualizare comparativă

Urmatoarea versiune
Versiuni anterioare
20:teme:prolog-gigel [2020/05/07 01:01]
Andrei Olaru creat
20:teme:prolog-gigel [2020/05/15 07:01] (curent)
Teodor Szente [Changelog]
Linia 8: Linia 8:
 * Deadline hard: __21.05.2020__ * Deadline hard: __21.05.2020__
 * Data publicării:​ 07.05.2020 * Data publicării:​ 07.05.2020
-* Data ultimei modificări: ​07.05.2020 [[#​changelog|changelog]] +* Data ultimei modificări: ​12.05.2020 [[#​changelog|changelog]] 
-* Data tester-ului: ​07.05.2020+* Data tester-ului: ​12.05.2020
 * Tema se va încărca pe **[[https://​vmchecker.cs.pub.ro/​ui/#​PP|vmechecker]]** * Tema se va încărca pe **[[https://​vmchecker.cs.pub.ro/​ui/#​PP|vmechecker]]**
 * [[https://​acs.curs.pub.ro/​2019/​mod/​forum/​view.php?​f=2676|Forum temă]] * [[https://​acs.curs.pub.ro/​2019/​mod/​forum/​view.php?​f=2676|Forum temă]]
Linia 15: Linia 15:
 ==Introducere== ==Introducere==
  
-Tema are ca scop implementarea ​un simplu agent conversațional bazat pe sistemul [[https://​en.wikipedia.org/​wiki/​ELIZA|ELIZA]]. Dezvoltat în ani ‘60 s-a bucurat de multă popularitate fiind primul candidat cu șanse reale de a trece testul Turing la doar 14 ani după ce acesta a fost formulat.\\+Tema are ca scop implementarea ​unui simplu agent conversațional bazat pe sistemul [[https://​en.wikipedia.org/​wiki/​ELIZA|ELIZA]]. Dezvoltat în anii ‘60 s-a bucurat de multă popularitate fiind primul candidat cu șanse reale de a trece testul Turing la doar 14 ani după ce acesta a fost formulat.\\
 Deși acum are doar relevanța istorică, reprezintă un exercițiu util pentru a ne familiariza cu conceptele din Prolog, în care a fost implementat de multe ori de-a lungul anilor. Vom numi robotul //Gigel//. Deși acum are doar relevanța istorică, reprezintă un exercițiu util pentru a ne familiariza cu conceptele din Prolog, în care a fost implementat de multe ori de-a lungul anilor. Vom numi robotul //Gigel//.
  
Linia 42: Linia 42:
 Veți lucra **numai în fișierul ''​gigel.pl''​**. În fișierul ''​chat.pl''​ se găsesc o serie de funcții ajutătoare. Veți lucra **numai în fișierul ''​gigel.pl''​**. În fișierul ''​chat.pl''​ se găsesc o serie de funcții ajutătoare.
  
-==Reprezentare conștiințelor==+==Reprezentarea cunoștințelor==
  
-Alegerea ​unui replici se bazează pe o structură pe **două niveluri**. Inițial, bazat pe cuvintele găsite în replica utilizatorului (le vom numi **cuvinte cheie**), se selectează un set de reguli, iar apoi bazat pe forma replicii utilizatorului și eventual pe alte criterii, se selectează / formează un răspuns.+Alegerea ​unei replici se bazează pe o structură pe **două niveluri**. Inițial, bazat pe cuvintele găsite în replica utilizatorului (le vom numi **cuvinte cheie**), se selectează un set de reguli, iar apoi bazat pe forma replicii utilizatorului și eventual pe alte criterii, se selectează / formează un răspuns.
  
 Baza de cunoștințe a lui Gigel este formată din predicate ''​rules'',​ fiecare reprezentând un set de reguli pentru anumite cuvinte cheie: Baza de cunoștințe a lui Gigel este formată din predicate ''​rules'',​ fiecare reprezentând un set de reguli pentru anumite cuvinte cheie:
Linia 61: Linia 61:
  * **expresie**:​ un șablon cu care mesajul dat de utilizator trebuie să unifice.  * **expresie**:​ un șablon cu care mesajul dat de utilizator trebuie să unifice.
  * **[replică_1,​ replică_2, …]**: o lista de replici din care se va alege un răspuns.  * **[replică_1,​ replică_2, …]**: o lista de replici din care se va alege un răspuns.
- * **acțiuni**:​ o lista de acțiuni care vor fi trate după ce robotul a răspuns; pentru scopul acestei teme singura acțiune tratată va fi cea de ''​exit'',​ care indică încheierea conversației.+ * **acțiuni**:​ o lista de acțiuni care vor fi tratate ​după ce robotul a răspuns; pentru scopul acestei teme singura acțiune tratată va fi cea de ''​exit'',​ care indică încheierea conversației.
  * **Emoții**:​ vezi [[#​emoții|Emoții]].  * **Emoții**:​ vezi [[#​emoții|Emoții]].
  * **Tags**: vezi [[##​tags-bonus|Tags]] (pentru bonus).  * **Tags**: vezi [[##​tags-bonus|Tags]] (pentru bonus).
Linia 108: Linia 108:
 Pentru selecția replicii, se va implementa predicatul ''​select_answer'',​ care decide răspunsul și acțiunile de realizat, în funcție de replica utilizatorului și de conținutul memoriei. Pentru selecția replicii, se va implementa predicatul ''​select_answer'',​ care decide răspunsul și acțiunile de realizat, în funcție de replica utilizatorului și de conținutul memoriei.
  
-**Memoria** este reprezentată ca un dicționar care reține numărul utilizărilor pentru fiecare replică, iar fiecare replică este reprezentată prin reuniunea cuvintelor din replică. Mai multe despre memorie citiție în secțiunea [[#​Memorie]].+**Memoria** este reprezentată ca un dicționar care reține numărul utilizărilor pentru fiecare replică, iar fiecare replică este reprezentată prin reuniunea cuvintelor din replică. Mai multe despre memorie citițîn secțiunea [[#​Memorie]].
 ===Acțiuni=== ===Acțiuni===
 Dacă dorim ca Gigel să închidă conversația după o replică: Dacă dorim ca Gigel să închidă conversația după o replică:
Linia 145: Linia 145:
 Gigel va calcula care din aceste cuvinte au fost folosite mai des și va folosi replici doar pentru care emoția găsită se află în lista de emoții din regulă.\\ Gigel va calcula care din aceste cuvinte au fost folosite mai des și va folosi replici doar pentru care emoția găsită se află în lista de emoții din regulă.\\
 Dacă ambele tipuri de cuvinte sunt folosite de un număr egal de ori atunci emoția va fi ''​neutru''​.\\ Dacă ambele tipuri de cuvinte sunt folosite de un număr egal de ori atunci emoția va fi ''​neutru''​.\\
-Dacă o regula are lista de emoții goală atunci ea poate fi folosită pentru orice tip de emoție.+Dacă o regula are lista de emoții goală atunci ea poate fi folosită pentru orice tip de emoție, dar o regulă care are o listă de emoții specificată trebuie să aibă prioritate față de o regulă care nu are nimic în lista de emoții, astfel încât să aibă prioritate un comportament mai specific.
  
 ===Tags (Bonus)=== ===Tags (Bonus)===
Linia 157: Linia 157:
 Words = [film, camera, actor, scena, cameraman, scenariu, colorizare, regizor]. Words = [film, camera, actor, scena, cameraman, scenariu, colorizare, regizor].
 </​code>​ </​code>​
 +
 +Similar cu comportamentul de la emoții, o listă care are tag-uri specificate trebuie să aibă prioritate față de o regulă "​generală",​ care nu are taguri specificate,​ astfel încât să aibă prioritate un comportament mai specific.
 ==Cerințe== ==Cerințe==
  
Linia 208: Linia 210:
 === Funcții ajutătoare === === Funcții ajutătoare ===
  
-Deoarece cheia unui dicționar nu poate fi o lista de cuvinte, aceasta este convertit mereu in string înainte să fie folosită drept cheie.\\ ​+Deoarece cheia unui dicționar nu poate fi o lista de cuvinte, aceasta este convertită mereu în string înainte să fie folosită drept cheie.\\ ​
 Pentru a găsi numărul de apariții a cuvintelor va fi nevoie să convertiți replicile din stringuri în lista de atomi sau invers: ​ Pentru a găsi numărul de apariții a cuvintelor va fi nevoie să convertiți replicile din stringuri în lista de atomi sau invers: ​
 <code prolog> <code prolog>
Linia 230: Linia 232:
  
 Puteți conversa cu Gigel efectuând în prolog interogarea ''​gigel.''​ Puteți conversa cu Gigel efectuând în prolog interogarea ''​gigel.''​
 +
 +== Arhiva de pornire ==
 +
 +  * {{ :​20:​teme:​gigel.zip |arhiva de pornire}}
  
 == Changelog == == Changelog ==
 + * 14.05.2020: clarificare comentarii schelet
 + * 14.05.2020: clarificare privind prioritatea regulilor în contextul unei emoții sau al unui subiect de conversație.
 + * 12.05.2020: corecție arhitectură de testare pentru necesitatea calculului soluției de către temă.
 + * 12.05.2020: corecție tester pentru o mai bună testare a emoțiilor și tag-urilor.
  * 07.05.2020: publicare tema.  * 07.05.2020: publicare tema.
 +
  
20/teme/prolog-gigel.1588802475.txt.gz · Ultima modificare: 2020/05/07 01:01 de către Andrei Olaru