Я использую библиотеку 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.
Возможно ли это? Если да, то как я могу это сделать?