本書では,Artificial Intelligence(AI)の基礎的な要素技術を,Java言語によるプログラミングを通して学ぶことを目的としている.また,逆に,AIの基礎プログラミングを具体的なJavaプログラミングで示すことにより, Java言語の実際的で有用な使い方を習得することが可能である.

「2001年宇宙の旅」という映画を御存じだろうか? Arthur C. Clarke原作の小説で,Stanley Kubrick監督により映画化された,歴史的な名作である.この作品の中で,HALと呼ばれるAIを備えたコンピュータが登場する.HALは,画像理解,音声対話,柔軟な推論,といった高度な知能を持つコンピュータであった.現実の世界では,既に,2001年を迎えたが,HALほど高度な知能を持ったコンピュータは実現されてはいない.しかし,1997年に起きた二つの出来事は,それまで,沈滞気味のAI研究に対して久々に活気をあたえるニュースであった.最初の出来事はその年の5月にチェスマシンDeep Blueがチェスの世界チャンピオンであったGary Kasparov氏を打ち破ったことである.もう一つの出来事はその年の7月に,米国NASAのMars Pathfinderが自走ロボットを用いて火星探査に成功したことである.チェスの世界チャンピョンに勝利するコンピュータや,火星探査を自律的に行うことのできるロボットなど,着実にAIの要素技術を使ったコンピュータやロボットが実現されつつあり,AIに対する興味は尽きない.

このような二つの出来事において,Deep Blueの成功は古いのAIの終焉を,Mars Pathfinderの成功は新しいAIの必要性を象徴している.チェスという閉じた世界に問題を限定すれば,高速の計算チップの利用と,巧妙なヒューリスティック関数や知識ベースの開発により,世界の誰よりも知的に優れたマシンを完成することが可能であることを実証したのである.一方でMars Pathfinderの成功は新たなAIの必要性を示唆している.火星探査は閉じた世界ではなく,未知の世界の探求を行う自律的なシステムの必要性を示している.近年,このような自律的なAIシステムを指すものとして,「エージェント」ということばが盛んに用いられてきている.「エージェント」は, Stuart J. RusselとPeter Norvigの教科書「Artificial Intelligence: A Modern Approach」(出版社はPrentice Hall)における,合理的にふるまうシステム(systems that act rationally)として定義され,この定義が現在では,一般的なものとして定着している. 最近,AIは,人間の知能を解明するといった認知科学的なアプローチではなく,知的な振る舞いをすることができる機械を作るための科学として定義されるのが一般的である.現在までのAIは人間の発達段階で言うと幼年期にあり,様々な基礎的な技術を個別に探求してきた.現在,AIは転換期にあり,今後,更に大きく発展し青年期へと成長するためにはこれまでに培われてきた技術を組み合わせて,実際の問題に適用可能なシステムを構築いていく努力が必要であろう.

AIの研究は,1956年6月のダートマス大学の夏期研究会が出発点となっている.現在,その出発点から約半世紀近くの時間が経過し,具体的なAIは未だに具現されていないが,AI研究を通して,様々な有用な知能化技術が創出されている.知能化技術は,AI技術に基づく計算機の応用技術として,計算機の発展の中で社会的必然性をもった工学技術である.すなわち,知能化技術は,人間の知的活動を効果的に支援するために,知的なシステムを構築する際に本質的に必要とされるものである.

筆者がまだ学生のころ,米国MITのPatrick H. Winstonの代表的教科書である「Artificial Intelligence」(出版社はAddison-Wesleyであり,後年,「Lisp」(Berthold K. P. Hornとの共著)という名著がその本から派生し出版されている)を読みながら,Lispでルールプログラミングをしたときの楽しさと感動を覚えている.これらWinstonの本は,AI技術の入門という観点からも,大変優れた良書で,現在でも代表的なAI入門書と言える.実際,筆者の研究室のOBで,本書の執筆のお手伝いを頂いた伊藤孝行君や大囿忠親君も,学生時代には,これらWinstonの教科書の原書を全訳し,その訳に苦労しながら,LispでAIプログラミングを楽しんだとのことである.彼等によると,訳がおかしくても,プログラムを読み実装することによって,本質が何か,ということを理解できたとのことである.プログラムこそ,世界の共通言語だとも言える.

Javaは,1995年にSun Microsystems社によって提案された言語である.驚くことに,Javaは,わずか5年程度の間に,世界中で使われるようになった.これには,Javaにおけるプログラミングの簡単さ,マルチプラットフォームでの利用可能性,など様々な理由がある.最近の情報系学部の学生に聞くと,LispやPrologは知らないが,Javaは知っている,という学生が多い.筆者は,多くの人にAIプログラミングの楽しさや面白さを体験してもらうには,Javaを使って書いた新たなAIの教科書が必要であると感じた.すなわち,本書執筆の主な動機は, AIの入門書として,AIの基礎的な要素技術を,Javaによるプログラムを示すことにより,やさしく解説することである.本書によって,Winstonの「Artificial Intelligence」や「Lisp」のように,AI入門者が,実際にシステムを試作することで,AIやJavaの面白さを実感していただくことができれば,幸いである.

