IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Autonomic computing  >

ABLE (Agent Building and Learning Environment) の機能と各側面

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

原文はこちら

原文はこちら


レベル: 初級

Mark Meyer (geeky2@gte.net), Software Developer, TravelClick Inc.

2004年 10月 06日

ABLE (Agent Building and Learning Environment) の主な機能と各側面について学びましょう。この記事では、ABLEのアーキテクチャーや、広範囲のアプリケーションで使用されるデータbeanやルールbean、学習beanなどの扱い方を学びます。この記事を読むことで、基本的なABLE要素を確実に理解できるはずです。またABLE Examples Projectの中でサンプルとして表現されている、これら要素のそれぞれに対して作業する準備ができたことになります。

最初に

ABLE(Agent Building and Learning Environment)は、Java言語ベースのフレームワークであり、コンポーネント・ライブラリーであり、機械学習や推論を使用してインテリジェント・エージェントを構築するための生産性向上ツールです。ABLEアーキテクチャーは、JavaBeansコンポーネントを使用して、ビジュアル・エディターで操作可能な、そして再利用可能なソフトウェア・コンポーネントを提供します。

ABLEのコンポーネント・ライブラリーには、ファイルやデータベースに対してデータを読み書きするためのデータbeanや、機械学習bean、それにスクリプトや推論用のルールセットbeanなどが含まれています。ルールセットbeanの定義言語はJava言語と非常に似ており、ABLEルールを初めて使う開発者にも違和感の無いものになっています。

beanコンポーネントは、特定な機能を行うインテリジェント・エージェントを構築するために使われています。エージェントというのは、アクティブで持続的なコンポーネントであり、知覚し、推論し、行動し、そしてコミュニケーションをすることができます。ABLEのエージェント・ライブラリーには、予測やクラス判別、そしてクラスター化のためのエージェントが含まれています。

ABLEアーキテクチャーでは、イベント・リスナーあるいはデータ・バッファーと呼ばれる共有配列を使って、bean間でのデータ交換を提供しています。また機械学習beanとルールセットbeanを組み合わせて使うことで、ハイブリッド・エージェントを構成することができます。ABLEには、FIPA 98に基づく分散エージェント用のプラットフォームが含まれています(FIPA 98はセキュリティーや永続性、そしてライフサイクルの管理を提供する実装です。)

ABLEパッケージにはまた、ABLEルールセットやエージェントの開発やデバッグを助けるためのビルダー・ツールであるABLE RuleSetエディターと、ABLE Agentエディターが用意されています。また、様々なエージェントやルール言語の機能の使い方を示す、数多くのサンプルが配布されています。ドキュメンテーションには、APIレベルのJavaDoc、Swingベースのエディターを使うためのチュートリアル、そしてルール言語用の解説書などが含まれています。

IBM®はオートノミック・コンピューティングの構想を発表した際に、核となる技術として4つを指定しました。ABLEはその一つであり、複合解析に使用するものです。

ABLEは2000年5月から、IBMのalphaWorksプログラムを通して利用できるようになっており、そこからダウンロードされる様々な技術の中で、常に上位を保っています。ABLEは次のような、広範なアプリケーションに応用することができます。

  • オートノミック・コンピューティング
  • ビジネス・ルール
  • クラス判別、クラスター化、予測などのデータ・マイニング用途
  • 診断
  • 計画
  • ポリシー管理
  • リソース分散
  • ソフトウェア管理とインストール

箱の中の箱の中の箱

ABLEでは、まずその基本的なアーキテクチャーを理解することが重要です。すべてのABLE beanは、AbleBeanインターフェースを実装しています。すべてのABLEエージェントはAbleAgentインターフェースを実装しています。AbleAgentインターフェースは、AbleBeanのサブ・インターフェースです。つまりABLE beanとABLEエージェントとの間には反射的な関係(reflexive relationship)があるということです。この反射的な関係を現実的に言えば、すべてのABLEエージェントは、(実質的に)ABLE beanである、ということでです。つまりABLEエージェントが他のABLEエージェントのコンテナーとして動作できるようになっており、箱の中の箱の中の箱、というシナリオになっているのです。

ここでは簡潔にするため、そして一貫性を保つため、ABLEエージェントを参照する時にはAbleAgentという言葉を使うことにします。またABLE beanを参照する時には、AbleBeanを使います。




上に戻る


Beanとエージェント

ABLEのアーキテクチャーは図1に示すように、AbleAgentsとAbleBeansという概念に基づいています。


