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 つの入力の出力がどのセットに属するかを定義します ( INSUFFICIENT
、AVERAGE_SUFFICIENT
またはの可能性がありますSUFFICIENT
)。それが完了したら、非ファジー化プロセスに進む必要があります。ここで、私の理解が少し怪しくなります。
ルールを通過した後、出力の各セットに対してそれぞれ 3 つが得られます (基本的に、3 つの値が、3 つのSUFFICIENT
on SUFFICIENT_AVERAGE
、および 3 つのとして分類されますINSUFFICIENT
)。んで、どうする?これらの 9 つの出力はすべてセントロイド計算の一部になりますか? 3 つのセットすべての最大値を選択して、それらを重心の公式に投入しますか? (これは私がやったことですが、matlabと比較すると結果は機能しません)