{"id":17183373,"url":"https://github.com/teodutu/ia","last_synced_at":"2025-03-25T02:39:04.786Z","repository":{"id":121178553,"uuid":"303330743","full_name":"teodutu/IA","owner":"teodutu","description":"Inteligenta Artificiala - UPB 2020-2021","archived":false,"fork":false,"pushed_at":"2021-01-26T22:56:03.000Z","size":21630,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T03:42:32.892Z","etag":null,"topics":["and-or-search","branch-and-bound","constraint-satisfaction-problem","iterative-deepening-a-star","learning-realtime-astar","monte-carlo-tree-search","unification-algorithm"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teodutu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-12T08:44:48.000Z","updated_at":"2022-06-13T20:31:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"842c4b6c-7e9e-4a5a-888e-cdb239c1cc52","html_url":"https://github.com/teodutu/IA","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teodutu%2FIA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teodutu%2FIA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teodutu%2FIA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teodutu%2FIA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teodutu","download_url":"https://codeload.github.com/teodutu/IA/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245388257,"owners_count":20607147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["and-or-search","branch-and-bound","constraint-satisfaction-problem","iterative-deepening-a-star","learning-realtime-astar","monte-carlo-tree-search","unification-algorithm"],"created_at":"2024-10-15T00:40:23.607Z","updated_at":"2025-03-25T02:39:04.764Z","avatar_url":"https://github.com/teodutu.png","language":"Jupyter Notebook","readme":"# IA\r\nInteligenta Artificiala - UPB 2020-2021\r\n\r\n\r\n\r\n## Laboratoare\r\n### Laborator 1 - A*\r\nSe foloseste _A*_ pentru a se gasi drumul de lungime minima intre 2 puncte\r\ndintr-un sistem de coordonate carteziene. Nu exista costuri la trecerea dintr-o\r\ncelula in alta, iar euristicile folosite sunt distanta euclidiana si cea\r\nManhattan.\r\n\r\n#### Nota\r\nDaca se elimina `sqrt()` din distanta euclidiana, **pare** ca algoritmul se\r\ncomporta mai bine, dar asta e o pura intamplare, din moment ce fara `sqrt()`\r\neuristica nu mai e admisibila. De fapt, explorand mai putine stari, algoritmul\r\nar putea ajunge la un rezultat gresit daca ar fi rulat pentru o problema mai\r\ncomplexa\r\n\r\n\r\n### Laborator 2 - Arbore SI/SAU\r\nSe foloseste un *arbore SI/SAU* pentru a se modela comportamentul unui aspirator\r\n**nedeterminist** intr-un spatiu 1D, unde celulele pot fi fie curate, fie\r\nmurdare. Nedeterminismul consta in faptul ca atunci cand aspiratorul curata o\r\ncelula, exista 2 posibilitati:\r\n- Celula era curata $\\Rightarrow$ aceasta se poate ramane curata sau se poate\r\nmurdari\r\n- Celula era murdara $\\Rightarrow$ aceasta va fi curatat, dar se poate ca si\r\ncelula din dreapta sa fie curatata\r\n\r\n#### Nod SAU\r\nReprezinta o decizie. In fiecare stare, sunt maxumum 3 actiuni posibile: `Left`,\r\n`Right`, `Clean`. Fiii unui nod **SAU** reprezinta efectele acestor decizii,\r\ndaca ar deveni actiuni. Deci daca oricare dintre ele duce la o stare de succes\r\n(in care toate celulele sunt cu siguranta curate), atunci si nodul poate duce\r\nla o stare de succes.\r\n\r\n#### Nod SI\r\nReprezinta o actiune in sine. Pentru actiunile de miscare (`Left`, `Right`), are\r\nun singur fiu, noua pozitie in care ajunge aspiratorul. Pentru actiunea `Clean`,\r\nnedeterminismul aspiratorului inseamna ca pentru a fi siguri ca acest nod duce\r\nla o stare de succes, e nevoie ca ambele situatii care se pot obtine in urma\r\nacestei actiuni (descrise mai sus) sa duca la succes, pentru ca nu stim care\r\nscenariu se va intampla in cazul unei functionari a aspiratorului.\r\n\r\n#### Plan\r\nLa final se creeaza un *plan* de actiune, un fel de algoritm care descrie\r\ndeciziile aspiratorului in functie de mediu (curatenia celulelor).\r\n\r\n\r\n### Laborator 3 - PCSP\r\nSe implementeaza un algoritm generic de rezolvare a unei probleme de satisfacere\r\na constrangerilor care admite un numar dat de abateri de la constrangerile date.\r\nAlgoritmul folosit este un *BKT* clasic care nu mai viziteaza nodurile de pe o\r\nramura atunci cand numarul de abateri de la constragneri de pe aceasta depaseste\r\nnumarul minim global gasit pana in acel moment, deoarece ce pe acea ramura nu\r\nmai se poate gasi o asignare de variabile cu un cost mai mic decat minimul\r\ncurent.\r\n\r\n\r\n### Laborator 4 - MCTS\r\nSe implementeaza algoritmul *Monte Carlo Tree Search* pe un joc de\r\n[connect 4](https://en.wikipedia.org/wiki/Connect_Four)\r\n\r\n\r\n### Laborator 5 - Unificare in logica cu predicate de ordinul I\r\nSe foloseste\r\n[algoritmul Robinson](https://en.wikipedia.org/wiki/Unification_(computer_science)#A_unification_algorithm)\r\npentru a se realiza unificarea a doua formule, pe baza unui dictionar de\r\nsubstitutii (care se completeaza pe parcursul algoritmului).\r\n\r\nBine ca de data asta putem sa alegem singuri cum reprezentam datele...\r\n\r\n\r\n### Laborator 6 - Rezolutie in logica cu predicate de ordinul I\r\nSe utilizeaza rezolutia pentru a demonstra propozitii.\r\n\r\n\r\n### Laborator 7 - Forward Chaining\r\nSe demonstreaza o serie de teoreme (implicatii) folosind forward chaining.\r\nTeoremele sunt formulate in _FNC_ si se folosesc functiile implementate in\r\nlaboratoarele anterioare (`unify()` si `substitute()`) pentru a aplica un set\r\nde fapte unor premise, astfel incat sa se obtina noi fapte.\r\n\r\n\r\n### Laborator 8 - Graphplan\r\nIn lab e implementat algoritmul *Graphplan* care creeaza o planificare de\r\nactiuni cu scopul de a ajunge la o anumita stare. Starile sunt definite ca o\r\nlista de predicate. Algoritmul se bazeaza pe 2 notiuni:\r\n\r\n#### Predicate mutex\r\nSunt predicate care se contrazic (de ex.: `A` si `~A`). Aceste predicate nu pot\r\nface parte din aceeasi stare.\r\n\r\n#### Actiuni mutex\r\nSunt actiuni care au cel putin unul dintre preconditii sau efecte in mutex.\r\nAceste actiuni nu se pot executa simultan.\r\n\r\nPe baza mutecsilor descrisi mai sus, se creeaza o lista de actiuni posibile, una\r\nde actiuni aflate in mutex (au oricare dintre premise sau efecte in relatie de\r\nmutex), alta de efecte ale actiunilor antementionate si inca una cu efectele\r\naflate in mutex.\r\n\r\n\r\n### Laborator 9 - Seminar retele bayesiene\r\nNiste tractoare scarboase de rezolvat pe hartie. Calcule chioare de\r\nprobabilitati si nimic mai mult. Nu merita sa ajunga pe Git...\r\n\r\n\r\n### Laborator 10 - Eliminarea variabilelor din retele bayesiene\r\nSe implementeaza reguli care reduc dimensiunea _factorilor_ (tabelelor de\r\nprobabilitati) din nodurile unei retele bayesiene.\r\n\r\n#### Multiplicare\r\nUn join intre 2 factori prin care se inmultesc probabilitatile liniilor care fac\r\nmatch.\r\n\r\n#### Insumare\r\nSe elimina o variabila dintr-un factor adunand valorile intrarilor unde\r\nvariabila respectiva are valori opuse (se poate ignora pentru ca se considera\r\nsi cazul in care e adevarata si cel in care nu).\r\n\r\n#### Reducere conform cu observatiile\r\nDaca observam ca o variabila are o anumita valoare, putem elimina intrarile cu\r\nvaloarea opusa din toti factorii in care apare variabila.\r\n\r\n\r\n\r\n## Teme\r\n### Tema 1 - Cautari informate in spatiul starilor\r\nSe implementeaza si se compara performantele algoritmilor `DFID`, `IDA*`,\r\n`LRTA*` si [Branch and Bound](https://artint.info/html/ArtInt_63.html). Se\r\nafieseaza caile gasite de agent de la starea initiala pana la cea finala,\r\ncosturile gasite de acesta pentru fiecare stare explorata, precum si timpii si\r\nmemoria utilizata in cadrul fiecarui algoritm.\r\n\r\n### Tema 2 - Game about Squares\r\nSe implementeaza un algoritm de rezolvare a nivelurilor din jocul \"Game about\r\nSquares\". Se foloseste algoritmul Best First ce foloseste euristica euclidiana,\r\nimpreuna cu doua strategii de eliminare a starilor ce nu pot duce la o stare\r\ncastigatoare.\r\n\r\n### Tema 3 - Clasificarea si rezumarea articolelor de stiri\r\nSe foloseste algoritmul Naive Bayes pentru a clasifica articole de stiri dupa\r\ndomeniul acestora. Acelasi algoritm este folosit si pentru rezumarea acestor\r\narticole. Rezumatele sunt create de catre model selectand unele propozitii din\r\narticolul initial. Se antreneaza si se compara rezultatele obtinute atat cu\r\nmonograme cat si cu bigrame.\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteodutu%2Fia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteodutu%2Fia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteodutu%2Fia/lists"}