図1. ABLEエージェント・フレームワークのクラスとインターフェース
図1. ABLEエージェント・フレームワークのクラスとインターフェース

AbleBeansは基本的な構成ブロックであり、AbleAgentsはAbleBeansを含むことができると同時に、AbleAgents自身がAbleBeansです。ABLEには核となる14のAbleBeansが同梱されていますが、これらは大まかに次の3種類に分類することができます。




上に戻る


データbean

データbeanはエージェントに追加されます。そしてデータはbeanとエージェントとの間で、データ・バッファー、イベント・リスナー、あるいはプロパティー・チェンジ・リスナーという3つのいずれかとして渡されます。一般的には、ABLE bean間でのデータやバッファーの接続が、ABLEエージェント内でのデータ・パスを定義します。すべてのAbleBeansは、ONまたはOFFいずれかのデータ・フロー状態を持ちます。

AbleBeansは複数の入力データ・フロー接続を持つことができますが、一度に一つの入力接続しかアクティブになりません。一つの入力に対するデータ・フローがONになると、他の全入力はOFFになります。これは学習beanに対して教える時に、一つのソースから別のソースに入力を切り換える時に便利な機能です。一つのAbleBeanは、同時に複数の出力接続を通してデータを渡すことができます

AbleBeansはまた、イベント・リスナー・コネクションでデータを交換することもできますが、イベント・コネクションは普通、エージェントにデータを提供するための方法として使われます。イベント処理は同期の場合も非同期の場合もあり、また非同期スレッドも、スリープ・インターバルを持つタイマーとして使うことができます。イベントは、

  • 会話に使われ、
  • アクションを埋め込むことができ、
  • 応答対象のデータを含むことができ、
  • トランザクションとして使うことができます。

一部のbeanやエージェントは、プロパティー変更イベントを送信します。これは、リスンしているオブジェクトにデータを渡すための第3の方法です。

すべてのAbleBeansはシリアル化できるので、必要に応じて保存したり回復したりすることができ、また、RMIに基づくABLEエージェントのプラットフォームで使うこともできます。表1はデータ関連のAbleBeansを示します。

表1. データ関連のAbleBeans

AbleImportテキスト・ファイルを読むAbleBeanであり、データ・バッファーまたはイベント・リスナーによって、他のbeanにデータを提供します。
AbleDBImportこのクラスによって、AbleBeansはJDBCインターフェースを使ってデータベースのデータにアクセスできるようになります。AbleDBImportはデータベース・テーブルからデータを読み、そのレコードをデータ・バッファーまたはイベント・リスナーに書き込みます。
AbleFilterデータ変換と倍率機能を提供するAbleBeanであり、テキストから数値へデータ変換するために、機械学習beanで頻繁に使われます。
AbleExportこのクラスは外部テキスト・ファイルにデータを書き出します。
AbleDBExportこのクラスによって、AbleBeansはJDBCインターフェースを使ってデータベース・テーブルにデータを書き込めるようになります。
AbleTimeSeriesFilterAbleNeuralPredictionAgentと共に使うことだけを意図した、非常に特定なAbleBeanクラス。一連のinputBuffersを収集するので、モデルは一つ以上の周期のデータを使って計算を行うことができます。



上に戻る


ルール・エンジンのタイプ

AbleBeansの2番目、3番目のカテゴリー(ルールbeanと学習bean)について議論する前に、ABLEアーキテクチャーがサポートする、ルール・エンジンのタイプについて簡単に触れておくことにします。ルール・エンジンについて知っておくことで、ルールbeanと学習beanの理解が大きく深まるのです。

一般的にルール・エンジンは、単純に一連のルールを処理します。ルールの中で一番単純な形式は、if/thenという条件です。ABLEには、単純な手続き的制御を使うルール・エンジンと、推論(inferencing)を行うチェーニング・エンジン(chaining engines)があります。推論エンジンというのは、一連の推論ルールに基づいて既知の事実から新しい事実を推論する、任意のプログラムです。推論ルールは単純なものも、非常に複雑なものもあります。推論ルールとは何かを説明するために、古典的な例、つまりmodus ponens(前件肯定の三段論法)、または分離則という名の命題の推論規則を使うことにします。これは次のように言うことができます。


リスト1. modus ponens(前件肯定の三段論法)
                
p -> q
p
--
q

自然言語を使うと、上記は次のように記述することができます。


リスト2. 自然言語
                
If (p implies q) = true and p = true 
then q is true

