【发布时间】:2015-01-29 11:34:59
【问题描述】:
我正在将 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)时,输出不应该是一样的 我需要能够拥有如下规则:
- 如果是家庭式的,而且房间很差,那么 trustWeight 就更小了
- 如果是商人,房间不好,那么信任度就高
根据人的类型(和其他固定因素),我应该能够得到不同的 TrustWeight 结果。
这可能吗?如果是这样,我该怎么做?
【问题讨论】:
标签: java fuzzy-logic jfuzzylogic