{"id":23265745,"url":"https://github.com/andreip/pa","last_synced_at":"2025-04-06T07:34:00.494Z","repository":{"id":2505044,"uuid":"3480070","full_name":"andreip/PA","owner":"andreip","description":"Ants project. AI Challenge theme.","archived":false,"fork":false,"pushed_at":"2012-05-10T20:27:31.000Z","size":2500,"stargazers_count":4,"open_issues_count":6,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-12T12:57:02.109Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"samwillis/pagedown-bootstrap","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreip.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-02-18T18:32:06.000Z","updated_at":"2021-02-27T23:32:59.000Z","dependencies_parsed_at":"2022-08-28T19:00:17.068Z","dependency_job_id":null,"html_url":"https://github.com/andreip/PA","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/andreip%2FPA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreip%2FPA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreip%2FPA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreip%2FPA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreip","download_url":"https://codeload.github.com/andreip/PA/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247450800,"owners_count":20940938,"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":[],"created_at":"2024-12-19T15:32:18.563Z","updated_at":"2025-04-06T07:34:00.476Z","avatar_url":"https://github.com/andreip.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"BasculAnts PA project.\n\n* Membrii:\n    Bărbulescu Mihai - 325 CA\n    Petre Andrei - 325CA\n    Stana Iulian - 325CA\n    Traistă-Popescu Vlad - 325CA\n\n* Mediu de dezvoltare: vim și/sau Eclipse cu PyDev/Egit\n* Mod de compilare: Interpretor Python\n* Versionare: repository privat pe github\n\n* Rulare bot:\n    Rularea hartilor pentru etapa 1 se face prin script_run.sh. Pt rulare bot,\n    folositi python MyBot.py sau ./MyBot.py (dacă se rulează cu a doua variantă\n    trebuie să dați chmod a+x la MyBot.py). În fișierul script_run.sh am adunat\n    laolată toate comenzile care rulează cele 4 hărți pentru prima etapă, pentru\n    testarea botului.\n\n* Abordarea algoritmică a etapei:\n      Folosim A* pentru a trimite furnica spre o zona unde dorim noi. A*\n    functioneaza pe ideea clasica, cu un scor de estimare a drumului bazat pe\n    distanta de la inceput si pe cat mai are pana la destinatie (optimist).\n    Complexitatea A* este proportionala cu lungimea de la sursa la destinatie\n    (Theta(n)), doar ca spatiul folosit este mai mare. Pentru fiecare\n    nod din spatiul starilor, adaugam toti vecinii lui (maxim 4), deci crestere\n    exponentiala. Acestia sunt adaugati intr-un heap (complex. O(log(m)), m\n    fiind nr de elemente in heap, care creste exponential, deci m ~ 4^k, deci\n    complexitatea e cam O(k) pentru fiecare inserare) si extrasi in timp\n    constant. Deci ar fi cam Theta(n*k). Probabil e loc de imbunantatiri.\n      Pentru fiecare mutare, calculam pentru fiecare furnica (N furnici) noua\n    directie in care sa mearga. Daca vede mancare, ii calculam drumul cu A*\n    pana la mancare, altfel daca are deja un drum, continua pe el (drumurile le\n    pastram intr-un dictionar \"paths\", deci e timp constant verificare si\n    extragere / adaugare de o noua instanta). Daca nu vede mancare, o trimitem\n    spre cea mai apropiata zona neexplorata, tot cu A* calculand distanta.\n      Deci O(n*N*k) ~ O(n^3) complexitate pe mutare. Totodata, pentru fiecare\n    mutare, mai updatam harta cu ceea ce vede fiecare furnica in parte, prin\n    ants.landmap(). Asta dureaza O(N*viewradius2), unde N = nr de furnici.\n      Se executa mapfilter() in landmap() o singura data, deci O(viewradius2).\n      Complexitatea per mutare este O(n^3) + O(N*viewr2) + O(viewr2) = O(n^3).\n      Am vrut sa folosim un A* pentru ca e mai exact decat un simplu bfs,\n    conduce spre solutie mai rapid.\n\n* Structura proiectului:\n(extrasa din [a1], am folosit Doxygen)\n\nclass MyBot:\n\n  Public attributes:\n      paths\n      logger\n\n  Public member functions:\n    def __init__(self)\n      Initializeaza jurnalizaarea.\n      Utila pentru debug sau informatii despre desfasurarea jocului.\n\n    def heuristic_cost_estimate(self, (row1, col1), (row2, col2), ants):\n      Obtine estimarea costului; e optimista.\n\n      Parameters:\n        start     - punctul din care pleaca furnica.\n        goal      - puncul la care se doreste sa ajunga furnica.\n      Returns:\n        Distanta euclidiana minima de patratele pe care o parcurge furnica.\n\n\n    def neighbor_nodes(self, current, ants):\n      Returneaza toti vecinii nodului curent.\n\n      Parameters:\n        curent    - pozitia curenta, de forma (row, col).\n      Returns:\n        Lista continand vecinii nodului.\n\n    def reconstruct_path(self, came_from, current_node):\n      Construieste drumul din parinte in parinte, pana la nodul initial (de la\n      sfarsit spre inceput).\n\n      Parameters:\n        current_node - nodul final, unde ajunge calea construita; e de forma\n                       unui tuplu (row, col).\n        came_from    - contine parintii nodurilor ce formeaza calea spre nodul\n                       final.\n\n    def Astar(self, start, goal, ants):\n      Intoarce o cale optima de la sursa la destinatie.\n\n      In prezent tine cont si de obstacole, dar trimite furnicile doar dupa\n      mancare sau puncte necunoscute\n\n      Parameters:\n      start - punct de start, de forma (row, col).\n      goal  - punct destinatie, de forma (row, col).\n      ants  - obiectul furnici, construit in Ants.run().\n\nclass Ants:\n\n  Public attributes:\n      map_filter\n      land_map\n\n  Public member functions:\n    def  mapfilter\n      Creaza un filtru de translatare.\n\n      Prin aplicarea filtrului asupra unei coordonate oarecare (row, col),\n      acesta genereaza toate coordonatele din jurul (row, col) cu raza^2 \u003c=\n      self.viewradius2.\n\n    def  landmap\n      Aplica filtrul mapfilter() asupra fiecarei furnici.\n\n      Translata pozitia furnicii la coordonate in jurul pozitiei furnicii,\n      obtinand astfel zona pe care o vede furnica, de raza r. Pentru fiecare\n      furnica, vom updata teritoriul neexplorat cu ceea ce vede pe moment\n      furnica.\n\n* Contribuțiile membrilor echipei:\n    Bărbulescu Mihai - a realizat documentația proiectului,\n    a adăugat posibilitatea de logging cu ajutorul căruia\n    s-au putut testa codul și depana erorile.\n\n    Petre Andrei - a implementat explorarea A* și a pus bazele\n    modului în care furnicile se deplasează pe hartă\n    (TODO - de adăugat ce tutoriale de pe net a folosit la\n    surse de inspirație)\n\n    Stana Iulian - a implementat funcțiile mapfilter și landmap\n    și implicit a adus îmbunătățiri la modul de explorare a\n    furnicilor (bazate pe functia visible din [c1])\n\n    Vlad Traistă-Popescu - a realizat unit-testing și a făcut\n    debugging pe fiecare commit al membrilor atunci când\n    programul nu rula cum trebuie.\n\n* Surse de inspirație:\n    [s1] Cristian A. Giumale – Introducere în Analiza Algoritmilor,\n         Polirom, 2004 (capitolul 7)\n    [s2] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest\n         și Clifford Stein – Introduction to Algorithms,\n         Third Edition, MIT Press, 2009\n    [s3] http://swarm.cs.pub.ro/~adrian.sc/documentatie.pdf\n    [s4] http://en.wikipedia.org/wiki/A*_search_algorithm\n\n* Surse de cod:\n    [c1] https://github.com/wraithan/aichallenge-ants/blob/master/ants.py\n\n* Alte linkuri:\n    [a1] http://swarm.cs.pub.ro/~mbarbulescu/.secret/html/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreip%2Fpa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreip%2Fpa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreip%2Fpa/lists"}