If文はしばしば、左側または先行文と呼ばれ、then文は右側のアクションまたは帰結文(consequent clause)と呼ばれます。先行文が正しければ、そのルールは実行せよ(fire)と言われたことになり、帰結文が処理されます。

すべてのルール・エンジンは、既知となっている一連の事実や入力を与えられると、新しい事実や結果を引き出します。ただし、ルール・エンジンにはそれぞれ微妙な差があるため、あるタイプの問題には特定なタイプのエンジンがより適切、という場合があります。ABLEでは、いくつか異なるスタイルのルール・エンジンを用意しています。

プロシージャー型
Javaメソッドと同じように、先頭から最後へとルールを処理します。あるいは、処理のシーケンスを決めるルール優先順位が割り当てられています。
前向き推論型(Forward chaining inferencing)
ルールを評価して実行するシーケンスを選択するための戦略を持ち、実行するルールが無くなるまで処理を続けます。
後向き推論型(Backward chaining inferencing)
同じく、処理ルールを選択するための特別な戦略を持ちますが、特定な目標変数に対する値を得るための方法を、複数見つけるようにルールを処理します。目標値が見つかると、すべてのルールが評価されたかどうかに関わらず、処理は終了します。

ABLEは表2に示すように、それぞれ異なる10のルール・エンジンをサポートしています。これらは、単純でプロシージャー型のif/then/elseスクリプトや判断ツリー型のものから、前方あるいは後方チェーンを行う推論エンジン、また述部論理やファジー論理、作業メモリー内でのパターン一致まで使う推論エンジンまで、様々です。最も新しいエンジンは、計画とポリシー・アプリケーション専用です。単純なルール・フォーマットは大部分のエンジンがサポートしていますが、一部のエンジンは非常に特化しており、独自のルール構文を持っています。単純なエンジンを使うルールセットは、大きな変更を必要とせずにそのまま、より強力なエンジンに変換することができます。ABLEはまた、皆さんが独自のルール・エンジンを提供することもできるようになっています。

表2. ルール・エンジン

AbleBackwardChainInferenceEngine後向き推論エンジン
AbleForwardChainInferenceEngine前向き推論エンジン
AbleDecisionTreeEngine判断ツリー・エンジン
AbleFuzzyInferenceEngineファジー推論エンジン
AblePatternMatchLiteEngineパターン一致エンジン
AblePatternMatchEngineReteネットワークによるパターン一致エンジン
AblePlanningEngine計画エンジン
AblePolicyEngineポリシー・エンジン
AblePredicateEngine述部エンジン
AbleScriptEngineスクリプト・エンジン

プロシージャー型ルール・エンジン

プロシージャー型エンジンは、より単純なルールをサポートしており、アプリケーション・プログラムに対して外部論理を適用する(ルールを使う大きな理由です)ことが簡単にできるようになっています。これによって、プログラマーではない人でも、そして再コンパイルせずに変更が行えるようになります。

判断ツリー・エンジン
最も単純なルール・エンジンであり、最初のルールを実行すると処理を終了するという、プロシージャー型の制御戦略を持っています。判断ツリー・エンジンはしばしば、ビジネス・ルールの中、あるいはヘルプデスク環境などの問題拡大(problem escalation)シナリオの中で使われます。
ポリシー・エンジン
アクションを起こす前に前提条件を評価し、また、ポリシー管理用に調整された特別なルール構文と意味体系を持っています。ルール優先順位とルール・シーケンスを使って、ルールを実行する順序を制御します。
スクリプト・エンジン
単純なプロシージャー型制御戦略であり、ルールが現れる順に、そのルールを一度だけ処理します。

推論ルール・エンジン

推論エンジンは特別な制御戦略や特別なルール・フォーマットをサポートし、大量のルールやオブジェクトにも対応します。ABLEの設計では、必要な機能に応じて、単純なプロシージャー型エンジンから真の推論エンジンにまで成長できるようになっています。

