From 3b5256110d78bfa41da3f007447d6fd204d218c7 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Wed, 4 Jan 2023 14:09:37 +0100 Subject: [PATCH] draw figure and review commends --- engine.py | 6 +++++- file.pdf | Bin 0 -> 18027 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 file.pdf diff --git a/engine.py b/engine.py index 3e7588b..f2bd1e8 100644 --- a/engine.py +++ b/engine.py @@ -68,6 +68,7 @@ emotions_same = TriangleFuzzySet(0, 4, 4, term="same") FS.add_linguistic_variable("EMOTIONS", LinguisticVariable( [emotions_different, emotions_similar, emotions_same], universe_of_discourse=[-8, 8] )) +# Nie crisp tylko tak jak te powyżej zdefiniować FS.set_crisp_output_value("low_recomendation", 0) FS.set_crisp_output_value("medium_recomendation", 50) FS.set_crisp_output_value("high_recomendation", 100) @@ -77,6 +78,7 @@ RULE2 = "IF (EMOTIONS IS different) AND (GENRES IS different) THEN (RECOMENDATIO RULE3 = "IF (RELEASE_YEAR IS newer) AND (RUNTIME IS similar) AND (SEASONS IS less) THEN (RECOMENDATION IS medium_recomendation)" RULE4 = "IF (EMOTIONS IS similar) AND (GENRES IS similar) THEN (RECOMENDATION IS medium_recomendation)" RULE5 = "IF (RELEASE_YEAR IS similar) AND (RUNTIME IS similar) AND (SEASONS IS similar) AND (EMOTIONS IS same) AND (GENRES IS same) THEN (RECOMENDATION IS high_recomendation)" +# Z regułami trzeba eksperymentować, można porównywać ze scorem dla sprawdzania skuteczności FS.add_rules([RULE1, RULE2, RULE3, RULE4, RULE5]) @@ -86,4 +88,6 @@ FS.set_variable("SEASONS", -2.0) FS.set_variable("GENRES", 50.0) FS.set_variable("EMOTIONS", 1.0) -print(FS.inference(["RECOMENDATION"])) \ No newline at end of file +print(FS.inference(["RECOMENDATION"])) + +FS.produce_figure(outputfile='file.pdf') \ No newline at end of file diff --git a/file.pdf b/file.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d631dfd25a6734eb7735357ea50ddf0b1c1a7a92 GIT binary patch literal 18027 zcmb_^2RxPE8+c_DiR_fPcIMspx>oiU?v+i}wX#=|vPt$HX%Mn9A`K+jn-mGzQA8;t z8UOcHeZLLA|F_To^S^yg?|Gm1jORS(InOxfJb1L^6@}p!8t5Gg52qLUR^Q1qt?iq1|R5adn)sJ^C! zJ<-wwg8lZY;O(JA@G$ovLQvlTTIL=eL^mf08hoXM5^T+_?3`>MnD1ZRoGl4N4~P-a zt-K}upl>7cvftdV+4*bsnfOv!0yAc8GzM&7r6WyIX-7JCefcWDf zPz|D$ow=;DH_#&t_y;1P1zn=Qc{^4BTr!A7L$DgzO0&1^DPtF$88#dG2e;btW(Q<1M zYO-2y5k94G`?&jEy*h;DM*@+R@a2P-gogwy{1yts9%U2%RvlYPBhnFcsOwmq z2x$}goY?bE1Z6mzqeu66Tgrmo#?@6#(XPou1lfbmA*ZwSOiRt~pf+EatZsO&evZjv zuJ+q3{-lm$_uimvcCNbd)tPi=bY*+?%yy4S^};1GcDC-exv;`2Ha_pAk>xO~-{$60 zXY*ISbBiapE{*!F=KBrS%#-gIGZ%I5I&oX@6S+~g2+9WUb373LR4TFx7x-u@o<-X( zWs=zTfLGO(N1B)hg`z0hEuP!*-m82@SI=OC5^>c$@0>l}?^DzIIE~}x1M@mE6-nn( z;=Uu%r#Y)v+d?%+(=W^ukx9D9$q5O=?$2p`)sNQt8q3=w{I)hH1`7!>ymNR<1kohL zoxZhNi#j*Rs*76BefsF#G!=E;du8eeicQdJH&6GyQWi2MK0F*yay3QmO%$xdkS$W^ z4Mm0h>jQPw3LdTxt`zn!XL;JBGRU@T-O;lhc|@;%(2>d_x2N#U`}p&PsNxaW`9X;Q z-Auc7HQM+Y>U1_j>;Ryawy1hZH^s3RJFGA(VL2)})vPVds_pV z1UeBCIb$N#8#8cj`_Y!~cKcVqRp%0CDZe2#nJ<8X3#s>B>tRW^keE__?u!)>*8G2!uu z#xtyM?e+Ibd*3o6YyH;Mb37KqQk^Ci+oh2_H;#L4JP2@szedryvJLqRv(SY`G88^{ z6LFo4N{zi6{ZxsC*(9PsbfMr@Dmf8L8ZpFlPRNDbMNdoZ)l6?9L7@b(OgZAE2%p}M zAZ?}0*p%SwcT0Us(>|VmhDP({!~H&M6i%Yd ztBm3yPU7b%$1OgMD^~NrmFVoDw<4j8RHJ(0dhvtKmwo;d)L$m9%j`WSakJmmcw2!{R1GUQY(t
    w4v8uMv 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 jHx(yqz^?>G`Awy{dzia