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