後向き推論エンジン
この推論エンジンはゴール駆動の手法、つまりゴールをサブ・ゴールにまで再帰的に分解し、新しい事実を学んでそれらを証明しながらゴールに達するまで続ける、という手法を使ってゴールを証明します。後向き推論エンジンでは、ルールを処理する前にゴールを定義する必要があります。つまり、何を知るべきかを知る必要がある、ということです!
前向き推論エンジン
この推論エンジンでは、データ駆動の手法を使って、既知の一連の事実から新しい事実を推論します。新しい事実が、新しいデータと条件が一致する新しいルールをトリガーするかも知れません。するとこれらのルールは、それぞれのアクションを実行します。このアクションは、さらなるルールをトリガーするかも知れませんし、同じルールのいくつかを再度トリガーするかも知れません。前向き推論エンジンは、実行できるルールが無くなるまで、一連のif/thenルールを繰り返し処理します。
ファジー論理エンジン
このエンジンを使うと、変数は、真の程度が様々に異なる、幅のある値を取ることができます。またこのエンジンでは、文に対する真理値を計算する表現によって、こうした変数を組み合わせるための数学的方法を定義しています。ファジー・ルールは並列に評価され、前方チェーン方式によって、最大でも一度だけ実行されます。
パターン一致エンジン
パターン一致エンジンは前向き推論エンジンであり、作業メモリーを使って、事実と状態情報を保存します。ルール・アクション内部では、作業メモリー中の事実は必要に応じて変更され、追加され、削除されます。真であると評価するルールが無くなるまで、ルールは実行を続けます。ルールは、まず優先度に基づいて、そして優先順位が同じ場合には、シーケンスを持つ先行文での事実の数の基づいて選択され、評価されます。
Reteネットワークによるパターン一致エンジン
Reteネットワークによるパターン一致のエンジンはパターン一致エンジンと似ていますが、部分一致を捉えるReteネットワークも構築します。これによって、数多くのルールや変数を持つルールセットのパフォーマンスが改善されます。
計画エンジン
特別目的のエンジンであり、特定なゴールを達成するためのアクション・シーケンスを計画するため、そしてその計画を実行するための両方に使われます。このエンジンは述部(predicates)を使って状態を表現し、またJavaクラスの階層構造を使って、タイプについての推論を行います。
述部エンジン
この、事実を推論する後向き推論エンジンは、特定なゴールに到達する必要があり、またProlog形式のルールで述語論理を使います。推論エンジンは、ABLEで提供されている他のバック・チェーン・エンジンとは異なり、一つ以上の解決方法が可能な場合に複数の解決方法を提供することができます。




上に戻る


ABLEルール

ABLEでは組み込みのルール言語(ARL)を使って、ルール・エンジンが処理すべきルールを作ることができます。ルールを使うことによって、ビジネス・ルールやポリシーをプログラミング論理から分離できるようになります。変更はコンパイルを行う必要はなく、また必ずしもプログラマーが行う必要もありません。では、ABLEがどのようにルールを表現するかを、与えられたエンジンの文脈の中で使われるところを見ながら探ってみましょう。

私はデータbeanの中で、ルールと事実に関して簡単に触れました。ABLEルールをもっと正式に定義するものが宣言的ステートメント、またはナレッジ表現です。ABLEで最も一般的なルール表現は、if-thenルールです。リスト3は、ABLEに同梱されている、Animal.arlというサンプル・ファイルから取った例です。


リスト3. 一般的なif-then表現
                
: If (swims == "no" and color == "black")
		result = "panther";

管理しやすい塊として個々のルールをグループ分けできるように、ABLEではルール・ブロックという概念を導入しています。各ルール・ブロックは、それに関連して、ブロック内でのルールを解釈するルール・エンジンを持ちます。これによって、例えば前向き推論エンジンと後向き推論エンジンなど、プロシージャー型スクリプトでも推論型でも、複数のエンジンを取り混ぜることができます。皆さんがCなどのプロシージャー型プログラミング言語で慣れているものとは異なり、与えられたルール・エンジンは、独自のプロセス制御戦略を実装します。その制御戦略を理解しない限り、ルール実行の順序を予測することはできません。この点を除けば、ルール・ブロックはJavaメソッドと似ており、パラメーターを使ったり結果を戻したりする機能を持っています。

高位レベルでは、ABLEはAbleBeanクラス、AbleRuleSetによってカプセル化された、ルールセットの概念を使います。ルールセットは、個々のルール仕様やルール・ブロック、さらにはデータまで含むことができます。ルールセットは、以下を行います。

  • データbeanをルールセットに直接埋め込んで、データを読み書きする
  • 別のbeanの出力バッファーから、あるいはイベントからデータを受け取る
  • 別のbeanの入力バッファーにデータを送る、または別のリスナーにイベントを送る

リスト4は、新しいルールセットの種となるHelloWorldルールセットを示しています。スクリプト・ルール・エンジンを使う、ルール・ブロック・プロセスに注意してください。


