考察:「オートノミック・フレームワーク」

by ご近所のきよきよ


 
 システムは成長し、巨大化し複雑化し、メンテナンスができなくなっていくものです。また、経験から言える事ですが、ものが動き始めると、もっとエレガントなシステム構成案とか、アルゴリズムとかを思いつくものです。結局、最初から作り直す事になってしまう。特に曖昧性を含んだシステムはそうです。未夢はなんど後悔の淵に佇んだことか。何度も改版しました。作っていてやっと本物の技術に行き着けるものなのですね。本物は、強力でエレガントです。初めからそんなものは思いつけるはずもなく。
 戦艦大和を作った技師は、艦全体の鋲の位置が頭に入っていたと言います。巨大なシステムをつくるにはそうした把握力がものをいうようです。私なんか、コーディングを終え、テストが通るとコードを忘れていましたから、軽快なフットワークで未夢を構築するというわけには行きませんでした。だから、つぎはぎだらけのシステムになってしまっています。大和だったら、所定の速力がでない大変なシステムになっていた事でしょう。コードを覚えられたら本当にすばらしいシステムを短時間に構築できるのにと、もどかしく頭を叩いたものです。
 
 ところで、それはニーズにもなっているのです。「記憶力のない開発者でも巨大プログラムを構築できる開発環境を作ろう」というような思いをヒシヒシと感じます。特に人工知能では、曖昧性処理がシステムの複雑化を促しますから、とりわけこのような開発環境へのニーズは高くなるわけです。
 こんなシステムはどんな機能を、どんな構成で持っているべきでしょうか。できれば、人間並みの柔軟性を持ったシステムとしたいですねえ。
 記憶力が無くても構築できるとすれば、全体を把握しないでもシステムが作れるという事です。柔軟なシステムということからは、論理的に環境を把握できて、物理的な実際の動作アルゴリズムはブラックボックスになっていて欲しい、すなわちフレームワークとしてできていて、ローカルにそのときそのときで、システム環境を定義して、プログラムを作れば、全体最適、実際の動作はフレームワークがやってくれる・・・というようなものであります。
 フレームワークはインテリジェンスを持っていて、プログラマが定義した環境を自分の能力に合うように解釈して、プログラムの適用を制御していく・・・というようになっている必要があります。そのためには、
(1)基本的な記号の意味を定義しておくこと(知識基盤としてオントロジーを利用すること)
(2)システムは試行錯誤して、全体最適化を図るための統計機能(データマイニング)と推論、学習(強化学習)機能を持っていること
(3)システム駆動中にプログラム(プロセス)を定義できること(スクリプトで記述し、ジャストインタイムでコンパイルして速度をキープすること)
(4)プログラムだけでなく、プログラムの動作条件、環境をローカルな表現で記述できること。(プログラマの定義する動作条件とか、環境はプログラマの視点で記述してますから、それをフレームワークの視点に直して、利用していく事になります。これもオントロジーで実現する事になるはず)
 
ということは、必須でしょう。
 
 例えば、あるプログラムがソート機能を使おうとしていたとします。そのプログラムですることは、ソート機能を使う事を条件を指定して、フレームワークに通知します。これは特別なマクロを用意してやればいいでしょう。
 一方で、ソート機能の開発者がソートプログラムを作り、その動作条件を含めて、フレームワークに登録します。ソートとしては、バブルソートとか、クイックソートとか、マージソートとか手法がいっぱいあります。ソートの専門家は思いつくままにソート機能を作ってはフレームワークに登録します。
 フレームワークはデータの条件とか、メモリ環境とかを考慮してソートプログラムを選んで利用します。フレームワークは統計情報を持っていて、要求元のソート機能利用条件に最適なソートアルゴリズムを使うように学習していきます。そこが、オートノミックなのです。
 
 またテストの自動化もフレームワークが実現します。テストプログラムは知識として、フレームワークが持ちます。バグが見つかるとその部分のプログラムはマスクしてしまいます。バグがどうゆう条件で起きるかも、統計的に把握して、問題ないところでは利用するということも行えればいいですね。


図1 フレームワークの実現イメージ


 このアイデアはリーマン幾何学を元に得たものです。ローカル空間は線形空間で、全てのローカル空間は同等というのが要請ですね。全体は最適解が一つあって、曲面になり、光は最短軌道を抜けていく。そんな感じを、ソフトウェアで実現しましょうという発想です。
 

 これに関しては、自然言語処理フレームワークに言及しています。それをご参照ください。

 それと、似たシステムとして、システム管理プログラムが考えられます。配下のシステムの稼働状況を監視し、管理者に通知していくというあれ。それをもっと高度にしたものが、本システムだと言えます。通知するだけでなく、自動的に利用するプログラムを選択していく、ときには余裕があればグリッドを走らせる・・・などなど、インテリジェンスをどんどんあげていくことも面白いでしょう。
 
 

おわり