ファジィ論理
ブール論理の論理演算 AND, OR, NOT に相当する演算がファジィ論理にもあり、例えば下記のように定義される。下記の定義はザデーのオリジナルの論文で定義されていたもので、ザデー演算子とも呼ばれる。ここで x と y はファジィ変数である。
NOT x = (1 - truth(x))
x AND y = minimum(truth(x), truth(y))
x OR y = maximum(truth(x), truth(y))
他の演算として、より言語的な「ヘッジ(hedges)」がある。これは、数式で表される集合の意味(例えば「寒い」)を修飾する「非常に」とか「いくぶん」といった副詞に相当するものである。
プログラミング言語での応用として、Prologは規則群のデータベースに論理問い合わせを行う構造になっていて、ファジィ論理との相性が良い。このようなプログラミングを論理プログラミングという。
short male = (1.3, 1.5]
medium male = (1.5, 1.8]
tall male = (1.8, 2.0]
giant male > 2.0 m
従って、真理値も二値ではなく、以下のような5値にする。
agree not = 0
agree little = 1
agree somewhat = 2
agree a lot = 3
agree fully = 4
クリスプ集合(二値)の場合、1.79メートルの身長の人は単に背が低いとされる。1.8メートルや2.25メートルの人は背が高いとされる。
なお上の記述では、性別を二値情報、すなわち既知で曖昧さのない情報とみなしている。対象の性別を外見などから判断する場合、もしくは間性の存在などを考慮する場合には、性別についてもファジィ値を導入し、規則の条件部を
IF male >= agree somewhat AND ...
のようにする必要がある。
ファジィ論理は洗濯機や冷蔵庫のような家電機器の制御に使われる。例えば洗濯機では、洗濯物の量や洗剤の濃度を調べて、洗濯槽の回転などを調整する。
基本的な応用の特徴として、連続値をいくつかの区分に分ける点が挙げられる。例えば、アンチロック・ブレーキ・システムでは温度を測定するが、温度をいくつかの区分に分け、それぞれにメンバシップ関数を定義し、ブレーキを適切に制御する。各関数は同じ温度に0から1までの真理値を割り当てる。これらの真理値を使って、ブレーキをどう制御すべきかを決定する。
上図では、cold、warm、hot という関数で温度の値をマッピングしている。ある温度には各関数に対応した3つの真理値がある。上図で縦線で示している温度を見てみると、3つの真理値(0.8、0.2、0)が対応し、それらを解釈すると「かなり冷たい」(青い矢印)、「やや暖かい」(黄色の矢印)、「熱くない」(赤い矢印)ということになる。
数学における変数は一般に数値を値とするが、ファジィ論理は非数値的な「言語学的変数」を使うことで規則や事実の表現が容易になるような分野にもよく応用される。
ここでいう「非数値的」「言語学的」という意味は、例えば速度といったような変数のような「確定的な値を持つような変数」ではない、という意味であって、実際のところ(ソシュールやチョムスキーらによるような)言語学的な何かがあるわけではない。具体例として「年齢」に対し「若い」、あるいはその反対の「高齢だ」という値は、結局のところ、「20歳」という実際の年齢に対して、「若い」は 0.8 という高い値になり、「高齢だ」は 0.05 という低い値になる、といったように、最終的には実数(数値)になるのである。言語学的変数の最大の利点は、主たる単語に修飾語を添えることでその意味を修正できる点であると主張される。修飾語は特定の関数と対応付けることができる。例えば、ザデーはメンバシップ関数の平方をとることを提案している。