リスト4. 新しいルールセットの種となるHelloWorldルールセット
                
ruleset RuleSet_0 {
  variables {
    String helloWorld = new String("Able rules!");  } inputs{};
  outputs{};
  void process() using Script {
    Rule0: println(helloWorld);
  }
}

先に書いた通り、(.arlエクステンションで指定される)ルール・ファイル、例えばAnimal.arlなどは、実際はJava言語風の構文を持つテキスト・ファイルです。ただしABLEでは第2のオプションとして、ルールやルールブロック、そしてルールセットを、ABLEルールセットXMLスキーマ定義に準拠するXML文書として定義できるようになっています。ルールセットはまた、AbleRuleSet APIを使用して作成、修正することができます。ABLEルールセットは全てのAbleBeansと同じように、JavaBeanコンポーネントとしてシリアル化することができます。

表3. AbleRuleSet
AbleRuleSetこのクラスは、ARLルールセットのランタイム表現であるAbleRuleSet beanを定義します。ルールセット・オブジェクトは、変数やルール、それにオプションとしてのユーザー定義ファンクションなどの集合です。どれも、問題を解決するために、一つまたはそれ以上のABLE推論エンジンが使用するものです。

ARLは他にも、この紹介記事では書ききれないほどの機能を持っています。非常に幅広いサンプル・ルールセットが用意されており、AbleRecommendations.arlルールセット(参考文献をご覧ください)も試すことができます。このルールセットは、developerWorksで今後紹介する予定の記事のために作られたサンプルです。その他、ARL(Able Rule Language)の機能としては次のようなものがあります。

内部クラス
Java内部クラスのパターンに似て作られていますが、むしろC言語のstructに似ています。
ルール優先順位
ルール実行のシーケンスを決めるために使われるルール修飾子。
ルール・メタデータ
時間周期やブール表現を使って、ルールが評価されないようにすることができます。
表現
複雑な文、あるいは頻繁に使われる文を、インライン手法に似た、単純な、自然言語風の表現として定義する方法。この方法を使うことで、表現が一つの場所にのみ存在にするようにでき、またその表現を使うルールが読みやすくなります。
テンプレート
パターンから、ルールセットとルールの両方を生成するために使われます。
OCL(Object Constraint Language:オブジェクト制約言語)集合
Object Management Group が定義する振る舞いと用語によって、何グループものオブジェクトを操作します。詳細については、ABLE Rule Language User's Guide and Referenceを見てください(参考文献)。



上に戻る


学習beanは面白い

起こり得るすべての条件の下で、アプリケーションに対して必要なルールを全て表現することができるでしょうか? もしその知識があれば、明示的に定義されたルールで、明快な判断を下すことができます。残念ながら、ルール・ベースの機構にのみ頼ると、もろけやすく柔軟性に欠ける推論環境になってしまう可能性があります。皆さんは顧客やプロセス、それに製品などに関するデータは持ちながら、その量や複雑さ、データ値の間の関係を表現する困難さに圧倒されていませんか?

ここにニューラル・ネットワーク(特定なABLE学習beanによって具体化されます)が登場するのです。ニューラル・ネットワークは人間の脳とその認知機能を、機械を使ってモデル化しようという試みです。ルールとは対照的に、ニューラル・ネットワークは入力に順応、あるいは入力から学習しますが、学習した知識は多くの場合、明示化するのは困難です。ABLEの開発者達は、シンボルによるルール・ベースの推論と、部分的にシンボルに基づくニューラル・ネットワークや他の機械学習アルゴリズムとを、継ぎ目無く取り混ぜる機能を採り入れました。アプリケーションはこうした2つの推論手法を取り混ぜることによって、可能な場合にはルールを使ってシンボル的に推論ができ、また決定に際して、履歴データを含むデータ駆動の手法を使うことができます。

では、学習beanの機能をいつ利用すべきかはどのようにして分かるのでしょう? アプリケーションが自律的かつ適応型であることを強く要求する場合には、学習beanが切り札になります。AbleRuleSetまたは学習beanが必要かどうかを判断するためには、既知のルールやゴール、データなどのセットに対してシステムがどの程度容易にマップできるか、という点も、もう一つの基準になります。この作業が重荷になり、また学習beanを訓練するために必要なデータがあるという場合には、ABLEの学習beanの一つが役に立つでしょう。

学習beanの、もう一つのアプリケーションがデータ・マイニングです。ABLEのデータbeanと学習beanを組み合わせて、ニューラル分類やニューラル・クラスタリング、そしてニューラル予測エージェント等が作られており、軽量のデータ・マイニングに使用することができます。

