3

Java でファジー論理システム全体を実装しましたが、非ファジー化プロセスで深刻な問題が発生しています。

私のコードでは、入力を時間と距離として定義し、出力は単に出力です。入力セットと出力セットを構築するすべての線形関数があるため、その任意の値にアクセスできます。

ファジー ルールは次のとおりです。

FuzzySet []outputs = new FuzzySet[9]; //these are the rules

outputs[0] = new FuzzySet(INSUFFICIENT, min(timeMap.get(BAD).getDegreeOfMembership(), distanceMap.get(BAD).getDegreeOfMembership()));
outputs[1] = new FuzzySet(AVERAGE_SUFICIENT, min(timeMap.get(AVERAGE).getDegreeOfMembership(), distanceMap.get(AVERAGE).getDegreeOfMembership()));
outputs[2] = new FuzzySet(SUFFICIENT, min(timeMap.get(GOOD).getDegreeOfMembership(), distanceMap.get(GOOD).getDegreeOfMembership()));
outputs[3] = new FuzzySet(AVERAGE_SUFICIENT, min(timeMap.get(GOOD).getDegreeOfMembership(), distanceMap.get(BAD).getDegreeOfMembership()));
outputs[4] = new FuzzySet(SUFFICIENT, min(timeMap.get(GOOD).getDegreeOfMembership(), distanceMap.get(AVERAGE).getDegreeOfMembership()));
outputs[5] = new FuzzySet(SUFFICIENT, min(timeMap.get(AVERAGE).getDegreeOfMembership(), distanceMap.get(GOOD).getDegreeOfMembership()));
outputs[6] = new FuzzySet(INSUFFICIENT, min(timeMap.get(AVERAGE).getDegreeOfMembership(), distanceMap.get(BAD).getDegreeOfMembership()));
outputs[7] = new FuzzySet(AVERAGE_SUFICIENT, min(timeMap.get(BAD).getDegreeOfMembership(), distanceMap.get(GOOD).getDegreeOfMembership()));
outputs[8] = new FuzzySet(INSUFFICIENT, min(timeMap.get(BAD).getDegreeOfMembership(), distanceMap.get(AVERAGE).getDegreeOfMembership()));

これらのルールのそれぞれで、最初に、これら 2 つの入力の出力がどのセットに属するかを定義します ( INSUFFICIENTAVERAGE_SUFFICIENTまたはの可能性がありますSUFFICIENT)。それが完了したら、非ファジー化プロセスに進む必要があります。ここで、私の理解が少し怪しくなります。

ルールを通過した後、出力の各セットに対してそれぞれ 3 つが得られます (基本的に、3 つの値が、3 つのSUFFICIENTon SUFFICIENT_AVERAGE、および 3 つのとして分類されますINSUFFICIENT)。んで、どうする?これらの 9 つの出力はすべてセントロイド計算の一部になりますか? 3 つのセットすべての最大値を選択して、それらを重心の公式に投入しますか? (これは私がやったことですが、matlabと比較すると結果は機能しません)

4

1 に答える 1

0

私は MATLAB の専門家ではありません (したがって、システムの構造について完全にはわかりません) が、INSUFFICIENT、AVERAGE_SUFFICIENT、および SUFFICIENT が結論のファジー セットであると仮定すると、結論セットごとに 1 つのルールだけを気にする必要があります。 : 最高のメンバーシップ値を与えるもの。これは、通常、同じ結論セットを参照するルールは、OR 演算 (論理和) と見なすことができるためです。つまり、「IF ルール 1 OR ルール 2 OR ...」です。これにより、INSUFFICIENT、AVERAGE_SUFFICIENT、および SUFFICIENT のそれぞれに 1 つずつ、3 つの (変更された) membershp 関数が残ります。これらを足し合わせて(重ねて?)、結果の複合曲線の下の領域の重心を計算します。

ただし、私の経験では、これには少し時間がかかる場合があります。したがって、私はしばしば「ショートカット」を使用します。MF の最大値の加重平均を計算します (菅野のアプローチと同様)。私が理解しているように、あなたはすでにこれを行っていますが、9つのルールすべてについてですよね? ショートカットは、メンバーシップ関数が単純 (三角形または台形) で、歪んでいない (対称) 場合に特に効果的です。

お役に立てれば。(これはかなり古い質問ですが、まだ答えられていないので...)

于 2014-12-18T10:27:33.003 に答える