diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index c31cabe..588758d 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -3,7 +3,7 @@
-
+
@@ -132,6 +132,7 @@
+
@@ -147,22 +148,22 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -179,10 +180,10 @@
-
+
-
+
@@ -196,6 +197,6 @@
-
+
\ No newline at end of file
diff --git a/__pycache__/definitions.cpython-37.pyc b/__pycache__/definitions.cpython-37.pyc
index 3c6a4a6..7d238cd 100644
Binary files a/__pycache__/definitions.cpython-37.pyc and b/__pycache__/definitions.cpython-37.pyc differ
diff --git a/__pycache__/treelearn.cpython-37.pyc b/__pycache__/treelearn.cpython-37.pyc
index 4f93d7d..1b2ee9c 100644
Binary files a/__pycache__/treelearn.cpython-37.pyc and b/__pycache__/treelearn.cpython-37.pyc differ
diff --git a/py.py b/py.py
index 311c600..0220af9 100644
--- a/py.py
+++ b/py.py
@@ -20,7 +20,8 @@ def main():
tractor1 = tractor.Tractor(amount_of_seeds_dict, collected_plants_dict, definitions.TRACTOR_DIRECTION_NORTH, fertilizer_dict, definitions.TRACTOR_FUEL, definitions.TRACTOR_WATER_LEVEL, 0, 0)
tractor1_rect = pygame.Rect(tractor1.get_x(), tractor1.get_y(), definitions.BLOCK_SIZE, definitions.BLOCK_SIZE)
clock = pygame.time.Clock()
- treelearn.treelearn()
+ tree = treelearn.treelearn() #tworzenie drzewa decyzyjnego
+ decision = [0] #początkowa decyzja o braku powrotu do stacji (0)
run = True
while run: #pętla główna programu
clock.tick(definitions.FPS)
@@ -31,12 +32,16 @@ def main():
if not move_list and plant.Plant.if_any_mature_plant(map1) is True: #jeżeli są jakieś ruchy do wykonania w move_list oraz istnieje jakaś dojrzała roślina
istate = graph.Istate(tractor1.get_direction(), tractor1.get_x() / definitions.BLOCK_SIZE, tractor1.get_y() / definitions.BLOCK_SIZE) #stan początkowy traktora (jego orientacja oraz jego aktualne współrzędne)
#move_list = (graph.graphsearch([], [], istate, graph.succ, plant.Plant.get_closest_mature_plant(map1, tractor1))) #lista z ruchami, które należy po kolei wykonać, graph
- move_list = (astar.graphsearch([], [], istate, graph.succ, plant.Plant.get_closest_mature_plant(map1, istate), astar.f, map1)) #lista z ruchami, które należy po kolei wykonać, astar
+ if decision == [0]: #jeżeli decyzja jest 0 (brak powrotu do stacji) to uprawiaj pole
+ move_list = (astar.graphsearch([], [], istate, graph.succ, plant.Plant.get_closest_mature_plant(map1, istate), astar.f, map1)) #lista z ruchami, które należy po kolei wykonać, astar
+ else: #jeżeli decyzja jest 1 (powrót do stacji) to wróć do stacji uzupełnić zapasy
+ move_list = (graph.graphsearch([], [], istate, graph.succ, (0, 0))) #lista z ruchami, które należy po kolei wykonać, graphsearch
elif move_list: #jeżeli move_list nie jest pusta
tractor1.handle_movement(move_list.pop(0), tractor1_rect) #wykonaj kolejny ruch oraz zdejmij ten ruch z początku listy
else:
tractor1.handle_random_movement(tractor1_rect) #wykonuj losowe ruchy
tractor1.do_work(map1, station1, tractor1_rect) #wykonaj pracę na danym polu
+ decision = treelearn.make_decision(tree, tractor1.get_all_amount_of_seeds(), tractor1.get_all_collected_plants(), tractor1.get_all_fertilizer(), tractor1.get_fuel(), tractor1.get_water_level()) #podejmij decyzję czy wracać do stacji (0 : NIE, 1 : TAK)
plant.Plant.grow_plants(map1) #zwiększ poziom dojrzałości roślin
pygame.quit()
if __name__ == "__main__":
diff --git a/treelearn.py b/treelearn.py
index 201278d..54abb94 100644
--- a/treelearn.py
+++ b/treelearn.py
@@ -5,16 +5,20 @@ import pandas
import pydotplus
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
-def treelearn():
- df = pandas.read_csv(os.path.join('resources', 'data.csv'))
+def treelearn(): #zwraca utworzone drzewo decyzyjne
+ df = pandas.read_csv(os.path.join('resources', 'data.csv')) #czytanie danych do nauki drzewa z pliku .csv
features = ['amount of seeds', 'collected plants', 'fertilizer', 'fuel', 'water level']
- x = df[features]
- y = df['back to station']
- dtree = DecisionTreeClassifier()
- dtree = dtree.fit(x, y)
+ x = df[features] #wczytanie atrybutów, z których ma się uczyć drzewo
+ y = df['back to station'] #podjęte decyzje
+ dtree = DecisionTreeClassifier() #tworzy obiekt drzewa
+ dtree = dtree.fit(x, y) #uczy drzewo
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png(os.path.join('resources', 'mydecisiontree.png'))
img = pltimg.imread(os.path.join('resources', 'mydecisiontree.png'))
imgplot = plt.imshow(img)
- plt.show()
\ No newline at end of file
+ plt.show() #wyświetl drzewo decyzyjne
+ return dtree
+def make_decision(tree, amount_of_seeds, collected_plants, fertilizer, fuel, water_level): #zwraca decyzję o powrocie do stacji (0 : NIE, 1 : TAK)
+ decision = tree.predict([[amount_of_seeds, collected_plants, fertilizer, fuel, water_level]]) #podejmij decyzję na podstawie aktualnych parametrów traktora o powrocie do stacji lub nie
+ return decision
\ No newline at end of file