ABLEには、表4に示すように、7つの学習beanが同梱されています。

表4. 学習bean
AbleBackPropagation Backpropagation
バック・プロパゲーション・ニューラル・ネットワークは、学習期間中の重み付けを調整するために使われるメソッドの名前から付けられています。この学習beanは非常に汎用のアルゴリズムとして、作成中のプロセスからの出力を予測したり、オブジェクトをその記述から識別したりといった、予測やクラス判別問題に対するターゲット・データから学ぶことができます。また一つ以上の予測値を計算することができます。使い方としては、不正検出や株式市場の予測などがあります。
AbleDecisionTree DecisionTree
判断ツリーbeanはオブジェクトを分類するために使われ、植物型の識別に使われる、古典的な樹状型のキーを自動取得する方法です。情報理論を使って特徴を判断点にまで連続的につなぎ合わせ、またそれらの特徴の持ちうる値を使って、判断テキスト自体を形成します。
AbleNaiveBayes NaiveBayes
Naive Bayesは、以前見たことのあるオブジェクトの特徴から得た確率を使って、新しいオブジェクトを分類します。順次学習するbeanであり、現在は一般的にスパム・フィルターに使われています。
AbleRadialBasisFunctionNet RadialBasisFunctionNet
ラジアル・ベース・ファンクションbeanも、非常に汎用の学習beanであり、バック・プロパゲーションと似た状況で使用されます。予測されるデータの入力が非常に大きく変動する場合には、一般的にこちらを選んだ方が適切です。
AbleSelfOrganizingMap SelfOrganizingMap
データのプロファイリングに使われます。この学習beanは他のアルゴリズムとは異なり、管理されない学習手法です。つまり、このbeanが学習する対象となるデータは、ターゲットとなる値を含みません。何千ものレコードを持つデータ・ソースを与えると、マップが自動編成され、こうしたレコードを、必要な数だけのプロトタイプ・レコードにクラスター分けします(プロトタイプ・レコードはデータの全変化範囲を表しています)。ダイレクト・マーケティングなどで、特定なキャンペーンに対して反応しそうな顧客グループを選択するためによく使われます。
AbleTemporalDifferenceLearning TemporalDifferenceLearning
時系列予測用の、管理された学習アルゴリズムであり、様々な数の入力を連続的に使って、結果を判定します。他の管理された学習beanでも同じデータ・フォーマットを使って学習しますが、TDL用のデータは各シーケンスの始めと終わりを識別するために、タグ付けされている必要があります。
AbleKnn k Nearest Neighbors
不正検出やリスク・レベル割り当てなど、クラス判別問題に使われ、一つの値のみを計算します。比較的高速にデータから学習し、バック・プロパゲーションやその他の管理された学習手法よりも、訓練用データ・ソースを通過する回数が少なくて済みます。



上に戻る


ABLEとAME(Autonomic Management Engine)

Use autonomic computing for problem determinationという記事では、DB2®サーバーと、IBM WebSphere®サーバー上に置かれているWebアプリケーションとの間のリンクの実現性を監視するためにABLEとAMEを使っています。会社にとって収入を生む機会であるという、Web関連のアプリケーションが持つ重要性を考えれば、(何かがフェールした時に)速く正確な決断を下すことは、単に実用的なだけではなく、正に致命的な使命でもあるのです!

その記事では、ABLEは推論機能を提供し、AMEはイベント・モニターやフィルタリング、集約などに対する背景作業を提供しています。ABLEのスクリプト・エンジンやPatternMatchルール・エンジンは、AMEが問題を検出した時にABLE RuleSetsを処理するために使われています。その結果として、問題発生後何秒もしないうちに問題を特定できる、積極的な根本原因解析機能を持つオートノミック・マネージャーとなっています。これは、何かがフェールした時に取られる標準的な手法とは全く異なります。ごく普通の環境では、システム上の様々な場所に単純なハートビート機構が使われます。そのハートビートが停止した場合には、ヘルプデスクに対してeメールが送信されますが、ヘルプデスクは迅速に問題に対応できないかも知れないのです。




上に戻る


ABLEとIBM WebSphere Portal

