From 0099d64e5489d66f99fe1a830e52198102b3acb8 Mon Sep 17 00:00:00 2001 From: Jakub Date: Sun, 21 May 2023 18:46:38 +0200 Subject: [PATCH] Utworzenie klasy TreeLearn oraz klasy Node --- __pycache__/blocks.cpython-37.pyc | Bin 0 -> 2547 bytes __pycache__/land.cpython-37.pyc | Bin 0 -> 2272 bytes __pycache__/soil.cpython-37.pyc | Bin 0 -> 1249 bytes __pycache__/tractor.cpython-37.pyc | Bin 0 -> 2834 bytes main.py | 65 +++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+) create mode 100644 __pycache__/blocks.cpython-37.pyc create mode 100644 __pycache__/land.cpython-37.pyc create mode 100644 __pycache__/soil.cpython-37.pyc create mode 100644 __pycache__/tractor.cpython-37.pyc diff --git a/__pycache__/blocks.cpython-37.pyc b/__pycache__/blocks.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d879c80eaa729bfc6340a8540c06e84ecbd3a86 GIT binary patch literal 2547 zcmZuzOK;mo5Z>iW)XPpBHxIPv6DX>S+qh_f6hV-tL30xdqz^!FOVHevLz^PyB^}!W z-HY=pdXkU*1N{{}_O#dZ;=fR!K)+d1l2A93uh#G2S6n^!t#kyLmyI0Z3J-f%w1kh@6K&DK+!9^U!|aPb zerQd5Pm(M;$Rl!_9-3W@Z!mI)Ggk7F1+3uv*4!5Sg3p}`28|1iH*b|}-z}}u8e11u zttFh*;QR*Xui!{aIJ?2M8(ez@M_R%;4X)GRIx9HR63%UK-3HfP!I745UW4m3xZVn` zSM=v=<~#d>Ax^E~Y*WcRJ5rI%KOHC8u~b{rbZ>TRsm+Tll}5R-R0%cIHUsk|7 zOW-&>PJ>*^3VrvQ;rN9N3wqCBUH7Mp7zb;O zlV@=~ItPL5p+YUOOA>>Yc98)j%flqHiEhyxr-kMxnxATWn&sLHr&F1VfvYxfM)#{P z57MK_u2i~fLRoK|-AtTn9-Ej};w^Iq!3ql*R7c-~DmQ(LuOUtwkh9G?Dp!CJg@hi8 zY!e!d&B|3QH>;p@Ei$EZNCO}@e8ZUCs&l=1wn;UmoLaxB z0(v8Y#pb+3!$-nsZIx)&_1Z4c;OPbfv-xn~sGB%3@^e`PDSFXpjaIQz@m^TOSvu;{ zK8#`!7pDtCI|kXRwYsx}D`M*PPwv(frQY%g_MC{xtRC<2*~V2C6C|QSqlac1=ELX= zeN5#xH*ODjl?m!ctF^NSm+4LDGUMzij5%GqY*{l`0L}eLZG}>8eotU=@=Jk#0)%yL zp>n=EL;Ii`2wtE%rsmZLc@k82P3rUAg1#~EX26L4G z@aT1e{Xkp}3RzCOd_-+5T@AK=@`TiuOYldyQ9D19d52KS~{YyV;8@Y=3Fl7`Zj0uBd|0i`7sLaHhhpb`>75fXw*meFdxGj`VA>^d`> z;#l^D^vH=5C*)j^_?PC&h43eE;=NgWvsMvf&6}C`e)Hk?d++V%jYf??>wGrme>DjC z6BnCi!Q=?KdItn2oW`V=kF-a>B%E>UCE?a3>oHEhC0+X(aO5~dxoHe0N6^)WAOz`A zP7ux6OVYEr#cddE?r;}IhgY}Vyt}2{f(Uo^aKvM-xZB<{8aTU;P$gXe?YB#uB2G=NXjS>#E+qhNJp->M;GEnMZnvCYJ-zbN{ zkBP6+C`LnfM>nQ{6iMc*PzsUgdMM)9PtH#VLh7nnsAw*Fbw83a8U(VW+!X(&In(&rD_%bVvT7I0byQbZs@w&Rw5os3{8pAAZ-*F8@<}iKly{m zJy8AgN%*Ayof1;@$HC-$(0?Y>Bul4#cqfeV@S}rAANN&s_;{`8#}IJ`(+lnSew0L+ z@8ccnEf9pdn;+YycO2+AuKT=!v3juC6=K+9!-ruvLHip_I9)>UK@dVnj>#S*(S0(p z<)dxQl4TSUi&8Q>$pC*zpOGK>OKbLhX02=v0X`<&xl69t(tbtbKms@;yu+DP_l|(fI`GD5;0f%lHzt0-HPExJ5w1YnRXyFAc$NTczUWUID+0#r`=#W6$$UU@;2<$ z)glIaZ{|1n>CngPl@HMcArqdMsL(X(nG^lldb}{i=i)Uys}8$@Oc?mvpip-~5NfkM z+NK_BQbu>-*MwD*&fA8@(v}b-4ciuzzk_17S|BUGF0BlT5U2N$QMyMiDR6=sR?;{N zD3%i@zXA+fLCG51$Osl8V1#iSY{SB47%XfK*nTQ(hRMR_g3T>#m76oq+%=<>V?&9& z2T#`ZQWj$B7Wt>EMdoR5lXG29TS$?~GxUSD2XU0i7EEOu#SV&H5NqZndbpR=Ud zDb-vPVCMvAdz7ZUXAJ`0t;#pxtv97hzKhGk&GJ25)V*5b?@R(?Dwz|X0#+e;WSs#`$bj7I^L^v-|J!}stzebJclf@p z`Tl9j&tsh5^8K^(AkHlkX_fmZK0tv~mtJY!i+L)sVq(=%9te+m_r12)Fxsvqkz@G) W1;YMozxJNy5BL;okHVAS5cV$|k~C}p literal 0 HcmV?d00001 diff --git a/__pycache__/soil.cpython-37.pyc b/__pycache__/soil.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dcaa6410fd5231e35a0e4a7aef0f77380b15c48 GIT binary patch literal 1249 zcma)6J#X7E5GD0t%aZLlG0?fI7Nbp36fKG({Xn~A3AzXZ2vw&BavVD)^+)#gs$c_6RdX7^V&u40K?_{GOj6j%>D!baOh!oY=SBW1{j3V9(s_2V{*rzu z)J3(rN-LRRl*dnJPoAf$Jbq>;QiYYzuC9?xl*_Ubf=X6Bbd2}#`930Tvlh)cAvh?K z8FiFiv$<8nB}tFD>|-!xHExKXIyf&Xqm@8KWUS?Ak=)E8K#|OFPzN+S*zTI;aT=Zg z@jGP7lF{PZWG%9vAQJe1poq%0r!eZ!Ow7J@!2M+zHY4pE&tOKhwm@Za9W9jdnArY#qNjc`n2cQ5Z}h}3Q6h|N%z~hIHZ=Q`yzx6 zg}7Y7dO`0)A-=7%MT1B>F*zo8K#q1(9+IPf6G?hIn@=}PQWwj%`xPw>c<2Xi`xxvL Un}u@jTdafEO)+mM<2M@n2d6XihX4Qo literal 0 HcmV?d00001 diff --git a/__pycache__/tractor.cpython-37.pyc b/__pycache__/tractor.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60f25f3fd5d32d0ec17bda7d6c25e273a79c9ea3 GIT binary patch literal 2834 zcmb_eOOG2x5bo}Ici2r` z`6^?-(aY?yz}&@1u7gM>`GB?ZnYZ|tObTf|Wzu>gT0-)NtYIHRk2OQ0vqylri;>(1 zQLM!!BW)?3vX&(+X=ApfBVEjnEJ+WuE6cKixg?il6|*O6av5`3uHY-HS!qWHVH)X> z45Wu<7vl?z?w7${Fg&zjnjKjTy986j?gh&fU!5NnQj1!B*UGLXu2X~KH$ zL`dfXn}|K}OceX&lF~%vvO+@p<`QqVhE^6*`bI7-L+a9wvNV?x=4_C?)j3y_9^RK_ z8FU4flrUSe0=k;}Dj5!FsX1QNDv3rqRLKXUcrzY$#_J12Mu)@G*g);220ORV)7{R# z0gow&$2Jj89V>IZ{(KhP!G)h6R0hdG&J49Lo<4u;8Iqz^JD34?*k_~VQp zWlk{c;H50PT7_vh!m=b)al^u_27B70{mP*l4E&@!RzEZSDv&?!gm-qoPLxh|dqIEH z-o3Aqej3HQ_zGry^Ty_fAMYmJn;#Vb2`Je%Ie_`ALs(Nrg#Xl=1faOv|jzwJL;5 z*J#ar{0nyB)P37n3ZH)DdL6to$6!6Mw}8>gTn}~vy912MkuXo%C}!q+DGJrZl0QKd z&71dx7x7$bX7)jZ0-!WFZh>e@22G8uy9`jT5Vudc=4i9(Ho>hAPS96O3@rU+glH|t~K06MPybSq4Q`(24rp!$7(2b9p5aDqqWqIpo-tPHY+Kkaki^;lra6jT)hSN=B}o=uui(S zM()+WdRX7t-l{*`+PZ%Y&0t>q`Z^i>29Y{Q;a_HxOIbNlO8Uf}>6aIe(7B;P8JJMh zWCE@sh>OlOQ#sqW|1*s1C;j|(d+XlLOEJwIeH}Lb!(06}&{pMeUj^yEdt1Uq^GGFW z8_K8SxH5}lp)>E()HMzL6115{%v}RHXQYm zM#h_x-Hm`v;L64T!J${&%BbkW2Js`WjtNrs?Q6iF=1ggUBY4g)N4o vTTRabl2D`bxOdUBy&E1qWg}}?x=ecS&6LmDCG$Sbt@;e7#}W!Kwi15>CsSA% literal 0 HcmV?d00001 diff --git a/main.py b/main.py index b9ab2292..7bdb0e21 100644 --- a/main.py +++ b/main.py @@ -9,6 +9,71 @@ from pygame.locals import * from datetime import datetime +class TreeLearn: + def __init__(self): + self.tree = None + + def train(self, examples, attributes, default_class): + self.tree = self.build_tree(examples, attributes, default_class) + + def build_tree(self, examples, attributes, default_class): + if not examples: + return Node(default_class) + + if self.all_same_class(examples): + return Node(examples[0][-1]) + + if not attributes: + class_counts = self.get_class_counts(examples) + default_class = max(class_counts, key=class_counts.get) + return Node(default_class) + + best_attribute = self.choose_attribute(examples, attributes) + root = Node(best_attribute) + + attribute_values = self.get_attribute_values(examples, best_attribute) + + for value in attribute_values: + new_examples = self.filter_examples(examples, best_attribute, value) + new_attributes = attributes[:] + new_attributes.remove(best_attribute) + new_default_class = max(self.get_class_counts(new_examples), key=lambda k: class_counts.get(k, 0)) + + subtree = self.build_tree(new_examples, new_attributes, new_default_class) + root.add_child(value, subtree) + + return root + + def all_same_class(self, examples): + return len(set([example[-1] for example in examples])) == 1 + + def get_class_counts(self, examples): + class_counts = {} + for example in examples: + class_label = example[-1] + class_counts[class_label] = class_counts.get(class_label, 0) + 1 + return class_counts + + def choose_attribute(self, examples, attributes): + # Placeholder for attribute selection logic + return attributes[0] + + def get_attribute_values(self, examples, attribute): + return list(set([example[attribute] for example in examples])) + + def filter_examples(self, examples, attribute, value): + return [example for example in examples if example[attribute] == value] + + +class Node: + def __init__(self, label): + self.label = label + self.children = {} + + def add_child(self, value, child): + self.children[value] = child + + class Game: cell_size = 50 cell_number = 15 # horizontally