|
2003年10月29日
Javaに「知識」を追加するOPSJ新発売
パーソナルメディア株式会社(代表取締役:泉名達也、本社:東京、電話番号03-5702-7858、資本金1,000万円)は、Java(TM)にif〜then形式のルールベースを記述できる拡張言語「OPSJ(オーピーエスジェー)」を10月30日より発売開始いたします。Java 2SDK 1.3以降が動作するSolarisやWindows、Linux上で動作します。標準価格は184万円(税別)で、処理系に関する1年間の保守サービスが含まれます。
OPSJはif〜then形式のルールベース記述言語をJavaで利用できるように拡張したプログラミング言語です。ルールベースは「もし(if)○○だった場合には、(then)□□を実行する」といったルールを用いて問題解決をするプログラミング技法の一つで、プロダクションシステムとも呼ばれます。アプリケーションプログラムを開発する際に、アルゴリズム化しにくい対象分野を記述するのに向いており、故障診断システムやシミュレーションなどの分野ですでに広く利用されている実績があります。
OPSJが動作するのはJ2EE(Java2 Platform, Enterprise Edition)と呼ばれ、企業の基幹業務分野(エンタープライズ分野)でのwebアプリケーションを構築するために利用されるJava環境です。J2EEを用いたwebアプリケーションには中古車の査定システムや自動車保険のオンライン販売、宿泊や移動手段の予約サービス、インターネットバンキング、製品のサポートサービスといった、インターネットを用いたさまざまなサービスのほか、企業内の総務・人事・販売・資材調達・在庫管理といったイントラシステムなどがあります。
こうしたwebアプリケーションでは、ユーザに対して冗長な質問を避けて少ない質問回数で適切な回答や提案を行ったり、特定の顧客へ効果的なアドバイスをすることで顧客満足度を高めることが常に求められています。OPSJを用いることで、CRM(Customer Relationship Management)やSCM(Supply Chain Management)といった既存のwebアプリケーションに対してルールベースによって記述した「知能」を追加し、より効果的な運用を行うことができるようになります。
OPSJの開発元であるProduction Systems Technologies,Inc.(本社:米国ペンシルバニア州)は、米国の人工知能研究のメッカのひとつカーネギーメロン大学で、OPS(Official Production System)プロジェクトの中心人物として活躍したフォーギー博士によって設立された大学発ベンチャーです。パーソナルメディアでは同社の日本総代理店として、1980年代後半からOPS83やOPS/R2といったエキスパートシステム開発用コンパイラ言語の日本語化や販売を通じて、ユーザー企業による実用エキスパートシステムの開発へ協力してまいりました。
パーソナルメディアではOPSJの販売を通じて、さまざまなwebアプリケーションの「知能化」を推進する企業の業務の効率化へ協力していきたいと考えています。
【補足資料】
- (1)ルールベース(プロダクションシステム)とは
- ルールベースのシステムは一般的には
- if〜then形式で表現された多数のルールを収納した「グローバルルールベース」
- 外部の条件に適合する特定のルールを格納する「ワーキングメモリ」
- ワーキングメモリ内のどのルールを実行するかを決定する「推論エンジン」
で構成されます。
- 一つひとつのルールには、条件部(LHS:Left Hand Side)と実行部(RHS:Right Hand
Side)があります。各ルールは他のルールとは独立した内容を記述可能で、通常のプログラミング言語での「サブルーチン」に相当します。通常のプログラムがどの部分でどのサブルーチンを呼ぶかを明示的に示しているのと異なり、プロダクションシステムでのルールは、プログラムを実際に実行させて「推論エンジン」が動作することではじめて、どのルールが実行されるかがわかる、という点が大きく違います。なおOPS/R2やOPSJでは、ワーキングメモリ内のどのルールが推論エンジンの持つ条件に適合するかを判断する「パターンマッチアルゴリズム」に、フォーギー博士がカーネギーメロン大学在職中に開発した「RETE(リート)」アルゴリズムをさらに高速に動作するようにした改良版「RETE-II(リートツー)」が採用されています。これにより、リアルタイム性能を求められる分野でも十分なレスポンスが期待できます。
- (2)OPSJで記述した化学プラントの監視システム用のサンプルプログラム
-
----------------------------------------------------------------
rule Flows
if {
curTask isa Task with (
name of curTask == "ProcessNewInputs");
t1 isa Tank with (
status of t1 == LOST,
var del1 = delta);
t2 isa Tank with (
status of t2 == GAINED,
var del2 = delta);
pipe isa Pipe with (
sourceName of pipe == name of t1,
destName of pipe == name of t2);
} do {
double amt = min(del1, del2);
t1.update().delta -= amt;
t2.update().delta -= amt;
System.out.println(amt +
"リットルはパイプ" + pipe.view().name +
"を通してポンプで送られました");
}
----------------------------------------------------------------
- 上記のサンプルルールでは、以下の内容を表現しています。
----------------------------------------------------------------
もし(=if)、システムの現在のタスクが新しい入力を処理しており、
材料がなくなったタンクT1と、
材料を補充されたタンクT2があり、
T1とT2がパイプで繋がっている
ならば、(=then ただしOPSJの文法上はdoと表記)
T1のロス分とT2のプラス分が最小になるように、amtをセットして、
材料amtが2つのタンク間をポンプで送られたことを示すdelta値を調整して、
2つのタンクをアップデートして、メッセージで出力する。
----------------------------------------------------------------
|
■ | Java、Solarisは、米国Sun Microsystems, Inc.の米国およびその他の国における商標または登録商標です。 |
■ |
その他の商品名などは各社の商標または登録商標です。 |
■ |
本資料に記載された製品の仕様、外観イメージ、価格などは、発表日現在のものです。最終的に販売される製品では、変更されることがありますので、あらかじめご了承ください。ご購入の際は、最新情報をご確認ください。 |
以上
|
|