WebSphere Portalのバージョン5では、インストール機構が再設計されています。変更の一つはABLEの述語推論エンジンが使われていることです。WebSphere Portalがインストールされている、本質的に異なる様々なOSに対しての依存性チェックを、この推論エンジンが行っています。WebSphere Portalで使われているルールセットでは、300以上の述語を定義しており、また550以上のルールを使っています。インストール手順が改善されたことによって、何日もかかったインストールが数時間にまで短縮されました。リスト5は、このアプリケーションで使われているProlog 形式のルールの一つを示しています。


リスト5. アプリケーションで使われているプロローグ形式のルール
                
LINX: get_disc_WAS_current_loc_and_versions("LIN", List_) :-
  get_disc_WAS_loc_and_versions("LIN", AList_),
  product(Product_),
  current_loc_and_versions(Product_, AList_, TList_),
  remove_WPCPR_was_instances(TList_, List_),
  cut()




上に戻る


ABLEとOS/400

IBM Supportはi5/OSオペレーティング・システムの中で、エージェント・アプリケーションを使って通信追跡の失敗を解析しています。ここではABLEの非同期処理とファジー推論エンジンを使うことで、サービス不能攻撃、伝送速度低下、断片化など、一般的な十数種類のTCP/IPフェールを検出します。適切な意味体系を持つファジーなセットによってファジーな変数を定義することで、フェールのタイプ分類ルールを非常に自然に表現することができます。これをリスト6に示します。


ReceivedMTUFrag3: if (receivedMTUFragmentationPacketPercentage is
likely and recvFrames is few) then MTUFragmentationReceiveConfidence 
is unlikely;

i5/OSにはまた、ABLEの上に構築されたエージェント管理コンソールが同梱されており、時間管理用のサンプル・エージェントが含まれています。




上に戻る


ABLE開発ツール

このセクションの目的は、ABLEエディターの使い方を長々と説明することではなく、ABLEに同梱されている様々なエディター・ツールを紹介することです。これらのツールはどれも非常に直感的なものですが、もし使い方がよく分からない時には、HTMLによるドキュメンテーションが役に立つでしょう。

ここでは全てのエディターには触れないことにします。というのは、現在ではEclipseベースのAgentエディター・プラグインよりも、SwingベースのAgentエディターの方が高機能なので、ほとんどの人がSwingベースのAgentエディターの方を使うと思われるためです。

ABLEには4つの開発ツール、つまりエディターが同梱されています。これらによってAbleBeansやAbleAgents、それにAbleRuleSetsなどを作ったりデバッグしたりする負荷が軽減されます。これらのうち2つは、ABLEの初期の頃に開発された、Swingベースのレガシー・アプリケーションです。他の2つのエディターはEclipseベースです。この記事では、SwingベースのAgentエディターとEclipseベースのRuleSetエディターのみに限定して説明することにします。

EclipseベースのRuleSetエディターはSwingベースのRuleSetエディターよりも優れているため、大部分の開発者が使っています。皆さんがJavaクラスやルールセットも同時に開発しているのであれば、Eclipseルールセット・エディターを使った方が簡単です。Eclipseルールセット・エディターを使えば、ルールセットの変更を構文解析する時に、Javaクラスに対する変更はロードされているからです。

EclipseベースのAgentエディターを改善する作業が、現在行われています。新たなEclipseベースのAgentエディターは、完成すればEclipse 3.0用となるでしょう。

ABLE 用の、SwingベースのAgentエディター

ABLEにはSwingベースのAgentエディターが同梱されており、ABLEのインストール・プロセスで作られる\binディレクトリーに詰め込まれています。非UNIX環境では、\bin\runnit.batファイルを使ってAgent Editorを呼び出します。UNIX環境では、\bin\runnit.shファイルを実行します。SwingベースのAgentエディターについては、HTMLドキュメンテーションにある、幾つかのチュートリアルで取り上げられています。

ABLEのディストリビューションにはまた、runplatform.batやrunplatform.sh、startplatform.batそれにstartplatform.shなどのファイルが同梱されています。startplatform.batとstartplatform.shコマンド・ファイルは、FIPA98仕様に基づいて、プラットフォーム・エージェント・サービス用のデーモン・プロセスを開始します。runplatform.batとrunplatform.shスクリプトがすることは、runnit.batやrunnit.shとほとんど同じですが、これらを使うことによってSwingベースのAgentエディターにタブが追加され、そこにプラットフォーム依存のエージェントが現れるようになります。

ABLE用の、SwingベースのAgentエディターでanimal.serのサンプルを開いたところを図2に示します。


図2. SwingベースのABLE Agentエディター
図2. SwingベースのABLE Agentエディター

ABLE用の、EclipseベースのRuleSetエディター

