Prześlij pliki do ''
This commit is contained in:
parent
687ee80170
commit
aea9a22dd6
122
integracja.md
Normal file
122
integracja.md
Normal 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ć.
|
||||
|
Loading…
Reference in New Issue
Block a user