# *Sztuczna inteligencja - projekt zespołowy - Autonomiczny Traktor* #### autorzy: Aleksandra Werda, Natalia Wiśniewska, Kinga Jagodzińska, Aleksandra Jonas *** ## Implementacja Środowiska Agenta **Wykorzystane narzędzia:** - język programowania Python - biblioteka Pygame ___ Pierwszym zadaniem dotyczącym projektu jest implementacja dwuwymiarowego środowiska (tzw. kraty), w którym poruszać będzie się nasz agent. W tym celu za pomocą funkcji **display.set_mode** z biblioteki **Pygame** utworzyłyśmy dwuwymiarowe środowisko graficzne o wymiarach __1280x720 pikseli__. ``` screen = pygame.display.set_mode((1280, 720)) ``` Dla lepszej reprezentacji agenta posłużyłyśmy się obrazkiem traktora. ``` image = pygame.image.load(r'traktor.jpg') ``` A jako punkt startowy ustawiłyśmy dla niego kolejno współrzędne x i y: ``` x=0 y=0 white = (255, 255, 255) screen.fill(white) def traktor(x,y): screen.blit(image, (x,y)) ``` Powyższy kod wyświetlił agenta w **lewym górnym rogu okna**, gdzie znajduje się punkt (0,0) . ![Początkowa pozycja traktora](https://drive.google.com/open?id=1NKc2R65ngM9966mGoLnmHgmpkX-vgvIa) Później za pomocą pętli **for** "wyłapujemy" wszystkie występujące eventy w trakcie działania naszego programu. ``` for event in pygame.event.get(): ``` Uwzględniamy sytuację, w której chcemy zamknąć okno, w którym pracuje agent: ``` if event.type==pygame.QUIT: sys.exit(0) ``` Następnie, manipulując współrzędnymi **x** i **y**, traktor porusza się według schematu (wartości dobrane losowo): ``` if x <1200 and y==0: x+=1 elif x==1200 and y<650: y+=1 elif x>600 and y==650: x-=1 elif x==600 and y>0: y-=1 ``` Traktor przechodzi na nowe współrzędne: ``` traktor(x,y) ``` ![Agent w trakcie ruchu](https://drive.google.com/open?id=1nm4rxr7whLjWLzqPvo1mnDAVNFm76q5X) Dzięki funkcji **flip** poruszający się agent nie pozostawia za sobą śladu. Widzimy go tylko na aktualnych pozycjach x i y ``` pygame.display.flip() ``` ![Kolejne położenie traktora](https://drive.google.com/open?id=1Pt_qp_yQNgePITfetHBjd9fLI_4w2R6x) Agent będzie zajmował się uprawą pola, dlatego potrzebujemy obiektów odpowiedzialnych za przechowywanie wiedzy np. na temat gatunków warzyw/roślin, jakie chcemy uprawiać. ``` class Uprawy: rodzajUprawy="brak" czyPodlac="nie" czyPodacNawoz="nie" stanUprawy="dobry" ``` W kodzie programu znajdują się zatem następujące rośliny: ``` marchew = Uprawy() marchew.rodzajUprawy="Marchew" marchew.czyPodlac="tak" marchew.czyPodacNawoz="tak" marchew.stanUprawy="sredni" ziemniaki = Uprawy() ziemniaki.rodzajUprawy="Ziemniak" ziemniaki.czyPodlac="tak" ziemniaki.czyPodacNawoz="nie" ziemniaki.stanUprawy="dobry" buraki = Uprawy() buraki.rodzajUprawy="Burak" buraki.czyPodlac="nie" buraki.czyPodacNawoz="nie" buraki.stanUprawy="bardzo dobry" salata = Uprawy() salata.rodzajUprawy="Salata" salata.czyPodlac="tak" salata.czyPodacNawoz="tak" salata.stanUprawy="zly" pomidory = Uprawy() pomidory.rodzajUprawy="Pomidor" pomidory.czyPodlac="nie" pomidory.czyPodacNawoz="tak" pomidory.stanUprawy="sredni" ```