EclipseベースのRuleSetエディターは、Eclipseを開き、File > New > Other > AbleRuleSetを選択することで開始することができます。これを図3に示します。


図3. EclipseベースのRuleSetエディター
図3. EclipseベースのRuleSetエディター



上に戻る


ABLEをダウンロードする

ABLEのダウンロードは簡単です。図4に示すように、必要なものは全てIBM alphaWorksのAgent Building and Learning Environmentにあります。ABLEのダウンロード・ページまでナビゲートすると、6つのアーカイブ・ファイルがあります。そのうち2つはTarフォーマットであり、残りの4つはZipフォーマットです。どちらのアーカイブ・フォーマットを選んでも、それぞれマルチ・プラットフォームとなっています。


図4. ABLE用のIBM alphaWorksサイト
図4. ABLE用のIBM alphaWorksサイト



上に戻る


Eclipseで、ABLEのサンプル・プロジェクトをインストールする

Eclipseディストリビューションにはサンプルのプラグインが提供されており、これらの設定方法は下記の通りです。

  1. ableexamplessrc.zipを、eclipse/plugins/com.ibm.able.examplesディレクトリーからclipse/plugins/com.ibm.able.ui.ruleeditorディレクトリーにコピーします。これによってABLE 2.1.0のバグを回避します。
  2. New > Examples > Ableと進み、able examplesプロジェクトを選択します。
  3. プロジェクトのソース・ディレクトリーと出力ディレクトリーを設定するために、プロジェクト・プロパティーのページを開き、Java Build Pathに行きます。able 2.2.0に対して、ソース・フォルダーとしてsrcを入力します。Websphere Studio Application Developer Version 5.1を使っていない場合には、Application Developerのcom.ibm.etools.webserviceパッケージに依存する**/templates/ directoryは除外します。出力パスに\binをアペンドします。ABLE 2.1.0では、プロジェクト・ソースは図5のようになるはずです。
    図5. Javaビルド・パス
    図5. Javaビルド・パス
  4. JARファイルを含むようにECLIPSE_HOME変数を拡張することによって、外部JARファイルを追加します。これを図6に示します。
    図6. 外部JARファイルを追加する
    図6. 外部JARファイルを追加する
  5. OKを押すと、サンプル・プロジェクトはきれいにコンパイルできるはずです。



上に戻る


SwingでのABLEサンプル

ABLEのSwing版では、サンプルはexamplesサブディレクトリーの中に置かれています。どちらの場合でも、これらのディレクトリーには、多くのサンプルが利用するexamples\datafilesがあり、またexamples\agentsや、学習beanサンプル用のexamples\neural、そして何十ものルールセットやアプリケーションのデプロイ方法を示すサンプル・コードを含んだexample\rulesがあります。




上に戻る


まとめ

ABLEのアーキテクチャーは、数多くの規律からのコンポーネントを使って、エージェントを組み立てることができるようになっています。この記事で説明したのはごく一部の実装に関してですが、こうしたコンポーネントのおかげで、非常に広範なアプリケーションにABLEを使用することができます。この記事ではABLEの主な側面である、データbeanやルールbean、学習bean、ルール・エンジンやエージェントなどに関して説明しました。またABLEに同梱されている開発ツールについても、簡単に触れました。

ABLEによって皆さんの開発作業がどれほど楽になるかが分かったと思いますので、皆さん自身の内部ニューラル・ネットワークが活発に活動を始めたことでしょう。ぜひABLEの集団に「同化」し、ドキュメンテーションの中に飛び込んでください。尻込みすることはありません。ABLEは非常に楽しいのです!




上に戻る


謝辞

ABLEの研究チーム、ableinfo@us.ibm.comに対して、著者へのサポートに感謝致します。



参考文献



著者について

Author photo

Mark MeyerはTravelClick Inc. (www.TravelClick.net) のソフトウェア開発者であり、JavaやDelphi、そしてPerlを扱っています。コーディングや宿題作業をしている時以外には、相手さえいれば誰に対しても、プロセス・エンジニアリングやUML、そしてパターンに関しての伝道師を演じています。彼はX -ファイル・シリーズの最終回から、まだ回復しきっていません。2人の娘、PaigeとKirstenと共に、しばしば屋根に上り、「真実はあそこにある」と空を指しています。連絡先はGeeky2@gte.netです。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


54321
大変素晴らしい不充分・不完全である
 


上に戻る


    日本IBMについて プライバシー お問い合わせ