私は学校でいくつかのAIアルゴリズムを使用していますが、人々はファジーロジックという言葉を使用して、いくつかのケースで解決できる状況を説明しています。本に戻ると、状態がオンからオフになる代わりに、それが対角線であり、何かが両方の状態にあるが、異なる「レベル」にある可能性があることについて読んだだけです。
ウィキペディアのエントリといくつかのチュートリアル、さらには「ファジーロジックを使用する」プログラムされたもの(エッジ検出器と1輪の自己制御ロボット)を読みましたが、理論からコードへの移行は非常に混乱しています。 。あなたにとって、それほど複雑ではない定義では、ファジー論理とは何ですか?
ファジーロジックは、状態メンバーシップが基本的に、int 0または1ではなく範囲0..1のfloatであるロジックです。そこから得られるマイレージは、たとえば、制御システムで行った変更などです。単純なバイナリロジックで得られるものよりも、自然に微調整されています。
例としては、アクティブなTCP接続に基づいてシステムアクティビティを抑制するロジックがあります。「少し多すぎる」TCPマシン上の接続を次のように定義するとします。 1000および「多すぎる」2000。いつでも、システムの「多すぎるTCP接続」状態は0(<= 1000)から1(> = 2000))になります。 、これは、使用可能なスロットルメカニズムを適用する際の係数として使用できます。これは、「多すぎる」を判断して完全にスロットルする方法、または「あまりにも多くない」を判断する方法しか知らない単純なバイナリロジックよりも、システムの動作に対してはるかに寛容で応答性があります。多くの」、そしてまったくスロットルしません。
(変更された)回答に追加したいのですが、ファジーロジックを視覚化する良い方法は次のとおりです。
従来、バイナリロジックでは、メンバーシップ関数がtrueまたはfalseのグラフがありますが、ファジーロジックシステムでは、メンバーシップ関数はそうではありません。
1 | | /\ |/\ |/\ 0 |/\ ------------ a b c d
関数が「ピーナッツが好き」であると少しの間仮定します
a。ピーナッツが好きです b。ピーナッツが本当に好きです c。ちょっとピーナッツが好きです d。ピーナッツが好きではありません
関数自体は三角形である必要はなく、多くの場合そうではありません(アスキーアートを使用すると簡単になります)。
ファジーsystemには、これらの多くが含まれている可能性があり、次のように重複しているものもあります(反対の場合もあります)。
1 | A B |/\/\ A =ピーナッツが好き |/\/\ B =ピーナッツが好きではない |//\\ 0 |//\\ ------------ a b c d
つまり、cは「ピーナッツが好き、ちょっとピーナッツは嫌い」、dは「ピーナッツが本当に嫌い」です。
そして、あなたはその情報に基づいてそれに応じてプログラムすることができます。
これが視覚的な学習者に役立つことを願っています。
ファジー論理の最良の定義は、その発明者Lotfi Zadehによって与えられます。
「ファジー論理とは、人間が問題を解決するのと同じようにコンピューターに問題を表現することを意味します。ファジー論理の本質は、すべてが程度の問題であるということです。」
人間が解決する方法に似たコンピューターで問題を解決することの意味は、バスケットボールの試合の簡単な例で簡単に説明できます。プレーヤーが最初に別のプレーヤーを守りたい場合、彼は自分の身長とプレースキルの高さを考慮する必要があります。ガードしたいプレーヤーが背が高く、彼に比べて非常に遅いプレーをしている場合、彼は本能を使用して、彼に不確実性があるため、そのプレーヤーをガードする必要があるかどうかを検討します。この例で重要な点は、プロパティがプレーヤーに関連しており、ライバルプレーヤーの身長とプレースキルに程度があることです。ファジー論理は、この不確実な状況に対して決定論的な方法を提供します。
ファジーロジックを処理するためのいくつかのステップがあります(図-1)。これらの手順は次のとおりです。最初に、鮮明な入力がファジー入力に変換されるファジー化、次にこれらの入力がファジールールで処理されてファジー出力が作成され、最後に、ファジーロジックのように結果の次数が異なる非ファジー化が行われます。
図1-ファジープロセスステップ(David M. Bourg P.192)
ファジープロセスステップを例示するために、前のバスケットボールゲームの状況を使用することができます。例で述べたように、ライバルのプレーヤーは1.87メートルと背が高く、これは私たちのプレーヤーに比べてかなり高く、3 m/sでドリブルできます。これは私たちのプレーヤーに比べて遅いです。これらのデータに加えて、次のようなファジールールと呼ばれるルールを検討する必要があります。
if player is short but not fast then guard,
if player is fast but not short then don’t guard
If player is tall then don’t guard
If player is average tall and average fast guard
図2 –身長
図3-どのくらいの速さ
ルールと入力データに従って、出力は次のようなファジーシステムによって作成されます。ガードの程度は0.7、時々ガードの程度は0.4、決してガードの程度は0.2です。
図4-出力ファジーセット
最後のステップで、defuzzicationは、鮮明な出力を作成するために使用しています。これは、プレーヤーを保護するために使用する必要のあるエネルギーを決定する数値です。ゲーム。重心は、出力を作成するための一般的な方法です。このフェーズでは、平均点を計算するための重みは完全に実装に依存します。このアプリケーションでは、ガードするかしないかに高い重みを与えるが、時々ガードするために低い重みを与えると見なされます。 (David M. Bourg、2004)
図5-ファジー出力(David M. Bourg P.204)
Output = [0.7 * (-10) + 0.4 * 1 + 0.2 * 10] / (0.7 + 0.4 + 0.2) ≈ -3.5
その結果、ファジーロジックは、不確実性の下で決定を下し、決定の程度を見つけるために使用しています。ファジー論理の問題は、入力の数が増えると、ルールの数が指数関数的に増えることです。
詳細とゲームでのその可能なアプリケーションについては、私は小さな記事を書きました これをチェックしてください
カオスの答えから構築するために、形式的な論理は、文を評価にマッピングする帰納的に定義されたセットに他なりません。少なくとも、それはモデル理論家が論理について考える方法です。センテンスブール論理の場合:
(basis clause) For all A, v(A) in {0,1}
(iterative) For the following connectives,
v(!A) = 1 - v(A)
v(A & B) = min{v(A), v(B)}
v(A | B) = max{v(A), v(B)}
(closure) All sentences in a boolean sentential logic are evaluated per above.
ファジー論理の変更は、帰納的に定義されます。
(basis clause) For all A, v(A) between [0,1]
(iterative) For the following connectives,
v(!A) = 1 - v(A)
v(A & B) = min{v(A), v(B)}
v(A | B) = max{v(A), v(B)}
(closure) All sentences in a fuzzy sentential logic are evaluated per above.
基礎となるロジックの唯一の違いは、文の「真理値」が0.5であると評価する権限であることに注意してください。ファジー論理モデルの重要な質問は、真実の満足度を考慮したしきい値です。これは、次のように尋ねることです。評価v(A)の場合、どの値Dの場合、v(A)> Dは、Aが満たされていることを意味します。
ファジー論理のような非古典論理についてもっと知りたい場合は、次のいずれかをお勧めします 非古典論理の概要:IfからIs または 可能性とパラドックス
私のコーダーハットを元に戻すと、ファジーロジックは決定不能になる傾向があるため、実際のプログラミングでのファジーロジックの使用には注意が必要です。多分それは少しの利益のためにあまりにも複雑です。たとえば、超評価ロジックは、プログラムモデルのあいまいさを助けるのにうまくいくかもしれません。あるいは、確率で十分かもしれません。要するに、私はドメインモデルがファジー論理と一致することを確信する必要があります。
たぶん、例は利点が何であるかを明らかにします:
サーモスタットを作成し、24度にしたいとします。
これは、ブール論理を使用して実装する方法です。
このようなシステムはたまに24度になるだけで、非常に非効率的です。
さて、ファジーロジックを使用すると、次のようになります。
このシステムは常に24度前後になり、1回だけで、たまにわずかな調整を行います。また、エネルギー効率も向上します。
さて、あなたは バート・コスコ 、「建国の父」の一人の作品を読むことができました。 ' Fuzzy Thinking:The New Science of Fuzzy Logic ' 1994年のものは読みやすいです(そしてAmazonからかなり安く中古で入手できます)。どうやら、彼は2006年からの新しい本 ' Noise 'を持っており、これも非常に親しみやすいものです。
基本的には(私の言い換えでは、これらの本の最初の本を数年間読んでいませんでした)、ファジーロジックは、何かがおそらく10%涼しく、50%暖かく、10%暑く、異なる世界にどう対処するかについてです。さまざまな状態がどの程度真実であるかについて決定を下すことができます(いいえ、それらのパーセンテージが100%にならないのは完全に偶然ではありませんでしたが、必要に応じて修正を受け入れます)。
ファジー論理洗濯機 の助けを借りて、非常に良い説明。
コンセプトからコードに移行するのが難しいというあなたの意味を知っています。 Linuxシステムでsysinfoと/ procの値を調べ、0から10までの数値を考え出すスコアリングシステムを作成しています。10は絶対的に最悪です。簡単な例:
3つの負荷平均(1、5、15分)があり、(少なくとも)3つの可能な状態、良い、悪い、悪いの状態があります。それを拡張すると、平均ごとに6つの可能な状態があり、先ほど述べた3つに「約」を追加できます。それでも、18の可能性すべての結果は、スコアから1つしか差し引くことができません。スワップが消費された状態でそれを繰り返し、実際のVM割り当てられた(コミットされた)メモリやその他のもの..そして条件付きスパゲッティの大きなボウルが1つあります:)
それは芸術であると同時にその定義であり、意思決定プロセスをどのように実装するかは、パラダイム自体よりも常に興味深いものです。一方、ブール値の世界では、かなりカットされて乾燥しています。
Load1 <2が1を差し引くかどうかを言うのは非常に簡単ですが、まったく正確ではありません。
ある一連の状況を評価するときに行うことを実行し、コードを読みやすくするようにプログラムに教えることができれば、ファジー論理の良い例を実装したことになります。
ファジーロジックは、シンプルで小型の組み込みマイクロコントローラーから、大規模でネットワーク化されたマルチチャネルPCまたはワークステーションベースのデータ収集および制御システムに至るまでのシステムでの実装に役立つ問題解決方法です。ハードウェア、ソフトウェア、または両方の組み合わせで実装できます。ファジーロジックは、あいまい、あいまい、不正確、ノイズ、または欠落している入力情報に基づいて明確な結論に到達するための簡単な方法を提供します。問題を制御するためのファジー論理アプローチは、人が意思決定を行う方法を模倣しますが、はるかに高速です。
ファジー論理は、エキスパートシステムやその他の人工知能アプリケーションで特に有用であることが証明されています。また、一部のスペルチェッカーでは、スペルミスのある単語を置き換える可能性のある単語のリストを提案するために使用されます。
詳細については、 http://en.wikipedia.org/wiki/Fuzzy_logic をご覧ください。
以下は、一種の経験的な答えです。
単純な(おそらく単純な答え)というのは、「ファジーロジック」は、真の真/偽、または1/0以外の値を返すロジックのことです。これには多くのバリエーションがあり、ドメイン固有である傾向があります。
たとえば、私の前の人生では、当時の一般的な「ブール検索」ではなく、「コンテンツ類似性検索」を使用する検索エンジンを使用していました。私たちの類似性システムは、クエリとドキュメントを表す重み付き属性ベクトルのコサイン係数を使用し、0..1の範囲の値を生成しました。ユーザーは、クエリベクトルを望ましいドキュメントの方向にシフトするために使用される「関連性フィードバック」を提供します。これは、特定のAIシステムで行われるトレーニングにいくらか関連しており、試運転の結果に対してロジックが「報われる」または「罰せられる」ことになります。
現在、Netflixは、自社にとってより良い提案アルゴリズムを見つけるための競争を行っています。 http://www.netflixprize.com/ を参照してください。事実上、すべてのアルゴリズムは「ファジー論理」として特徴付けることができます。
ファジー論理は、人間のような考え方に基づいてアルゴリズムを計算しています。これは、入力変数が多数ある場合に特に役立ちます。 2つの変数入力用の1つのオンラインファジー論理計算機が与えられます:
http://www.cirvirlab.com/simulation/fuzzy_logic_calculator.php