Prześlij pliki do ''

This commit is contained in:
Aleksandra Jonas 2020-06-15 11:16:03 +00:00
parent 687ee80170
commit aea9a22dd6

122
integracja.md Normal file
View File

@ -0,0 +1,122 @@
# *Sztuczna inteligencja - projekt zespołowy - Autonomiczny Traktor*
#### autorzy: Aleksandra Werda, Natalia Wiśniewska, Kinga Jagodzińska, Aleksandra Jonas
***
## Integracja podprojektów
___
Finalnym zadaniem jest integracja podprojektów wszystkich członków zespołu.
Traktor (agent):
* informuje nas o stanie gleby (zła, neutralna, dobra)
* decyduje czy dane pole należy podlać
* decyduje jakie warzywo można posadzić na danym polu, aby nie doszło do konfliktu z gatunkami zasadzonymi na sąsiednich polach
* rozpoznaje jakie warzywo rośnie na danym polu.
___
## Reprezentacja pól
Planszę podzieliłyśmy na 25 osobnych pól uprawnych. Przy każdym uruchomieniu program losowo dobiera dla każdego stopień nawodnienia czy zasiane tam gatunki roślin.
Całą planszę reprezentujemy jako tablicę punktów poszczególnych pól (współrzędne środka pola). Następnie losowo przyporządkowujemy każdemu jedno z 7 zdjęć (6 warzyw i puste).
---
## Rozpoznawanie warzyw
Pierwszym wykonywanym przez agenta zadaniem jest identyfikacja każdego pola. Przy pomocy sieci neuronowych agent rozpoznaje jakie warzywo zostało posiane na danym polu i przypisuje mu nazwę oraz odpowiednie wartości dot. m. in. podlewania czy wpływu na sąsiednie pola.
```
def rozpoznawanie_warzyw(self):
for _ in range(25):
temp = _
img_path = self.warzywa_etykiety[temp]
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = self.model.predict(x)
preds = np.asarray(preds)
szacunek = preds.max()
ind = np.where(preds == szacunek)
if ind == 0:
self.fields.append('rzodkiewa')
if ind == 1:
self.fields.append('papryka')
if ind == 2:
self.fields.append('marchew')
if ind == 3:
self.fields.append('pomidorek')
if ind == 4:
self.fields.append('salata')
if ind == 5:
self.fields.append('pietruszka')
if ind == 6:
self.fields.append('puste')
```
Na polu może znajdować się:
* marchew
* pomidor
* papryka
* rzodkiewka
* pietruszka
* salata
* lub może pozostać puste - gotowe do zasadzenia.
Dodatkowo agent w każdym momencie jest w stanie ponownie zidentyfikować warzywo na danym polu po wciśnięciu klawisza spacji.
---
## Tworzenie planszy
Po rozpoznaniu warzyw, program generuje pozostałe wartości dla pól - chwast, ph gleby, nawodnienie.
```
def randomize_field(self):
chwasty_list = list(range(1, 11))
waga_ch = [0.3, 0.2, 0.15, 0.1, 0.05, 0.05, 0.05, 0.04, 0.03, 0.03]
podlanie_list = list(range(1, 11))
waga_po = [0.02, 0.05, 0.05, 0.05, 0.05, 0.08, 0.1, 0.15, 0.15, 0.3]
ph_list = list(range(1, 11))
waga_ph = [0.01, 0.01, 0.02, 0.03, 0.07, 0.37, 0.4, 0.05, 0.03, 0.01]
for x in range(25):
temp = []
# nasiona
temp1 = []
temp1.append(random.choices(chwasty_list, waga_ch)[0])
woda = random.choices(podlanie_list, waga_po)[0]
temp1.append(woda)
temp1.append(random.choices(ph_list, waga_ph)[0])
```
Ilość dni po jakich trzeba podlać rośliny jest różny, dlatego bazując na ropoznaniu przez sieci neuronowe warzyw rosnących na danym polu, ustawiamy dla nich odpowiednie wartości.
```
if self.fields[x] == "rzodkiewa":
temp.append(4)
elif self.fields[x] == "papryka":
temp.append(3)
elif self.fields[x] == "pomidor":
temp.append(2)
elif self.fields[x] == "marchew":
temp.append(5)
elif self.fields[x] == "sałata":
temp.append(5)
elif self.fields[x] == "pietruszka":
temp.append(1)
elif self.fields[x] == "puste":
temp.append(6)
else:
temp.append(0)
```
---
### Działanie agenta
Poruszamy się agentem po planszy przy użyciu strzałek.
Po wciśnięciu spacji rozpoznajemy warzywo rosnące na danym polu.
Klawisze s, g i p odpowiednio odpowiadają za; sadzenie, sprawdzanie stanu gleby oraz sprawdzanie czy dane pole należy podlać.