andreip / PA

Ants project. AI Challenge theme.
4 stars 0 forks source link

Furnicile se îndreaptă acum spre mâncare mai organizat #9

Open iulianstana opened 12 years ago

iulianstana commented 12 years ago

Am modifica un pic botul, astfel incat sa se duca o singura furnica catre o anumita mancare.(o sa dau push in branch-ul de newbrach) Ce nu imi place: -nu trimit cea mai apropiata furnica de mancare catre mancare... -si inca nu e o distribuire uniforma a furnicilor.

| cell_maze_p02_19.map | 40 | 70 | nu mor | cell_maze_p02_20.map | 27 | 46 | mor 2 furnici | random_walk_p02_21.map | 21 | 49 | mor 2 furnici | random_walk_p02_24.map | 17 | 45 | mor 2 furnici

Furnicile mor din urmatoarea cauza: Noi verificam sa nu trimitem 2 furnici in aceelasi loc. Insa nu luam nici o masura daca o furnica sta pe loc. Ex: trimitem furnica x in pozitia actuala a furnicii y. furnica y incearca sa se deplaseze mai departe, dar nu poate, avand viitoarea pozitie ocupata , astfel furnica y va sta pe loc.

TODO: recalcularea path-ului sau gasirea unei solutii pentru cazul else al if-ului: if not (n_row, n_col) in destinations:

Am incercat sa vad cum merge cu botul de etapa2. In cele mai multe cazuri luam timeout.

ants.py

functia update: initial: -primele linii ale functiei iterau pe listele de food, ants si dead si pentru fiecare pozitie punea in 'map[row][col] ' LAND. Apoi reinitializa aceste liste complexitate = parcurgerea celor 4 liste (ant_list, food_list, dead_list, hill_list) -aceste linii le-am schimbat cu clean, care sunt urmate de reinitializarile listelor.

Reinitializarea trebuie facuta, deoarece fiecare lista se poate modifica. *\ Andrei a venit cu o idee sa nu stergem mancarea. Insa in update se va apenda mancarea(lista nefiind o multime, am putea apenda aceeasi mancare de doua ori). Asta nu e greu de modifica. Insa trebuie sa ne gandim daca implementam.

functia clean: -parcurge toata harta si unde gaseste != WATER face UNSEEN complexitate = height * width

OBS: functia clean este apelata la fiecare tura.

functia mapfilter: Este apelata o singura data si creeaza un filtru care reprezinta raza vizuala a unei furnici. Va creea o lista care va avea in jur de 17^2 elemente. complexitate = 17*17

functia landmap: Pentru fiecare furnica itereaza pe lista de map_filter, si unde vede pe harta UNSEEN pune LAND. complexitate = nrFurnici * len(map_filter)

Functia de landmap este apelata la fiecare tura, Iar noi vrem sa stim unde este LAND si unde este UNSEEN pe harta noastra.

do_turn: --->pentru fiecare furnica: ------>ia closest_food (itereaza pe lista de food) ------>verifica daca < 10: ---------->apeleaza Astar (nu ar trebui sa fie o mare complexitate avand distanta cel mult 10) ------>altfel ---------->explorarea: ---------->cauta closest_undeen (->complexitate mare: calculeaza distanta de la furnica la fiecare UNSEEN<-) ---------->apeleaza Astar(o complexitate la fel de mare pentru un pict foarte departat) ------>Muta furnica;

Dupa parerea mea trebuie sa vedem cum inlocuim explorarea: O idee pe care am discutat-o cu Andrei ar fi sa facem lider.Mai degraba sa punem anumiti pivoti sau anumite puncte pe harta(sa avem path facut de la hill pana la acel pivot si sa trimitem noile furnici acolo)

TODO: Sa verifica daca mancarea mai exita la destinatie.