Add fuzzy logic model and java run class
This commit is contained in:
parent
5555654e30
commit
3371786d13
56
dopasowanie.fcl
Normal file
56
dopasowanie.fcl
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
FUNCTION_BLOCK dopasowanie
|
||||||
|
|
||||||
|
VAR_INPUT
|
||||||
|
wiek : REAL;
|
||||||
|
wzrost : REAL;
|
||||||
|
wartosc_rynkowa: REAL;
|
||||||
|
czestotliwosc_strzalow: REAL;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
VAR_OUTPUT
|
||||||
|
dopasowanie : REAL;
|
||||||
|
END_VAR
|
||||||
|
|
||||||
|
FUZZIFY wiek // Zmienna 'wiek': {'mlody', 'sredni' , 'stary'}
|
||||||
|
TERM mlody := (0, 1) (25, 1) (30, 0) ;
|
||||||
|
TERM sredni := (18, 0) (25, 1) (35, 1) (45, 0);
|
||||||
|
TERM stary := (40, 0) (45, 1);
|
||||||
|
END_FUZZIFY
|
||||||
|
|
||||||
|
FUZZIFY wzrost // Zmienna 'wzrost': { 'niski', 'sredni', 'wysoki' }
|
||||||
|
TERM niski := (0, 1) (150, 1) (160, 0) ;
|
||||||
|
TERM sredni := (160, 0) (170, 1) (180, 0);
|
||||||
|
TERM wysoki := (175, 0) (190, 1);
|
||||||
|
END_FUZZIFY
|
||||||
|
|
||||||
|
FUZZIFY wartosc_rynkowa // Zmienna 'wartosc_rynkowa': { 'niska', 'srednia', 'wysoka' }
|
||||||
|
TERM niska := (0, 1) (0.5, 1) (1, 0) ;
|
||||||
|
TERM sredna := (0.5, 0) (1, 1) (1.5, 1) (2, 0);
|
||||||
|
TERM wysoka := (1.75, 0) (2, 1);
|
||||||
|
END_FUZZIFY
|
||||||
|
|
||||||
|
FUZZIFY czestotliwosc_strzalow // Zmienna 'czestotliwosc_strzalow': { 'mala', 'srednia', 'wysoka' }
|
||||||
|
TERM mala := (400, 0) (500, 1);
|
||||||
|
TERM srednia := (150, 0) (200, 1) (350, 1) (500, 0);
|
||||||
|
TERM wysoka := (0, 1) (150, 1) (200, 0);
|
||||||
|
END_FUZZIFY
|
||||||
|
|
||||||
|
DEFUZZIFY dopasowanie // Zmienna 'dopasowanie' : {'slabe', 'dobre', 'bardzodobre'}
|
||||||
|
TERM slabe := (0, 1) (40, 1) (50, 0);
|
||||||
|
TERM dobre := (40, 0) (50, 1) (60, 1) (80, 0);
|
||||||
|
TERM bardzodobre := (70, 0) (80, 1);
|
||||||
|
METHOD : COG; // Metoda defuzyfikacji - 'Center Of Gravity' - 'Sreodka ciezkosci'
|
||||||
|
END_DEFUZZIFY
|
||||||
|
|
||||||
|
RULEBLOCK No1
|
||||||
|
AND : MIN; // Uzycie 'min' jako 'and' (implikuje uzycie 'max' jako 'or' dla zapewnienia praw DeMorgan'a)
|
||||||
|
ACT : MIN; // Uzycie 'min' jako metody aktywacji
|
||||||
|
ACCU : MAX; // Metoda agregacji - 'max'
|
||||||
|
|
||||||
|
RULE 1 : IF wiek IS mlody AND wzrost is sredni AND wartosc_rynkowa IS niska AND czestotliwosc_strzalow IS srednia THEN dopasowanie IS dobre;
|
||||||
|
RULE 3 : IF wiek IS sredni AND wzrost is wysoki AND wartosc_rynkowa IS srednia AND czestotliwosc_strzalow IS wysoka THEN dopasowanie IS bardzodobre;
|
||||||
|
RULE 4 : IF wiek IS sredni AND wzrost is niski AND wartosc_rynkowa IS srednia AND czestotliwosc_strzalow IS niska THEN dopasowanie IS slabe;
|
||||||
|
END_RULEBLOCK
|
||||||
|
|
||||||
|
END_FUNCTION_BLOCK
|
||||||
|
|
40
dopasowanie.java
Normal file
40
dopasowanie.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import net.sourceforge.jFuzzyLogic.FIS;
|
||||||
|
import net.sourceforge.jFuzzyLogic.FunctionBlock;
|
||||||
|
import net.sourceforge.jFuzzyLogic.Gpr;
|
||||||
|
import net.sourceforge.jFuzzyLogic.plot.JFuzzyChart;
|
||||||
|
import net.sourceforge.jFuzzyLogic.rule.Variable;
|
||||||
|
|
||||||
|
public class dopasowanie {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
// Laduje plik 'FCL'
|
||||||
|
String fileName = "dopasowanie.fcl";
|
||||||
|
FIS fis = FIS.load(fileName, true);
|
||||||
|
if (fis == null) { // Error while loading?
|
||||||
|
System.err.println("Can't load file: '" + fileName + "'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pokazuje reguly
|
||||||
|
FunctionBlock functionBlock = fis.getFunctionBlock(null);
|
||||||
|
JFuzzyChart.get().chart(functionBlock);
|
||||||
|
|
||||||
|
// Ustawia zmienne wejsciowe
|
||||||
|
functionBlock.setVariable("wiek", 28);
|
||||||
|
functionBlock.setVariable("wzrost", 185);
|
||||||
|
functionBlock.setVariable("wartosc_rynkowa", 2.5);
|
||||||
|
functionBlock.setVariable("czestotliwosc_strzalow", 165);
|
||||||
|
|
||||||
|
// Uruchamia blok wniskujący
|
||||||
|
functionBlock.evaluate();
|
||||||
|
|
||||||
|
// Wyswietla wykres
|
||||||
|
Variable match = functionBlock.getVariable("dopasowanie");
|
||||||
|
JFuzzyChart.get().chart(match, match.getDefuzzifier(), true);
|
||||||
|
Gpr.debug("poor[service]: " + functionBlock.getVariable("wartosc_rynkowa").getMembership("niska"));
|
||||||
|
|
||||||
|
// Wyswietla reguly
|
||||||
|
System.out.println(functionBlock);
|
||||||
|
System.out.println("DOPASOWANIE:" + functionBlock.getVariable("dopasowanie").getValue());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user