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
Urmatoarea versiune Both sides next revision
20:teme:prolog-gigel [2020/05/07 01:01]
Andrei Olaru creat
20:teme:prolog-gigel [2020/05/12 15:35]
Andrei Olaru [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 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 230: Linia 230:
  
 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 ==
 + * 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.txt · Ultima modificare: 2020/05/15 07:01 de către Teodor Szente