119 lines
3.1 KiB
Markdown
119 lines
3.1 KiB
Markdown
# *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=1NKc2R65ngM9966mGoLnmHgmpkX-vgvIa)
|
|
|
|
|
|
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"
|
|
```
|