Reguły FCL

This commit is contained in:
marcin-szczepanski 2020-05-24 13:00:55 +02:00
parent dad3542862
commit d69befad1e

View File

@ -1,171 +1,108 @@
FUNCTION_BLOCK prediction // Definicja bloku (moze byc wiecej blokow w pliku) FUNCTION_BLOCK prediction
VAR_INPUT // Definiuje zmienne wejsciowe VAR_INPUT
goalkeeperForm1 : REAL; goalkeeperForm: REAL;
formationAgainstForm1 : REAL; formationAgainstForm: REAL;
shootsOnTargetAverage1 : REAL; shootsOnTargetAverage: REAL;
possessionAverage1 : REAL; possessionAverage: REAL;
goalsAverage1 : REAL; goalsAverage: REAL;
goalsLostAverage1 : REAL; goalsLostAverage: REAL;
redCardsAverage1 : REAL; redCardsAverage: REAL;
penaltyAreaEntriesAverage1 : REAL; penaltyAreaEntriesAverage: REAL;
penaltiesAverage1 : REAL; penaltiesAverage: REAL;
lastMatchesResultAverage1 : REAL; lastMatchesResultAverage: REAL;
lastMatchesResultBetweenAverage1 : REAL; lastMatchesResultBetweenAverage: REAL;
goalkeeperForm2 : REAL;
formationAgainstForm2 : REAL;
shootsOnTargetAverage2 : REAL;
possessionAverage2 : REAL;
goalsAverage2 : REAL;
goalsLostAverage2 : REAL;
redCardsAverage2 : REAL;
penaltyAreaEntriesAverage2 : REAL;
penaltiesAverage2 : REAL;
lastMatchesResultAverage2 : REAL;
lastMatchesResultBetweenAverage2 : REAL;
END_VAR END_VAR
VAR_OUTPUT // Definiuje zmienne wyjsciowe VAR_OUTPUT
prediction : REAL; prediction : REAL;
END_VAR END_VAR
FUZZIFY goalkeeperForm1 FUZZIFY goalkeeperForm
TERM zla := (0, 1) (4, 0) ; TERM zla := (50, 1) (70, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM dobra := (70, 0) (80,1) (90,0);
TERM znakomita := (6, 0) (9, 1); TERM znakomita := (90, 0) (100, 1);
END_FUZZIFY
FUZZIFY goalkeeperForm2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY formationAgainstForm1 FUZZIFY formationAgainstForm
TERM zla := (0, 1) (4, 0) ; TERM zla := (30, 1) (40, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietna := (35, 0) (50,1) (70,0);
TERM znakomita := (6, 0) (9, 1); TERM dobra := (70, 0) (100, 1);
END_FUZZIFY
FUZZIFY formationAgainstForm2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY shootsOnTargetAverage1 FUZZIFY shootsOnTargetAverage
TERM zla := (0, 1) (4, 0) ; TERM malo := (2, 1) (4, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (3, 0) (5,1) (7,0);
TERM znakomita := (6, 0) (9, 1); TERM duzo := (7, 0) (10, 1);
END_FUZZIFY
FUZZIFY shootsOnTargetAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY possessionAverage1 FUZZIFY possessionAverage
TERM zla := (0, 1) (4, 0) ; TERM malo := (30, 1) (40, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (40, 0) (50,1) (60,0);
TERM znakomita := (6, 0) (9, 1); TERM duzo := (60, 0) (100, 1);
END_FUZZIFY
FUZZIFY possessionAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY goalsAverage1 FUZZIFY goalsAverage
TERM zla := (0, 1) (4, 0) ; TERM malo := (0, 1) (1, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (1, 0) (1.5,1) (2,0);
TERM znakomita := (6, 0) (9, 1); TERM duzo := (2, 0) (3, 1);
END_FUZZIFY
FUZZIFY goalsAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY goalsLostAverage1 FUZZIFY goalsLostAverage
TERM zla := (0, 1) (4, 0) ; TERM malo := (0, 1) (1, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (1, 0) (1.5,1) (2,0);
TERM znakomita := (6, 0) (9, 1); TERM duzo := (2, 0) (3, 1);
END_FUZZIFY
FUZZIFY goalsLostAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY redCardsAverage1 FUZZIFY redCardsAverage
TERM zla := (0, 1) (4, 0) ; TERM malo := (0, 1) (0.1, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (0.1, 0) (0.2,1) (0.3,0);
TERM znakomita := (6, 0) (9, 1); TERM duzo := (0.3, 0) (0.4, 1);
END_FUZZIFY
FUZZIFY redCardsAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY penaltyAreaEntriesAverage1 FUZZIFY penaltyAreaEntriesAverage
TERM zla := (0, 1) (4, 0) ; TERM rzadko := (0, 1) (5, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (5, 0) (9,1) (13,0);
TERM znakomita := (6, 0) (9, 1); TERM czesto := (13, 0) (20, 1);
END_FUZZIFY
FUZZIFY penaltyAreaEntriesAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY penaltiesAverage1 FUZZIFY penaltiesAverage
TERM zla := (0, 1) (4, 0) ; TERM malo := (0, 1) (0.1, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM przecietnie := (0.1, 0) (0.2,1) (0.3,0);
TERM znakomita := (6, 0) (9, 1); TERM duzo := (0.3, 0) (0.4, 1);
END_FUZZIFY
FUZZIFY penaltiesAverage2
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY lastMatchesResultAverage1 FUZZIFY lastMatchesResultAverage
TERM zla := (0, 1) (4, 0) ; TERM bardzo_slabo := (0, 1) (3, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM slabo := (3, 1) (4, 0);
TERM znakomita := (6, 0) (9, 1); TERM przecietnie := (4, 0) (5,1) (6,1);
END_FUZZIFY TERM dobrze := (6, 0) (8, 1);
FUZZIFY lastMatchesResultAverage2 TERM bardzo_dobrze := (8, 0) (9, 1);
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
FUZZIFY lastMatchesResultBetweenAverage1 FUZZIFY lastMatchesResultBetweenAverage
TERM zla := (0, 1) (4, 0) ; TERM bardzo_slabo := (0, 1) (3, 0);
TERM dobra := (1, 0) (4,1) (6,1) (9,0); TERM slabo := (3, 1) (4, 0);
TERM znakomita := (6, 0) (9, 1); TERM przecietnie := (4, 0) (5,1) (6,1);
END_FUZZIFY TERM dobrze := (6, 0) (8, 1);
FUZZIFY lastMatchesResultBetweenAverage2 TERM bardzo_dobrze := (8, 0) (9, 1);
TERM zla := (0, 1) (4, 0) ;
TERM dobra := (1, 0) (4,1) (6,1) (9,0);
TERM znakomita := (6, 0) (9, 1);
END_FUZZIFY END_FUZZIFY
DEFUZZIFY prediction // Zmienna wyjsciowa 'prediction' : {'skromny', 'sredni', 'hojny' } DEFUZZIFY prediction
TERM skromny := (0,0) (5,1) (11,0); TERM przegrana := (-1,1) (0,0);
TERM sredni := (9,0) (15,1) (21,0); TERM remis := (-0.5,0) (0,1) (0.5,0);
TERM hojny := (19,0) (25,1) (30,0); TERM wygrana := (0,0) (1,1);
METHOD : COG; // Metoda defuzyfikacji - 'Center Of Gravity' - 'Sreodka ciezkosci'
DEFAULT := 0; DEFAULT := 0;
END_DEFUZZIFY END_DEFUZZIFY
RULEBLOCK No1 RULEBLOCK No
AND : MIN; // Uzycie 'min' jako 'and' (implikuje uzycie 'max' jako 'or' dla zapewnienia praw DeMorgan'a) AND : MIN;
ACT : MIN; // Uzycie 'min' jako metody aktywacji ACT : MIN;
ACCU : MAX; // Metoda agregacji - 'max' ACCU : MAX;
RULE 1 : IF goalkeeperForm1 IS zla OR goalkeeperForm2 is zla THEN prediction IS skromny; RULE 1: IF goalkeeperForm IS zla AND possessionAverage IS malo THEN prediction IS przegrana;
RULE 2: IF possessionAverage IS duzo AND shootsOnTargetAverage IS duzo THEN prediction IS wygrana;
RULE 3: IF lastMatchesResultBetweenAverage IS slabo OR lastMatchesResultBetweenAverage IS przecietnie lastMatchesResultBetweenAverage IS dobrze THEN prediction IS remis;
END_RULEBLOCK END_RULEBLOCK
END_FUNCTION_BLOCK END_FUNCTION_BLOCK