From 4b73064f4e816fabddc0d3daea672e3512298a55 Mon Sep 17 00:00:00 2001 From: Tomasz Adamczyk Date: Sun, 16 May 2021 15:36:53 +0200 Subject: [PATCH] treelearn --- .idea/workspace.xml | 25 +++++++++++++------------ __pycache__/definitions.cpython-37.pyc | Bin 3698 -> 3703 bytes __pycache__/treelearn.cpython-37.pyc | Bin 1000 -> 1206 bytes py.py | 9 +++++++-- treelearn.py | 18 +++++++++++------- 5 files changed, 31 insertions(+), 21 deletions(-) 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 @@ - + @@ -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 3c6a4a687e52a8b90069898848ad47c2477ab73a..7d238cd99e3e22d470d60455d3961828c1d2527e 100644 GIT binary patch delta 216 zcmWO0yGlbr7zE(_dn<$`R#C#aB&)K7*O=3sZZdEwv`SbMe#SR74FcB@xgu%UVw2Qg$_+@>t>R7P` z(jb+N5)5UVQd~<<86LTFymB}2C5yZnj-m_4aW9<2{csv(IEyOuq7MD5emp=|?chck zjFlsgTjlY_dSbQk&Z=sIA66UN+T)Vd(~b&EbwP*agU(2QfAaHkX%@zGc-?i%3tOXq D940ru delta 212 zcmew^^GSx+iIPlEfFn-rEP+Z5I)yHvXrmB|Jy;*6@3Jy_Hk)g~9Ps87ykVVgXcMTt>k@&O=k zKalqp$kUoEz^Xo(pOtO0Evpiv&g2AET}Iu_eXMeflRvWwZa%~|lZ{Oq=>8(@&568X Fi~xtuH&Xxr diff --git a/__pycache__/treelearn.cpython-37.pyc b/__pycache__/treelearn.cpython-37.pyc index 4f93d7d423348f741d6d8f161dca722734dce20c..1b2ee9cc279cce3aaf02769865754eb52174b1b0 100644 GIT binary patch delta 289 zcmaFCzKxU5iIp2*U#DSWU*+5!>fE|jRfpoDHkf>o;z)-_j!&Jju!&1YV&YI4+kg=An zh7D*Oqn{>Y6njBYYD#8ui6(my6Hxgr{>0q;(!7%R{IvMu)YO#XTLQ`XIXS7xC8;U# z1v!a%CB;Q7Ky^i|AjRD7<%uP!Me#YQWvMy0I8suRGmA6x^NK`4D!_yoNEvT#Vs>gg sOco?m3^Id(QH-%j21sl2Pj+A~VU(G?fmuyN04Tu2$iv71hF}&S0FGrrA^-pY delta 107 zcmdnS`GTF#iI}nW$s%!}oF?C7c9xRK4J=ARd_XP_Pz6XO2ax7r1OW6_4(k8_ 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