agenti care rezolva probleme - inf.ucv.roinf.ucv.ro/documents/cstoean/c2ia_23.pdf · o problema se...
TRANSCRIPT
Agenti care rezolva
probleme
Catalin Stoean
http://inf.ucv.ro/~cstoean
Catalin
StoeanInteligenta Artificiala
2/91
Agenti care rezolva probleme
Formularea problemelor
Exemple de probleme
Algoritmi de cautare standard
Catalin
StoeanInteligenta Artificiala
3/91
Vacanta in Romania – in Arad.
In ziua urmatoare ii pleaca avionul din Bucuresti.
Formularea scopului:
Ajungerea in Bucuresti
Formularea problemei:
Stari: diverse orase
Actiuni: de a merge dintr-un oras in altul
Gasirea solutiei:
O secventa de orase, de ex: Arad, Sibiu, Fagaras, Bucuresti.
Un agent american
Catalin
StoeanInteligenta Artificiala
5/91
Formularea problemelor
Formularea scopului este primul lucru care trebuie
stabilit de catre agent (ajungerea in Bucuresti).
Intuitiv, formularea problemei este procesul de a decide
ce actiuni si stari sunt considerate pentru a atinge scopul
final.
Daca americanul nu are nicio cunostinta aditionala
despre Romania, cel mai bun lucru – alegerea unei
actiuni in mod aleatoriu.
Daca are o harta, poate examina diferite secvente de
actiuni posibile care duc la starea finala, apoi alege cea
mai buna secventa de actiuni.
Catalin
StoeanInteligenta Artificiala
6/91
Formularea problemelor
Procesul de a examina astfel de secvente de actiuni
pentru alegerea celei mai bune dintre ele se numeste
cautare.
Un algoritm de cautare are ca intrare o problema si
intoarce o solutie sub forma unei secvente de actiuni.
Odata gasita solutia, se trece la faza de executie.
O schema simpla pentru un agent consta in:
Formulare
Cautare
Executie
Intelegerea problemei
Un fermier are:
20 de porci
40 de vaci si
60 de cai
Cati cai are fermierul daca el considera ca si vacile sunt
tot cai?
Catalin
StoeanInteligenta Artificiala
7/91
Catalin
StoeanInteligenta Artificiala
9/91
functia agent_simplu_rezolvitor_de_probleme(p) intoarce actiune
Persista la fiecare reapelare
- s – o secventa de actiuni initial vida
- stare – descriere a starii curente in care se afla lumea
- g – scop, initial nul
- problema - formulare
stare = actualizeaza_stare(stare, p)
daca s este vida atunci
g = formulare_scop(stare)
problema = formulare_problema(stare, g)
s = cautare(problema)
actiune = recomandare(s, stare)
s = rest(s, stare)
intoarce actiune
Agenti care rezolva problemePerceptie
Catalin
StoeanInteligenta Artificiala
10/91
Sunt patru tipuri de probleme:
Cu o singura stare (deterministe, observabile complet)
Agentul stie exact in ce stare se va gasi; solutia este o
secventa;
Cu mai multe stari (neobservabil)
Agentul nu stie in ce stare se gaseste;
Contingente (nedeterminist, partial observabil)
Perceptorii aduc informatie noua despre starea curenta
Explorative (spatiul starilor necunoscut)
Formularea problemelor
Catalin
StoeanInteligenta Artificiala
11/91
Agentul aspirator
Avem 2 locatii.
In fiecare locatie
poate fi sau nu
mizerie
poate sa fie
aspiratorul sau nu
Cele 8 stari posibile
Actiuni: stanga, dreapta,
aspira.
Scop: curatarea ambelor
incaperi (starile 7 sau 8)
Catalin
StoeanInteligenta Artificiala
12/91
Senzorii agentului ii
spun exact starea in
care se gaseste.
Agentul stie exact ce
efecte au actiunile sale.
Exemplu: daca se
gaseste in starea 5 si
urmeaza secventa de
actiuni [Dreapta,
Aspira], se ajunge la
atingerea scopului
problemei.
Problema cu o singura stare (exemplu)
Catalin
StoeanInteligenta Artificiala
13/91
Problema cu mai multe stari (exemplu)
Agentul stie exact ce
efecte au actiunile sale
dar…
Senzorii agentului au
acces limitat fata de starea
in care se gaseste.
Poate sa nu aiba senzori
deloc – stie doar ca in
starea initiala se gaseste in
una din starile {1, 2, …, 8}
Poate ajunge sa rezolve
problema?...
Catalin
StoeanInteligenta Artificiala
14/91
Problema cu mai multe stari (exemplu)
DA, pentru ca stie ce efect
au actiunile lui.
Actiunea Dreapta il va face
sa se gaseasca in una din
situatiile {2, 4, 6, 8}.
Ce efect va avea secventa
de actiuni: [Dreapta,
Aspira, Stanga, Aspira]?...
Agentul trebuie sa
rationeze in raport cu
multimi de stari la care
poate ajunge.
Cand mediul nu este complet accesibil, agentul lucreaza
cu multimi de stari in care poate ajunge, nu cu cate o
singura stare.
Catalin
StoeanInteligenta Artificiala
15/91
Problema cu mai multe stari (exemplu)
Catalin
StoeanInteligenta Artificiala
16/91
Problema contingenta (exemplu)
Presupunem ca mediul
este nedeterminist.
Legile lui Murphy
guverneaza mediul
aspirarea duce la
depozitarea murdariei
intr-un loc… care era
complet curat…
De exemplu, in starea
4, daca aspira se poate
ajunge la 2 sau 4.
Catalin
StoeanInteligenta Artificiala
17/91
Problema contingenta (exemplu)
Nu exista o secventa de
actiuni unica ce reprezinta
solutia problemei.
Este nevoie de utilizare a
senzorilor in cursul fazei
de executie:
Aspira numai daca
este mizerie in casuta
curenta.
Catalin
StoeanInteligenta Artificiala
18/91
Probleme explorative
Agentul trebuie sa experimenteze, sa descopere
gradual care sunt efectele actiunilor lui si ce tipuri
de stari exista.
Exemplu: agentul american in Arad, fara o harta
sau fara alte cunostinte despre Romania.
Cautarea se aplica si in cazul acestor probleme,
dar mediul in care apar problemele explorative
este lumea reala.
Catalin
StoeanInteligenta Artificiala
19/91
Formularea problemelor
O problema se defineste prin patru puncte:
1. Starea initiala in care se afla agentul (de exemplu, Arad).
2. Actiuni sau functia succesor S(x) – fiind data o stare x, S(x)
intoarce multimile de stari in care se poate ajunge din x printr-o
singura actiune (S(Arad) = {Zerind, Sibiu, Timisoara})
3. Testarea tintei problemei – se verifica daca starea curenta a
atins tinta problemei (x = Bucuresti, sah_mat(x))
4. Functia de cost al drumului –
calculeaza un cost g pentru drumul curent (suma distantelor,
numarul actiunilor executate etc).
c(x, y) – costul pasului, presupus sa fie ≥ 0
O solutie este o secventa de actiuni care merg de la starea initiala la
starea tinta
Catalin
StoeanInteligenta Artificiala
20/91
Lumea reala este foarte complexa => spatiul starilor
trebuie sa fie abstractizat pentru rezolvarea de
probleme.
(Abstract) Stare = multime de stari reale.
(Abstract) Actiune = combinare complexa de actiuni
reale
Ex: de la Arad la Sibiu: drumuri bifurcate, stopuri etc.
Fiecare actiune abstracta ar trebui sa fie mai “usoara”
decat actiunea/actiunile in problema originala.
Formularea problemelor
Catalin
StoeanInteligenta Artificiala
21/91
Exemple de probleme
Probleme tip joc
Ilustreaza diverse metode de rezolvare de
probleme
Probleme din viata reala
Sunt mai dificile
Sunt mult mai de interes
Catalin
StoeanInteligenta Artificiala
22/91
Puzzle cu 8 valori
3 8 4
5 1 7
6 2 7
1 2 3
4 5 6
8
Starea initiala Starea tinta
Stari: este descrisa locatia fiecarei cifre in una din cele 9 casute.
Actiuni: casuta goala se misca la stanga, dreapta, sus sau jos.
Testarea tintei: starea se gaseste in configuratia din dreapta.
Costul drumului: fiecare pas are costul 1, deci costul drumului
este dat de numarul de mutari.
Catalin
StoeanInteligenta Artificiala
23/91
Problema celor 8 dame
Stari: orice
aranjament de 0 pana
la 8 dame care nu se
ataca.
Actiuni: adauga o
dama la orice patrat.
Testarea tintei: 8
dame care nu se
ataca pe tabla.
Costul drumului: 0.
648 posibilitati…
Catalin
StoeanInteligenta Artificiala
24/91
Problema celor 8 dame (alte actiuni)
Stari: orice aranjament
de 0 pana la 8 dame care
nu se ataca.
Actiuni: adauga o dama
pe coloana cea mai din
stanga a.i. sa nu fie
atacata de alta dama.
Testarea tintei: 8 dame
care nu se ataca pe tabla.
Costul drumului: 0.
2057 posibilitati
Catalin
StoeanInteligenta Artificiala
25/91
Criptaritmetica
FORTY
TEN
TEN
-----------
SIXTY
Solutie: 29786
850
850
---------
31486
F = 2, O = 9, R = 7 etc+
Stari: un puzzle criptaritmatic cu litere inlocuite de cifre.
Actiuni: inlocuieste toate aparitiile unei litere cu o cifra care nu
apare deja in puzzle.
Testarea tintei: puzzle-ul contine numai cifre iar suma este
corecta.
Costul drumului:0. Toate solutiile sunt egale ca insemnatate.
Catalin
StoeanInteligenta Artificiala
26/91
Aspiratorul cu o singura stare
Stari: una din cele 8 stari.
Actiuni: mutare stanga, mutare dreapta, aspirare.
Testarea tintei: toate locatiile sunt curate.
Costul drumului: fiecare actiune consta 1.
Catalin
StoeanInteligenta Artificiala
27/91
Aspiratorul cu stari multiple
Agentul nu are senzori, insa tot trebuie sa curete toate locatiile.
Stari: submultimi din cele 8 stari.
Actiuni: mutare stanga, mutare dreapta, aspirare.
Testarea tintei: toate locatiile sunt curate.
Costul drumului: fiecare actiune consta 1.
Multimea de stari initiale consta din toate cele 8 situatii pentru ca
agentul nu are senzori.
Catalin
StoeanInteligenta Artificiala
29/91
Misionarii si canibalii
Trei misionari si trei canibali se afla de o parte a raului. Ei au o
barca ce poate duce cel mult doi oameni. Gasiti o posibilitate sa
traverseze toti de cealalta parte a raului cu conditia sa nu existe mai
multi canibali decat misionari intr-o parte.
https://www.learn4good.com/kids-games/puzzle/boat.htm
http://www.novelgames.com/en/missionaries/
Stari: secvente ordonate de 3 numere reprezentand numarul de
misionari, canibali si barci de partea in care se aflau initial (3, 3, 1).
Actiuni: mutarea unui misionar sau canibal sau 2 canibali, 2
misionari sau un misionar si un canibal de pe o parte pe alta.
Testarea tintei: starea (0, 0, 0).
Costul drumului: numarul de traversari.
Trecerea unui pod
cu lampa - tema
Noapte, exista o singura lampa, 5 persoane trebuie sa
treaca de pe un mal pe celalalt pe un pod care poate
sustine doar doua persoane.
Fiecare persoana trece podul cu o viteza diferita: 1 sec,
3 sec, 6 sec, 8 sec, 12 sec.
Cand trec doua persoane, se deplaseaza ambele cu
viteza celei care merge mai incet.
Lampa tine doar 30 sec!
http://www.inwebson.com/demo/cross-the-bridge/
Catalin
StoeanInteligenta Artificiala
30/91
Catalin
StoeanInteligenta Artificiala
33/91
Probleme din viata reala
Algoritmi de gasire de rute:
Rutarea in retele de calculatoare
Sisteme de planificare pentru transportul aerian
Problema comis-voiajorului
Sa se gaseasca cel mai scurt tur astfel incat sa se viziteze
fiecare oras exact o data plecand si terminand din/in
acelasi oras.
Spre deosebire de problemele cu gasire de rute, aici
trebuie retinute orasele vizitate.
Catalin
StoeanInteligenta Artificiala
34/91
Algoritmi de cautare standard
Pornim din Arad.
Posibilitati?
Zerind, Sibiu, Timisoara…
Pe care il alegem?
Depinde de strategia de
cautare folosita.
Catalin
StoeanInteligenta Artificiala
35/91
Procesul de cautare poate fi construit sub forma unui
arbore de cautare.
Radacina arborelui de cautare este un nod de cautare
care corespunde cu starea initiala.
Algoritmi de cautare standard
Arad
Sibiu Timisoara Zerind
Arad Fagaras Oradea Vilcea Arad Lugoj Arad Oradea
Catalin
StoeanInteligenta Artificiala
36/91
Algoritm general de cautare
functia cautare_generala(problema, strategie)
intoarce solutie sau esec
Initializeaza arborele de cautare folosind starea initiala a problemei.
Cat timp solutie negasita si noduri ≠ executa
Daca nu mai sunt posibilitati de incercat atunci
intoarce esec
Alege un nod posibil in concordanta cu strategia
Daca nodul contine o stare tinta atunci
intoarce solutia corespunzatoare
Altfel gaseste toate posibilitatile ce pornesc din acest nod si
adauga-le la arborele de cautare
Sfarsit cat timp
Catalin
StoeanInteligenta Artificiala
37/91
Componentele unui nod
Starea din spatiul starilor careia ii corespunde nodul;
Nodul parinte (nodul din arborele de cautare care a
generat nodul curent);
Actiunea care a fost aplicata pentru a se ajunge la nodul
curent;
Adancimea nodului - numarul de noduri prin care s-a
trecut de la nodul radacina pana la nodul curent;
Costul drumului de la starea initiala pana la nodul curent.
Catalin
StoeanInteligenta Artificiala
38/91
Se face distinctie intre noduri si stari:
Starea reprezinta o configuratie a mediului;
Nodul contine informatii cu privire la structura arborelui de
cautare.
Colectia de noduri este implementata sub forma de lista.
Operatii posibile:
genereaza_lista(Elemente) – creeaza o lista cu
elementele date
goala(lista) – intoarce “adevarat” daca este goala lista
scoate_din_fata(lista) – intoarce elementul din fata
adauga(Elemente, lista) – introduce “Elemente”-le in “lista”
Algoritmi de cautare standard
Catalin
StoeanInteligenta Artificiala
39/91
Algoritm general de cautare
functia cautare_generala(problema) intoarce solutie sau esec
noduri = genereaza_lista(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, actiuni[problema]))
Sfarsit cat timp
Catalin
StoeanInteligenta Artificiala
40/91
Mai avem in vedere la algoritmul anterior:
Ce noduri au fost vizitate (pentru a evita ciclurile)
Pentru fiecare nod retinem nodul parinte
Pentru a intoarce la final solutia plecand de la destinatie
inapoi catre start.
Daca strategia o cere:
Adancimea nodului curent (radacina este la adancimea 0)
Costul de la nodul de start pana la cel curent
Cosul nodului de start este 0, apoi la nodul curent
insumam costul nodului parinte cu costul dintre nodul
parinte si cel curent.
Algoritmi de cautare standard
Catalin
StoeanInteligenta Artificiala
41/91
Strategiile de cautare sunt analizate in functie de 4 criterii:
Completitudine
Garanteaza strategia gasirea unei solutii atunci cand exista
una?
Complexitate temporala
Cat dureaza gasirea unei solutii?
Complexitatea spatiala
De cata memorie este nevoie pentru a face cautarea?
Optimalitate
Gaseste strategia solutia cea mai buna calitativ cand exista
mai multe solutii diferite?
Algoritmi de cautare standard
Catalin
StoeanInteligenta Artificiala
42/91
Algoritmii studiati in acest curs (cel de azi) folosesc doar
cautarea neinformata (blind search).
Nu exista informatii despre numarul de pasi sau despre
costul drumului de la starea curenta pana la starea tinta.
Pot doar distinge o stare tinta de o stare care nu este tinta.
(Agentul american) Orice cale din Arad are aceeasi
importanta.
Cautarea informata (heuristic search) presupune
utilizarea de informatii aditionale (data viitoare).
(Agentul american) Se poate folosi informatia ca trebuie sa
mearga spre sud-est...
Algoritmi de cautare standard
Catalin
StoeanInteligenta Artificiala
43/91
Cautarea in latime
Nodul radacina este expandat intai, apoi toate celelalte
noduri sunt expandate, apoi toti succesorii lor s.a.m.d.
Sunt considerate toate drumurile de lungime 1, apoi
toate drumurile de lungime 2 etc.
Daca exista o solutie, algoritmul garanteaza ca o va
gasi, iar daca exista mai multe solutii, algoritmul va gasi
intai starea tinta aflata la cel mai mic numar de noduri.
Catalin
StoeanInteligenta Artificiala
59/91
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_lista(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
Lista noduri contine nodurile ce urmeaza
sa fie vizitate (din marcaj)
Catalin
StoeanInteligenta Artificiala
Nod de start
Noduri explorate (vizitate)
noduri de
vizitat
Noduri neexplorate (nevizitate)
60/91
Catalin
StoeanInteligenta Artificiala
61/91
Vacanta in Romania – in Arad.
In ziua urmatoare ii pleaca avionul din Bucuresti.
Formularea scopului:
Ajungerea in Bucuresti
Formularea problemei:
Stari: diverse orase
Actiuni: de a merge dintr-un oras in altul
Gasirea solutiei:
O secventa de orase, de ex: Arad, Sibiu, Fagaras, Bucuresti.
Problema de rutare: un agent american
Inteligenta ArtificialaCatalin
Stoean
61/91
Catalin
StoeanInteligenta Artificiala
62/91
Un agent american
Inteligenta ArtificialaCatalin
Stoean
62/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad,
Arad
Catalin
Stoean
63/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind
AradZerind Sibiu Timisoara Zerind Sibiu Timisoara
Parcurgerea: Arad,
Catalin
Stoean
64/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind
Zerind Sibiu Timisoara Zerind Sibiu Timisoara
Oradea Arad
A mai aparut acest nod!
Catalin
Stoean
65/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu
Zerind Sibiu Timisoara Sibiu Timisoara
Oradea
Oradea
Catalin
Stoean
66/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu
Zerind Sibiu Timisoara Sibiu Timisoara
Fagaras VilceaOradea
Oradea
Catalin
Stoean
67/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara
Zerind Sibiu Timisoara Timisoara
Fagaras Vilcea
Oradea
Oradea
Catalin
Stoean
68/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara
Zerind Sibiu Timisoara Timisoara
Fagaras Vilcea
Fagaras Vilcea
Lugoj
Oradea
Oradea
Catalin
Stoean
69/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea
Zerind Sibiu Timisoara
Fagaras Vilcea
Fagaras Vilcea
Lugoj
Oradea Lugoj
Oradea
Catalin
Stoean
70/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea, Fagaras
Zerind Sibiu Timisoara
Fagaras Vilcea
Fagaras Vilcea
Lugoj
Lugoj
Oradea
Catalin
Stoean
71/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea, Fagaras
Zerind Sibiu Timisoara
Fagaras Vilcea
Fagaras Vilcea
Lugoj
Lugoj
Bucuresti
Oradea
Catalin
Stoean
72/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea, Fagaras,
Vilcea
Zerind Sibiu Timisoara
Fagaras Vilcea
Vilcea
Lugoj
Lugoj Bucuresti
Bucuresti Pitesti Craiova
Oradea
Catalin
Stoean
73/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea, Fagaras,
Vilcea, Lugoj
Zerind Sibiu Timisoara
Fagaras Vilcea Lugoj
Lugoj Bucuresti
Bucuresti Pitesti Craiova
Pitesti Craiova
Oradea
Catalin
Stoean
74/91
Inteligenta Artificiala
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea, Fagaras,
Vilcea, Lugoj
Zerind Sibiu Timisoara
Fagaras Vilcea Lugoj
Lugoj Bucuresti
Bucuresti Pitesti Craiova
Pitesti Craiova
Mehadia
Oradea
Catalin
Stoean
75/91
Inteligenta Artificiala
Bucuresti
Algoritm cautare in latime
functia cautare_latime(problema) intoarce solutie sau esec
noduri = genereaza_coada(genereaza_nod(stare_initiala[problema]))
Cat timp solutie negasita si noduri ≠ executa
nod = scoate_din_fata(noduri)
Daca testare_tinta[problema] se aplica la stare(nod) atunci
solutie gasita
Altfel
noduri = adauga(noduri, expandare(nod, adauga_la_sfarsit))
Sfarsit cat timp
AradnoduriFaţa Sfarsit
Parcurgerea: Arad, Zerind, Sibiu,
Timisoara, Oradea, Fagaras,
Vilcea, Lugoj, Bucuresti!
Zerind Sibiu Timisoara
Fagaras Vilcea Lugoj
Bucuresti Pitesti Craiova
Pitesti Craiova
Mehadia
Mehadia
Nod tinta!
Bucuresti
Oradea
Catalin
Stoean
76/91
Catalin
StoeanInteligenta Artificiala
77/91
Algoritmul satisface criteriile:
Completitudine
Optimalitate, cu conditia ca orice operatiune sa aiba
acelasi cost.
De verificat complexitatile…
Presupunem ca fiecare stare poate fi expandata la b alte
stari.
Nodul radacina genereaza b noduri la primul nivel, si
fiecare din acestea genereaza cate b noduri => pe al
doilea nivel avem b2 noduri.
Cautarea in latime
Catalin
StoeanInteligenta Artificiala
78/91
Daca solutia problemei se gaseste la lungimea d atunci
numarul maxim de noduri expandate pentru gasirea
solutiei va fi:
1 + b + b2 + b3 + … + bd
Complexitatea O(bd).
Consideram un exemplu in care b = 10 si vom urmari
diverse valori pentru d.
Consideram ca se proceseaza 1 milion de noduri pe
secunda.
Un nod se reprezinta pe 1000 de bytes.
Cautarea in latime
Catalin
StoeanInteligenta Artificiala
79/91
Adancime Noduri Timp Memorie
2 110 0.11 milisecunde 107 kilobytes
4 11 110 11 milisecunde 10.6 megabytes
6 106 11 secunde 1 gigabyte
8 108 2 minute 103 gigabytes
10 1010 3 ore 10 terabytes
12 1012 13 zile 1 petabyte
14 1014 3.5 ani 99 petabytes
16 1016 350 ani 10 exabytes
Cautarea in latime
Catalin
StoeanInteligenta Artificiala
80/91
Exercitiu
noduriFaţa Sfarsit
Parcurgerea: Bucuresti, …,
Rm. Vilcea
Gasiti o ruta de la Bucuresti la Sibiu
folosind parcurgerea in latime.
Desenati arborele, scrieti parcurgerea
si continutul pentru noduri la fiecare
pas.
Inteligenta ArtificialaCatalin
Stoean
80/91
Muta 1m
Misionarii si canibalii
(3m,3c,1) (a)
(3m,2c,0) (b)
Muta 1c
(3m,1c,0) (c)
Muta 2c
(2m,2c,0) (d)
Muta 1m 1c
(a)
Muta 1c
(3m,2c,1) (e)
Muta 1c
(a)
Muta 2c
(e) (a)
Muta 1m 1c
Muta 1m
(d) Muta 1c(c)(3m,0c,0) (f)
(e)
Muta 2cMuta 2c
(3m,1c,1) (g)
Muta 1c
(f)
Muta 1cMuta 2m
(1m,1c,0) (h)
(g)
Muta 2mMuta 1m 1c
(2m,2c,1) (i)
Inteligenta ArtificialaCatalin
Stoean
81/91
(2m,2c,1) (i)
Misionarii si canibalii
Muta 1m 1cMuta 2m
(0m,2c,0) (j)(h)
Muta 2mMuta 1c
(0m,3c,1) (k)(i)
Muta 1cMuta 2c
(0m,1c, 0) (l) (j)Muta 2c
Muta 1c
(0m,2c,1) (m)(k)
Muta 1cMuta 2c
(0m,0c,0) (n)(l)
Stare tinta
Inteligenta ArtificialaCatalin
Stoean
82/91
Puzzle cu 8 valori
2 3
1 4 6
7 5 8
1 2 3
4 5 6
7 8
Starea initiala Starea tinta
Stari: este descrisa locatia fiecarei cifre in una din cele 9 casute.
Actiuni: casuta goala se misca la stanga, dreapta, sus sau jos.
Testarea tintei: starea se gaseste in configuratia din dreapta.
Costul drumului: fiecare pas are costul 1, deci costul drumului
este dat de numarul de mutari.
Inteligenta ArtificialaCatalin
Stoean
83/91
• Sam Loyd a introdus in 1878 15-puzzle-ul.
• A oferit un premiu de 1 000 $ din proprii bani pentru cel care
rezolva problema in situatia in care doar 14 si 15 sunt inversate,
restul fiind aliniate crescator.
Puzzle cu 15 valori
Inteligenta ArtificialaCatalin
Stoean
84/91
Puzzle cu 15 valori
12
14
11
15
10
13
9
5 6 7 8
4321
12
15
11
14
10
13
9
5 6 7 8
4321
?
Nimeni nu a castigat premiul!
Inteligenta ArtificialaCatalin
Stoean
85/91
Cate stari posibile exista?
9! = 362 880 stari
Numai la jumatate din aceste stari se poate
ajunge din orice stare data.
Puzzle cu 8 valori
Inteligenta ArtificialaCatalin
Stoean
86/91
O valoare j apare dupa o valoare i daca
j apare pe acelasi rand, dar in dreapta lui i
j se afla sub linia lui i
Pentru i = 1, 2, ..., 8, fie ni numarul de aparitii ale lui j (j <
i) dupa i.
N = n2 + n3 + … + n8
Posibilitatea de a atinge scopul final...
2 3
1 4 6
7 5 8
n2 =1
n3 =1
n4 =0
n5 =0
n6 =1
n7 =1
n8 =0
N = 4
Pentru N par, puzzle-ul cu
8 valori este rezolvabil!
Inteligenta ArtificialaCatalin
Stoean
87/91
2 3
1 4 6
7 5 8
2 3
1 4 6
7 5 8
D
1 2 3
4 6
7 5 8
J
2 3
1 4 6
7 5 8
D
St
2 3
1 4 6
7 5 8
2 4 3
1 6
7 5 8
J
1 2 3
7 4 6
5 8
J
1 2 3
4 6
7 5 8
D
2 3 6
1 4
7 5 8
J
2 4 3
1 6
7 5 8
St
2 4 3
1 6
7 5 8
D
2 4 3
1 5 6
7 8
J
1 2 3
4 6
7 5 8
D
1 3
4 2 6
7 5 8
S
1 2 3
4 5 6
7 8
J
1 2 3
7 4 6
5 8
D
2 3 6
1 4
7 5 8
St
2 3
1 4 6
7 5 8
S
4 3
2 1 6
7 5 8
S
2 4 3
7 1 6
5 8
J
2 4
1 6 3
7 5 8
S
2 4 3
1 6 8
7 5
J
2 4 3
1 5 6
7 8
St
2 4 3
1 5 6
7 8
D
1 2
4 6 3
7 5 8
S
1 2 3
4 6 8
7 5
J
1 3
4 2 6
7 5 8
St
1 3
4 2 6
7 5 8
D
1 2 3
4 5 6
7 8
1 2 3
4 5 6
7 8
StD
S = sus
J = jos
D = dreapta
St = stanga
Inteligenta ArtificialaCatalin
Stoean
88/91
Catalin
StoeanInteligenta Artificiala
Exercitiu - Problema celor 4 dame
Stari: orice aranjament de 0 pana la 4 dame care nu se ataca.
Actiuni: adauga o dama pe coloana cea mai din stanga a.i. sa nu
fie atacata de alta dama.
Testarea tintei: 4 dame care nu se ataca pe tabla.
Costul drumului: 0.
Pornind de la o tabla de 4x4 goala si folosind datele problemei de
mai sus, sa se construiasca printr-o cautare in latime arborele
complet care duce la rezolvarea problemei. Numerotati nodurile in
ordinea in care au fost vizitate.
Inteligenta ArtificialaCatalin
Stoean
89/91
Catalin
StoeanInteligenta Artificiala
90/91
Recapitulare 1/3
Am studiat metode pe care un agent le poate utiliza cand nu este
clar care actiune imediata trebuie urmata.
In astfel de cazuri, agentul poate considera posibile secvente de
actiuni; acest proces se numeste cautare.
Inainte de a cauta solutii, un agent trebuie sa formuleze o tinta
(un scop) si sa foloseasca apoi aceasta tinta pentru a formula
problema.
O problema consta din 4 parti:
O stare initiala
O multime de actiuni
O functie care testeaza daca starea curenta este chiar tinta
O functie de cost al drumului.
Catalin
StoeanInteligenta Artificiala
91/91
Recapitulare 2/3
Mediul problemei este reprezentat prin spatiul starilor.
Un drum prin spatiul starilor de la starea initiala la starea tinta este
o solutie.
In viata reala, cele mai multe probleme sunt prost-definite; dupa
analiza, multe probleme pot fi transpuse intr-un spatiu al starilor.
Un algoritm general de cautare poate fi folosit pentru rezolvarea
oricarei probleme.
Algoritmii de cautare sunt analizati in functie de completitudine,
optimalitate, complexitatea timpului, complexitatea spatiului.
Complexitatea depinde de b (numarul de noduri in care se
expandeaza un nod) si de d (adancimea la care se gaseste cea
mai apropiata solutie).