2015-01-29 9 views
0

Я использую библиотеку jFuzzyLogic для проекта FL.В нечеткой логике, как я могу добавить функции членства для разных точек зрения?

Я создал файл FCL, который имеет три переменные, обслуживание, комнату и питание.

FUZZIFY food 
    TERM bad := (0, 1) (4, 0) ; 
    TERM good := (1, 0) (4,1) (6,1) (9,0); 
    TERM excellent := (6, 0) (9, 1); 
END_FUZZIFY 

FUZZIFY service 
    TERM poor := (0, 1) (4, 0) ; 
    TERM good := (1, 0) (4,1) (6,1) (9,0); 
    TERM excellent := (6, 0) (9, 1); 
END_FUZZIFY 

FUZZIFY room 
    TERM poor := (0, 1) (4, 0) ; 
    TERM good := (1, 0) (4,1) (6,1) (9,0); 
    TERM excellent := (6, 0) (9, 1); 
END_FUZZIFY 

У меня также есть два правила (это не является исчерпывающим), которые:

RULEBLOCK rules 
    AND : MIN;   // Use 'min' for 'and' (also implicit use 'max' for 'or' to fulfill DeMorgan's Law) 
    ACT : MIN;   // Use 'min' activation method 
    ACCU : MAX;   // Use 'max' accumulation method 

    RULE 1 : IF food IS bad OR service IS poor OR room IS poor THEN trustWeight IS less; 
    RULE 2 : IF food IS excellent OR service IS excellent OR room IS excellent THEN trustWeight IS high; 

END_RULEBLOCK 

Окончательный вывод из следующего набора:

DEFUZZIFY trustWeight 
    TERM less := (0,0) (0.25,1) (0.5,0); 
    TERM high := (0.5,0) (0.75,1) (1,0); 
    METHOD : COG;  // Use 'Center Of Gravity' defuzzification method 
    DEFAULT := 0;  // Default value is 0 (if no rule activates defuzzifier) 
END_DEFUZZIFY 

Моя логика в том, что на основе ввод различных типов людей, различные веса должны быть выделены. Например, когда бизнесмен оценивает номер (5/10), а член семьи оценивает номер (5/10), вывод должен быть не таким. Мне нужно иметь следующие правила:

  • Если его familyman, и комната плохо, то trustWeight меньше
  • Если его бизнесмен, и комната плохо то trustWeight высокая

в зависимости от типа личности (и другие фиксированные факторы). Я должен иметь возможность получать разные результаты TrustWeight.

Возможно ли это? Если да, то как я могу это сделать?

ответ

1

Я хотел бы добавить еще один вход лицо:

FUZZIFY person 
    TERM family := 1; 
    TERM business := 2; 
END_FUZZIFY 

и необходимые правила:

RULE 3 : IF person IS business THEN trustWeight IS high; 
RULE 4 : IF person IS family THEN trustWeight IS less;