各章は,以下のような内容である.1章では,本書でのJavaを用いたプログラミングを理解するために最低限必要な,Java言語の基礎を説明する.Javaが初めてという読者は,1章から読みはじめて頂きたい.また,Java初心者は,本章の参考文献で示した良書などを参照しながら学習するとよい.

2章では,AIプログラミングの基礎となる技術として,探索手法とパターンマッチングを示し,その具体的なプログラムを紹介する.探索手法は,AIプログラミングの基本中の基本であり,その他の要素技術の実装においてベースとなる本質的な技術である.また,ここでのパターンマッチングのプログラムは,特に,3章の推論システムやプランニングシステムでも用いられる.

3章では,AIの要素技術となる,知識表現技術,推論機構,および整合性管理機構と,そのプログラムを示す.ここでは,知識表現技術として,セマンティックネットとフレームを示す.推論機構として,ルールベースシステム(プロダクションシステム)とプランニングシステムを示す.また,推論機構と共に用いられる整合性管理機構も示す.整合性管理機構により,より柔軟な推論機構の構築が可能になる.

4章では,AIの先端的な応用トピックとして,モバイルエージェントと意思決定支援システムの簡単な例を示す.ここでは,モバイルエージェントの実装例として,Agletsフレームワークを用いた専門家エージェントのプログラム例を示す.また意思決定支援システムの要素技術として,Analytic Hierarchy Process(AHP)を実装したプログラム例を示す.AHPは,人間の主観的評価を数量化する手法であり,支援システムの基本機能として,多くの応用システムが構築されている.

各章の章末には,その章で扱うトピックに関連して,演習問題と参考文献を示してある.演習問題は,主にプログラミングに関する課題が多く,中には最新のテーマに関連するものもある.是非,これら課題に取り組んで頂きたい.また,本書で紹介する全てのプログラムの完全なソースファイルは,添付のCD-ROMに収録されている.詳細は,本書の付録を参照されたい.まずは,本ソースファイルを各自の計算機環境でコンパイルして,試しに動かしてみると良い.

本書は,読者の目的に応じて読みすすめることができるように構成されている.以下に例を示す.授業で用いる場合は,特に,2章および3章に重点を置くと良い.ここで,Javaを未習得な学生を対象にする場合は,1章に関する説明を最初の授業で行うと効果的である.独学で読み進める読者は,Javaが未習得ならば,1章から始め,2章および3章,そして4章という順に学習を進めると良い.簡単なJavaプログラムを読むことが可能ならば,2章からはじめてもかまわない.また,AIプログラミングは一通りやったことがあるという読者は,3.3節の整合性管理機構と4章を読むと良い.3.3節や4章の内容は,先端的なテーマを扱っており,他の教科書では,プログラムまで解説しているものは少ない.

本書では,Javaの入門的な知識は,その他多くの入門書に譲り,以上のように,Javaプログラミングのより実際的な利用方法に焦点を当て,Javaプログラムをやさしく解説することに重点を置いている.本書でのJavaプログラミングでは,最新のJavaであるJava2を使ったJava APIを反映している.本書で紹介した内容は,情報系学部の大学3年生以上の学生を対象としている.具体的には,筆者が担当している講義である「知能プログラミング演習」(名古屋工業大学知能情報システム学科3年生を対象)の課題とその講議ノートをベースにしている.本講議の経験から,本書を一読することにより,効果的に実践的なJavaプログラミングおよびAIプログラミングの基本を理解することが可能である.

最後になりますが,伊藤孝行君(現,北陸先端科学技術大学院大学知識科学教育研究センター助教授)には,本書全般に渡ってプログラミングおよび草稿の作成をお手伝いしていただいた.また,大囿忠親君(現,名古屋工業大学知能情報システム学科助手)には,文書ファイルの整理・作成およびプログラミングをお手伝いしていただいた.両君とは,本書原稿の完成に向けて,楽しく,有意義な時間を多くもつことができました.両君に,深く感謝いたします.本書のページ数の制約から,その他AI技術に関連した執筆済みの多くの原稿を,両君と涙をのんで割愛しました.未発表の原稿は,別の機会に,両君との共著として出版できれば幸いである.さらに,その他多くの新谷研究室の大学院生,名古屋工業大学知能情報システム学科の学生のみなさんには,プログラムのバグの発見等に協力していただいた.ここに,感謝致します.

2001年12月

新谷虎松