Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Both sides previous revision Versiuni anterioare Urmatoarea versiune | Versiuni anterioare Urmatoarea versiune Both sides next revision | ||
20:teme:prolog-gigel [2020/05/07 01:06] Andrei Olaru [Changelog] |
20:teme:prolog-gigel [2020/05/12 15:07] Andrei Olaru [Prolog: Gigel] |
||
---|---|---|---|
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ți î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 208: | Linia 208: | ||
=== 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 233: | Linia 233: | ||
== Arhiva de pornire == | == Arhiva de pornire == | ||
- | * {{ :20:teme:gigel.zip |arhiva}} | + | * {{ :20:teme:gigel.zip |arhiva de pornire}} |
== Changelog == | == Changelog == | ||
* 07.05.2020: publicare tema. | * 07.05.2020: publicare tema. | ||
+ | * 12.05.2020: corecție arhitectură de testare pentru necesitatea calculului soluției de către temă. | ||
+ | |||