2020-04-08 00:10:48 +02:00
# *Sztuczna inteligencja - projekt zespołowy - Autonomiczny Traktor*
#### autorzy: Aleksandra Werda, Natalia Wiśniewska, Kinga Jagodzińska, Aleksandra Jonas
***
## Implementacja Środowiska Agenta
2020-04-08 00:14:19 +02:00
2020-04-08 00:10:48 +02:00
**Wykorzystane narzędzia:**
- język programowania Python
- biblioteka Pygame
2020-04-08 00:13:51 +02:00
2020-04-08 00:10:48 +02:00
___
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
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.
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
image = pygame.image.load(r'traktor.jpg')
```
A jako punkt startowy ustawiłyśmy dla niego kolejno współrzędne x i y:
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
x=0
y=0
white = (255, 255, 255)
screen.fill(white)
def traktor(x,y):
screen.blit(image, (x,y))
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
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 )
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
Później za pomocą pętli **for** "wyłapujemy" wszystkie występujące eventy w trakcie działania naszego programu.
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
for event in pygame.event.get():
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
Uwzględniamy sytuację, w której chcemy zamknąć okno, w którym pracuje agent:
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
if event.type==pygame.QUIT:
sys.exit(0)
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
Następnie, manipulując współrzędnymi **x** i **y** , traktor porusza się według schematu (wartości dobrane losowo):
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
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
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
Traktor przechodzi na nowe współrzędne:
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
traktor(x,y)
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
![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()
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:11:59 +02:00
![Kolejne położenie traktora ](https://drive.google.com/open?id=1Pt_qp_yQNgePITfetHBjd9fLI_4w2R6x )
2020-04-08 00:10:48 +02:00
2020-04-08 11:47:58 +02:00
Wideo prezentujące agenta w ruchu: https://drive.google.com/open?id=1h99UjAZu2w2mhe5HCuMhj4bnKfBjkY-r
2020-04-08 00:10:48 +02:00
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ć.
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
class Uprawy:
rodzajUprawy="brak"
czyPodlac="nie"
czyPodacNawoz="nie"
stanUprawy="dobry"
```
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
W kodzie programu znajdują się zatem następujące rośliny:
2020-04-08 00:13:34 +02:00
2020-04-08 00:10:48 +02:00
```
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"
```