Overview

Tema 2 AI  |  Iulius Curt  343 C3
---------------------------------


Rulare:
    - play.scm -> Run

Surse:
    - agents.scm  - defineste doi agenti: `first-agent` si `better-agent`
    - agent_utility.scm  - implementarea propriu-zisa a cautarii-inainte si a
            functiilor auxiliare acesteia
    - common.scm  - functii de uz comun
    - strips.scm  - reprezentarea STRIPS a operatorilor sub forma de liste si
            functii de generare a domeniului variabilelor
    - heuristics.scm  - implementeaza doua euristici folosite in ordonarea
            ramurilor pentru cautarea-inainte

Agentii (ambii fara memorie):
    - First-agent:
        - Face cautare-inainte in spatiul starilor pana la obtinerea scopului
          final
        - Poate folosi una din euristici sau poate aplica cautare pe liste de
          ramificatii nesortate (rezultate foarte proaste)
    - Better-agent:
        - Sparge scopul principal in 3 subscopuri:
            - Sa am o bila de culoarea mea incarcata
            - Sa fiu in propria casa
            - Scopul initial, acum trivial de indeplinit
        - Impreuna cu euristici bune (euristica 1 pentru pasii 1 si 3 si
          euristica 2 pentru pasul 2) se obtin planuri bune.

Reprezentarea STRIPS:
    - Reprezentarea foloseste predicatele speciale (care nu vor aparea in baza
      de cunostinte): Succ, Positive, Even, Empty_slots (foloseste predicatele
      Carries din baza de cunostinte), Different
    - In listele Add-list si Del-list apar doar predicate din baza de cunostinte
      si predicatul Succ, care e tratat special (sunt inferate valorile
      parametrilor sai si apoi sunt eliminate)

Euristici de ordonare a ramificatiilor:
    La fiecare pas al cautarii se ramifica toate starile adiacente posibile.
    Acestea vor fi incercate in ordine, de la primul la ultimul pana la gasirea
    unei solutii, deci starile mai utile ar trebui sa aiba prioritate mai mare.
    - 1. Ordoneaza in functie de locatie, spre exemplu:
        - Daca ma aflu in casa proprie, are prioritatea cea mai mare operatia
          de a descarca o bila de culoarea proprie
        - Daca nu ma aflu in casa proprie, as vrea, daca se poate, sa incarc o
          bila de culoarea proprie, daca nu sa ma mut etc.
    - 2. Operatiile de mutare au prioritate maxima si sunt ordonate crescator
      in functie de distanta pana la casa proprie. Foarte utila pentru
      intoarcerea acasa, dar functioneaza bine si pentru cazul general.


Probleme:
    - O problema ciudata a fost ca functia `equal-hash-code` din biblioteca
      genereaza acelasi hash penntru 'Room4 si 'RedWarehouse (simboluri). Drept
      urmare, e inutilizabila.
      Dupa transformarea simbolurilor in stringuri nu au mai aparut conflicte.
    - Functia `goal-achievable` a rezolvat o problema la care nu ma gandisem:
      cand un robot are ca scop colectarea ultimei bile (spre exemplu) si bila
      se afla in portbagajul celuilalt robot, primul robot intra intr-o
      nedumerire acuta si, dupa ce cauta la infinit, moare, fiind imposibil sa
      faca un plan.