From 91c2c2074e88f3d9efad1dc32f4a7c450290e6c7 Mon Sep 17 00:00:00 2001 From: Milosz Rolewski Date: Sun, 28 May 2023 10:23:30 +0200 Subject: [PATCH] ID3 work, WM objective approach --- main.py | 34 +++++++++++++++--- mytree.png | Bin 0 -> 42847 bytes src/Field.py | 13 +++---- src/ID3.ipynb | 20 +++-------- src/ID3.py | 46 +++++++++++++++--------- src/Plant.py | 4 +-- src/Tractor.py | 23 +++++++++--- src/__pycache__/Field.cpython-310.pyc | Bin 1132 -> 1127 bytes src/__pycache__/ID3.cpython-310.pyc | Bin 0 -> 1251 bytes src/__pycache__/Plant.cpython-310.pyc | Bin 1656 -> 1663 bytes src/__pycache__/Tractor.cpython-310.pyc | Bin 3413 -> 3791 bytes src/__pycache__/map.cpython-310.pyc | Bin 3164 -> 3193 bytes src/map.py | 14 ++++---- tree.plk | Bin 0 -> 1782 bytes 14 files changed, 99 insertions(+), 55 deletions(-) create mode 100644 mytree.png create mode 100644 src/__pycache__/ID3.cpython-310.pyc create mode 100644 tree.plk diff --git a/main.py b/main.py index 6212dd1..9902dd2 100644 --- a/main.py +++ b/main.py @@ -4,11 +4,12 @@ import random from settings import screen_height, screen_width, SIZE, SPECIES, block_size, tile, road_coords, directions from src.map import drawRoads, seedForFirstTime, return_fields_list, WORLD_MATRIX from src.Tractor import Tractor -from src.Plant import Plant from src.bfs import Astar +from src.Plant import Plant from src.Field import Field import pickle import os +from src.ID3 import make_decision # pygame initialization @@ -34,13 +35,15 @@ tractor = Tractor('oil','manual', 'fuel', 'fertilizer1', 20) tractor_group = pygame.sprite.Group() tractor_group.add(tractor) +tractor.setCapacity(90) +tractor.setFuel(100) + #PLANTS plant_group = pygame.sprite.Group() plant_group = seedForFirstTime() fields = return_fields_list() -#ID3 TREE -tree = pickle.load(open(os.path.join('src','tree.plk'),'rb')) + # tractor_move = pygame.USEREVENT + 1 @@ -54,8 +57,29 @@ print("Destination: ", destination) mx=int((mx+18)/36) my=int((my+18)/36) print("Destination: ", mx,my) -tmp = WORLD_MATRIX[mx][my] -print(tmp) + +#POBIERZ MATRIXA OBJEKT FILD, Z FIELD POBIERZ PLANT, Z PLANTA PARAMETRY, WYWOŁAJ DECYCJNOSC +#ID3 TREE +dtree = pickle.load(open(os.path.join('src','tree.plk'),'rb')) + +# pobierz dane o polu field i czy ma na sobie roslinke, zadecyduj czy zebrac +this_field = WORLD_MATRIX[mx][my] +this_contain = Field.getContain(this_field) +if isinstance(this_contain, Plant): + this_plant = this_contain + params=Plant.getParameters(this_plant) + decision=make_decision(params[0],params[1],params[2],params[3],params[4],tractor.fuel,tractor.capacity,params[5],dtree) + print('wzorst',params[0],'wilgotnosc',params[1],'dni_od_nawiezienia',params[2],'pogoda',params[3],'zdrowa',params[4],'paliwo',tractor.fuel,'pojemnosc eq',tractor.capacity,'cena sprzedazy',params[5]) + print(decision) + if decision == 1: + # Tractor.collect(self=tractor, plant_group=plant_group) + print('Gotowe do zbioru') + else: + print('nie zbieramy') + +else: + print('Road, no plant growing') + moves = goal_astar.search( [tractor.rect.x, tractor.rect.y, directions[tractor.rotation]], destination) diff --git a/mytree.png b/mytree.png new file mode 100644 index 0000000000000000000000000000000000000000..7389bdadc57341e7e32a8385d490766d31cab43c GIT binary patch literal 42847 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 14\u001b[0m accuracy \u001b[39m=\u001b[39m \u001b[39meval\u001b[39;49m(d_tree,train,\u001b[39m'\u001b[39;49m\u001b[39mczy_zebrac\u001b[39;49m\u001b[39m'\u001b[39;49m)\n", - "\u001b[0;31mTypeError\u001b[0m: globals must be a real dict; try eval(expr, {}, mapping)" - ] - } - ], + "outputs": [], "source": [ "# Read the CSV file\n", "train = pd.read_csv(\"train_3.csv\", delimiter=\";\")\n", @@ -50,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 24, "metadata": {}, "outputs": [ { diff --git a/src/ID3.py b/src/ID3.py index b47ce3c..433a529 100644 --- a/src/ID3.py +++ b/src/ID3.py @@ -7,25 +7,39 @@ import pydotplus import matplotlib.image as pltimg import matplotlib.pyplot as plt -# Read the CSV file -train = pd.read_csv("train_3.csv", delimiter=";") +def make_decision(Wzrost, wilgotnosc, dni_od_nawiezienia, aktualna_pogoda, czy_roslina_robaczywa, paliwo, pojemnosc_ekwipunku,cena_sprzedarzy, tree): + decision = tree.predict([[Wzrost,wilgotnosc, dni_od_nawiezienia, aktualna_pogoda, czy_roslina_robaczywa, paliwo, pojemnosc_ekwipunku,cena_sprzedarzy]]) + return decision -x_train = train.drop('czy_zebrac',axis=1) -y_train = train['czy_zebrac'] +def learnTree(): + # Read the CSV file + train = pd.read_csv("src/train_3.csv", delimiter=";") -d_tree = DecisionTreeClassifier() -d_tree = d_tree.fit(x_train,y_train) + # print(f'Shape: {train.shape}') + # print(f'Head:\n{train.head()}') -pickle.dump(d_tree, open(os.path.join('.','tree.plk'),'wb')) -data = tree.export_graphviz(d_tree, out_file=None, feature_names=['Wzrost','wilgotnosc','dni_od_nawiezienia','aktualna_pogoda','czy_roslina_robaczywa','paliwo','pojemnosc_ekwipunku','cena_sprzedarzy']) -graph = pydotplus.graph_from_dot_data(data) + x_train = train.drop('czy_zebrac',axis=1) + y_train = train['czy_zebrac'] -# Save the graph as a PNG image in the script's folder -graph.write_png(os.path.join('.', 'mytree.png')) + d_tree = DecisionTreeClassifier() + d_tree = d_tree.fit(x_train,y_train) -# Read the PNG image -# img = pltimg.imread(os.path.join('.', 'mytree.png')) + pickle.dump(d_tree, open(os.path.join('.','tree.plk'),'wb')) + data = tree.export_graphviz(d_tree, out_file=None, feature_names=['Wzrost','wilgotnosc','dni_od_nawiezienia','aktualna_pogoda','czy_roslina_robaczywa','paliwo','pojemnosc_ekwipunku','cena_sprzedarzy']) + graph = pydotplus.graph_from_dot_data(data) -# Display the image -# imgplot = plt.imshow(img) -# plt.show() + # Save the graph as a PNG image in the script's folder + graph.write_png(os.path.join('.', 'mytree.png')) + + # Read the PNG image + # img = pltimg.imread(os.path.join('.', 'mytree.png')) + # Display the image + # imgplot = plt.imshow(img) + # plt.show() + + return d_tree + +# dtree = learnTree() #w, w, d, p,R,P,P,S + #przy robaczywej == 1 daje ok czyli jak 1 to git jest mozna zbierac, ale planowalem inaczej +# decision=make_decision(70,85,12,3,1,65,54,1000,dtree) +# print(decision) diff --git a/src/Plant.py b/src/Plant.py index b0ee9e1..3f237a9 100644 --- a/src/Plant.py +++ b/src/Plant.py @@ -61,5 +61,5 @@ class Plant(pygame.sprite.Sprite): self.rect = self.image.get_rect() self.rect.center = [pos_x,pos_y] -def getParameters(self): - return [self.species, self.wzrost, self.wilgotnosc, self.dni_od_nawiezienia,self.aktualna_pogoda,self.czy_robaczywa,self.cena_sprzedarzy] \ No newline at end of file + def getParameters(self): + return [self.wzrost, self.wilgotnosc, self.dni_od_nawiezienia,self.aktualna_pogoda,self.czy_robaczywa,self.cena_sprzedarzy] \ No newline at end of file diff --git a/src/Tractor.py b/src/Tractor.py index e3ed2a5..7ebbae8 100644 --- a/src/Tractor.py +++ b/src/Tractor.py @@ -1,9 +1,13 @@ import pygame from settings import block_size, tile +import pickle +from sklearn import tree mx=0 my=0 + + class Tractor(pygame.sprite.Sprite): def __init__(self, engine, transmission, fuel, fertilizer, capacity): super().__init__() @@ -22,12 +26,19 @@ class Tractor(pygame.sprite.Sprite): self.rotation = 90 self.collected = 0 - self.capacity = capacity self.engine = engine self.transmission = transmission - self.fuel = fuel self.fertilizer = fertilizer - + self.capacity = capacity + self.fuel = fuel + + + + def setFuel(self,fuelLevel): + self.fuel=fuelLevel + + def setCapacity(self, newCapacity): + self.capacity = newCapacity def movement_using_keys(self): @@ -75,7 +86,7 @@ class Tractor(pygame.sprite.Sprite): self.image = self.left def movement(self, direction): - print(int((self.rect.x-18)/36),';',int((self.rect.y-18)/36)) + # print(int((self.rect.x-18)/36),';',int((self.rect.y-18)/36)) if direction == 'F': self.move_forward() elif direction == 'L': @@ -107,4 +118,8 @@ class Tractor(pygame.sprite.Sprite): def find_nearest_plant(self, plant_group): self.plant_group = plant_group + + def getLocation(self): + return [self.rect.x, self.rect.y] + \ No newline at end of file diff --git a/src/__pycache__/Field.cpython-310.pyc b/src/__pycache__/Field.cpython-310.pyc index 7300160e4f4417f2fa847552b8ea741f69c85054..a0ccddf2a88b867b172e7350884422e17c281d4d 100644 GIT binary patch delta 126 zcmaFE@tlJ m*cht>+%i*hQuGj#la-l+HMol5ilt$Sx!{Tsl9LxOp8){Rfh5TQ delta 131 zcmaFP@rHvppO=@50SIQa<)_qda4%Xr>MktqtDd&PKN0Oa9oB0d?(^V$n diff --git a/src/__pycache__/ID3.cpython-310.pyc b/src/__pycache__/ID3.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9a6151ff3946e1c6d977aac632787c88922af1e GIT binary patch literal 1251 zcmYjQy^b3<5GJ|*I{lpOOM(POkQ70nMk-t;Fk;w^8#g&1fSLuhq;!;amjubRPK#CL z6lweplDo8d9Ja3f3a&g{DaLWZnc;ATGvCat9E}DD)_09&|HTM>^oNIwz~K+rh5=!S z;Swz{a8i;gSOnPXf-wNRL7B`PccKtoXbVr8MpQ#q0TPqnGklLkd#QjV|V| zUp$&Le-u=GS&_73havR9j77cjI&Z14fI ztM|bnw4>v=3!(l|7ab>Gy@n@p!WeY{^knp=op@AMQ&H#7W`%kC8UF@-$`~(2B`nu& z;LF|erKZIv49WX(p!dQ!JZn=w7c*6E9oa3XsgB@Yd$>CB#Dms;YP7GAzVc)UWJ+8r z8=J30$=zthsckferdQmwgKB?%v|dlI9Z}4snp2iTYA$42D(!y}7p#PZmWyHwPlT+g zlnbTewIkBFP*Hp5!i^O5xzQ7TucWs5T2poRRL2O{=}aa*(X8ZD_kWb1FmnTBOvX`)V=}}~ z$qgRhn;=Z}3@)aR{1n%W8vTR!9U4Ff-ZLNNj61ogdR+Qvu+l$z@{6~>t|(xVwiL^m zsOXxz=*(hOT2ZatqX!0R?@b}#nFnCfk8YpI0~9`O-9t%#uOw?q{@jm2k0eDyJj7}L J^%5C|UjREFT0#H- literal 0 HcmV?d00001 diff --git a/src/__pycache__/Plant.cpython-310.pyc b/src/__pycache__/Plant.cpython-310.pyc index e2ac07f511cb48f7eefab18bdfb7aaceeb7ef751..7c7a94e94ef0612d83349153dceeaaee54fb3e2d 100644 GIT binary patch delta 206 zcmeyt^Ph(|pO=@50SKf@i&CynUw_i*zz0$Sf!TvDtvw8HkHzCeLJ*=1gY; zDrNN3WSeZoA~*R7tDd9`W0i0~PGVk(UV3UtKw?p1ZfZ$tQ87@3G^-|4k;P<3Rs%th cDI5$ui~`n0%s?hcl1*!}7n>3nOh$qU0F;s@t^fc4 delta 220 zcmey*^Mi*spO=@50SLNV^Hc6lF@-UOsf8noxt)Q9A&Ld4ih1LfR2C*p*2#NWH7CDj)eU6<>fm4yVJu<> zGLjjA1Pp-K>_F@c#Kj6gqJ|+0gc*UD35c12m<5PgftW3w9cVbCpC)^eG*IPaD;BxQ mWvqIf3XDZIK)xpXWKA|LMw`k0Y-&6lKmiU09!3!+9vc8%s3sBs diff --git a/src/__pycache__/Tractor.cpython-310.pyc b/src/__pycache__/Tractor.cpython-310.pyc index 173d36de7ff1e228708051e56e2ec993f03d111c..77d9d9fd7af9e20eaccb942a0fc5151882eb4b2d 100644 GIT binary patch delta 1733 zcmZ`(O>Y}j6n$?#obin9CQX~f`DhZ0Qii4l34sVLNg$;yBDhEa33<`cbmrNac!*(t#?w&uK%8~Z{O?Pp zs8}=^{>okOZi# zduI7Aef4P&IQd=nm{)Bs8MXqen9A~`x+Ct35MCk;2^T3d5sTy|Ch6m;f?)FAnNPv> zk_fI2bE#{V9eA0Dmk>~UnVO-t)fNZa!{LvrTc~i7dxiL~BJ`$D>7QiN@6|7g24dB4tQLed8 z%wP|xAnETCWgO3xJO~UtL03G_FI844xlJ&#_!C|fhQdp{bi>@cLKT_bfuNnh%`w&1ftv_$q<%B~ z!@Ty^ZLG4DDxQ}YXH#y*7&d&2wGpZAr0-j=zdfY(@^~Cpq$K*1_GO4jbNQ%j1S~q!!62wL_muO zRf0PNpCDvK$MHfpjy(~Ej&o{@D^wyKqvM-}PrQO)umV3a%7$uaM$xbg9see_27cpz zQUxlv3qXv_z$+=i3nLy}11iOGoxp2`0xv^E7uujvRB1iH=MZkll3nx>x`m`p4N3YB dhg3n~>#fM|hGK)ZVqj%lG=mqorf7Ul`v)ZPa4Y}- delta 1415 zcmZ{k&u`pB6vt=m@$Rg5H!PdBNj44L@=I8YO8L=}C{T(*X`8AMQaDt(43<5cb>i63 zctV=hq8x(6d6^prpn?l$PMj)kTu={)i*G&VUqC|QJv*Ymw!4~-$KQG1XV1JDKUny? zGnF=*E`i@qKd0epb3ApHE{=N(-3=C!4d*%u?T~#BxwLdbyv#**}xI4xWuclmc z%egk+g`1ph%Y#h40^Jg?qBw0HI@9$0ulF5?u2pc%0US?Ja677n!VF>#VIj@{exa(1 z{il*OcG54U=%;GmSK$TIuHL;=q=aNdy;J&%MDI>8*9vni`+CXTuWm1)Ga7(Z74}PL zndEZ|pNcjI`U=LpZvy_^`u|fYp6gZ03A8bwjyR2&Mw~)SN<0+|WUwt%s(l@$$%^@` zwsMGhSDyo-Cy5fp!~Oh8y5b%Bg$O%(6S2?Vw{Gkk@x(Kha`SrF*-u z)&6uBUhd-HRm77y^JY<=I?Qi&q_7v^4l`SLZ0@~pMI z_UK%E`W&~q2?HSx-Z1UP#l;iru$IXEZjn+w&k9S36B?A}VWW4L;g_H|xn&jTnn%m& zO?vNkKT1N8NMFfJm#>feB*TN_(qZRw-(0 zLp$Bh{x9XJci&_QVf85DZ{#Q(x7~f zH+h{q@OR;=IA@%-SP_Vy6bQ?CCbf=|&8++=*r-`MccC4qkMX9m4!aSGh}j=|Y_Tcu Xu{r;soZ}Td-o-L=(xS{_bk_P0Y8WFn diff --git a/src/__pycache__/map.cpython-310.pyc b/src/__pycache__/map.cpython-310.pyc index 85981300e298bc92b0920c3ce500f51b058586d4..cee2793fca57314f7fb96951ba2369e962877e01 100644 GIT binary patch delta 685 zcmb7>&ubJh6vy+DOeQd28Ix$SKI(b4%3PdM{ z8aAeu>s0aMbwzZhIPOCJJlwwxSHXU216?gVk>~Fu^%m+Q?4#kzx zIb5623?$T{0TG86?1Iei47z!k7-(9~BJ zbWotNcqgg=yUMiOA^96O4EG`|Ws0e=r0!ezk$&OtKga`sw!0pkg2-)03$W(CM)U4% zw3I45>N`bn$k%c9LHrbxe8Z#b?!?dFraO!mTdRKJhKIK!KjX3F;V+P{d8~VM-HGH{ JFegtZ>=#*=kpln# delta 645 zcmb7=&uddb5XX0Bci-E-UrlSI=|QliU~`F5d(a{gv0^JqrH!=;BBn1QO-anl9z5)$ z(1(>~%YJshv$H#2=2zuMCF#a-z-YXA*-hV< zJ|umSD3VjOuG8wT*&{K3P|s2OTIq=aq&UL{u*x1?%(-F1z<@y=mYLxxFSDmuATS-J zVmz8M9jAicvXd!JcKJHag-(W(MifBrN(K!dpq?@~OFv#=z1iNR_713AJ(vHmz(*FO zFAB- zo}KpE_Ru?3%SzP4Kqhb@PO!?ryi-H;Wv5b;0ulZRIT diff --git a/src/map.py b/src/map.py index 9b0d95b..4676762 100644 --- a/src/map.py +++ b/src/map.py @@ -42,15 +42,17 @@ def drawRoads(screen): for x in road_coords: for block in range(int(fields_amount)+1): screen.blit(road, (x*block_size, block * 36)) - tmp_field=Field('road', x*block_size, block * 36, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None,plantObj=None) + new_road = Road(x,block) + tmp_field=Field('road', x*block_size, block * 36, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None,contain=new_road) fields.add(tmp_field) - WORLD_MATRIX[x][block]=Road(x,block) + WORLD_MATRIX[x][block]=tmp_field for y in road_coords: for block in range(int(fields_amount)+1): screen.blit(road, (block * block_size, y*block_size)) - tmp_field=Field('road', block * block_size, y*block_size, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None,plantObj=None) + new_road = Road(block,y) + tmp_field=Field('road', block * block_size, y*block_size, None, get_cost_by_type('road'), None, None, None, None, 'road', None, None,contain=new_road) fields.add(tmp_field) - WORLD_MATRIX[block][y]=Road(block,y) + WORLD_MATRIX[block][y]=tmp_field barn_img = pygame.image.load('assets/barn.png') @@ -74,7 +76,7 @@ def seedForFirstTime(): wzrost=random.randint(0, 100), wilgotnosc=random.randint(0, 100), dni_od_nawiezienia=random.randint(0, 31), - aktualna_pogoda='_', + aktualna_pogoda=random.randint(1,4), czy_robaczywa=random.randint(0, 1), cena_sprzedarzy=random.randint(500, 2000), species=plant_name, @@ -82,7 +84,7 @@ def seedForFirstTime(): pos_y=y) blocks_seeded_in_field = blocks_seeded_in_field + 1 plant_group.add(new_plant) - tmp_field_plant = Field('field', x-18, y-18, None, get_cost_by_type(plant_name), None, None, None, None, plant_name, None, None, plantObj=new_plant) + tmp_field_plant = Field('field', x-18, y-18, None, get_cost_by_type(plant_name), None, None, None, None, plant_name, None, None, contain=new_plant) fields.add(tmp_field_plant) mx = int((x-18)/36) diff --git a/tree.plk b/tree.plk new file mode 100644 index 0000000000000000000000000000000000000000..9ed8f15922bae7f0068f1f79ccf2d3ff4cc83d14 GIT binary patch literal 1782 zcma)7&5zqe6nC<_S??0sv}M}@mzCfUE*7oSs;v--NF^k!W+gxrM9XwyPcqZB$JTh< zG!aP4q1&!B2c$kE{s;bvUg69Qgt&9%%EudjP-ol2`jF@M-tT?C=Nznm|7XW39d7Li1AW_VV^GFM-6kUMn62*c!`TRYANyLG{<}3iN(0}vV)yT5x%-VFc-@6Vz?Ts8eJs(@R~ zC*V7W!0+&>?;^d6w1@O7YdLL9@1>R(5lMLL?;^d2mVKlY`F9T?_pjj@^z4K`c!HCy zhg*+sy`FkO{}_B1Ui$mzTfYu|YRY%T(B4S%`KMwk*s~fwsb4HT_J@^6ZNf$9tn`=iC@>RDAVGcIx=0xI66L@Bi@IxnBmins&oaP8{$3 zrk%5QV!P8TcHXc!uFeA*<@j}d$=c%3+K++9N29c`yhn$nhrN