0

FL プロジェクトに jFuzzyLogic ライブラリを使用しています。

service、room、food という 3 つの変数を持つ 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

また、次の 2 つのルールがあります (これらはすべてを網羅しているわけではありません)。

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 の結果を得ることができるはずです。

これは可能ですか?もしそうなら、どうすればいいですか?

4

1 に答える 1