学位論文要旨



No 113993
著者(漢字) 鵜林,尚靖
著者(英字)
著者(カナ) ウバヤシ,ナオヤス
標題(和) 環境適応概念に基づく発展型協調計算に関する研究
標題(洋)
報告番号 113993
報告番号 甲13993
学位授与日 1999.03.29
学位種別 課程博士
学位種類 博士(学術)
学位記番号 博総合第211号
研究科 総合文化研究科 総合文化研究科
専攻
論文審査委員 主査: 東京大学 教授 玉井,哲雄
 東京大学 助教授 山口,和紀
 筑波大学 助教授 久野,靖
 東京工業大学 助教授 柴山,悦哉
 東京大学 教授 川合,慧
内容要旨 1はじめに

 本論文では,計算主体(以降,オブジェクトと呼ぶ)群が協調計算を通じて,その機能を動的に進化発展させていくための新たな枠組みを提示する.協調計算とは,様々な役割を担うオブジェクト群が相互にメッセージ通信を行いながら,オブジェクト単独では実現できないひとまとまりの機能を果たすことをいう.一方,進化発展とは,オブジェクトが動的にメソッドや属性を着脱していくことをいう.オブジェクト単独の進化発展については既にいくつか研究されているが,協調計算に着目した事例は極めて少ない.本論文では,オブジェクトに協調計算の場を提供する「環境」という概念を導入する.オブジェクトは動的に環境に適応したり,環境から離脱したりすることにより,他者との協調関係を変化させつつ進化発展していく.一方,環境側もそこに所属するオブジェクトが出入りすることにより進化発展する.すなわち,オブジェクトと環境はお互い相補的に進化発展していく.本論文では,このような計算のことを発展型協調計算と呼び,その基盤として,環境適応型計算モデル「計算」[3]を提案する.

2環境適応型計算モデル計算

 計算では,オブジェクト群が協調計算を行うための論理的な場を「環境」,環境の中で各オブジェクトが有すべき役割,すなわちその環境の中で分担して持つべき属性やメソッドを実体化したものを「ロール」と呼ぶ.メソッドの中には,他のロールとの協調計算の手順が記述される.環境の型に相当するものを環境クラスと呼び,環境属性,環境メソッド,ロールクラス定義で定義する.さらに,ロールクラス定義はロール属性とロールメソッドで定義する.オブジェクトは環境の中に存在するロールと一体化することにより環境に所属する.このことを「環境適応」と呼び,そのための操作を「結合」,逆操作を「結合解消」と呼ぶ.結合により,オブジェクトは新たにロールがもつ属性とメソッドを動的に獲得し,その環境の中で他のオブジェクトとメッセージを介して協調計算できるようになる(図1).結合後はself(自分自身を示す)に対する意味づけが変化し,結合元のオブジェクトの中に記述されたselfも結合先のロールの中に記述したselfもすべて結合元のオブジェクト自身を指すようになる.したがって,結合後は,メッセージはすべてオブジェクトにより受信され,ロール,オブジェクトの順にメソッド探索が行われる.オブジェクトはselfに対してメッセージを送るだけで,自分自身のオリジナルのメソッドだけでなく,ロールメソッドをも起動することが可能になる1.

 1ロールメソッドを起動する場合は所属環境を指定する必要がある.同じロールメソッド名が複数の所属環境に存在する可能性があるからである.

図1:環境適応のメカニズム

 発展型協調計算は自律性と発展性の2つの側面をもつ.自律性とは,オブジェクト自身が自分の行動に対する戦略を持っていることをいう.戦略とは,どのような状況のときに,どの環境に適応したらよいかをプログラムロジックで記述したものである.一方,発展性とはオブジェクトが環境に適応し,動的にメソッドや属性を着脱していくことをいう.オブジェクトがどのように自分自身を発展させていくかはオブジェクトが持つ戦略により異なる.計算では,通常のオブジェクト機能はベースレベル,戦略部分はメタレベルに切り分けてモジュール化し,同じオブジェクトでもメタレベルを書き換えることにより様々な自律的な行動をとらせることを可能にする.

3プログラミング言語Epsilon/0

 Epsilon/0は,計算を実証するために実験的に開発したプログラミング言語で[2],Schemeベースの並列オブジェクト指向言語ABCL/R3を核言語としている.ABCL/R3は自己反映計算機能をもつプログラミング言語で,Epsilon/0ではこの機能を用いて計算がもつ「環境」「ロール」「環境適応」などの概念を言語固有のメカニズムとして実現している.

 以下,契約ネットプロトコル[1]と呼ばれる問題をEpsilon/0により記述した例を示す.契約ネットプロトコルとは,多数の処理ノードの交渉を通じて問題を分割し,各ノードにタスクを割り当てるための協調モデルで,そこに参加するオブジェクトは,あるときには契約を提案するマネージャになったり,また,あるときは契約を請け負う契約者になったりする.ここでは,説明を簡略化するため,マネージャを1つに限定する.

契約ネットプロトコル環境の定義

 Epsilon/0では,環境クラスはdefine-context,ロールクラスはdefine-roleで定義される.以下は,環境クラスcontract-netと2つのロールクラスmanager(マネージャ),contractor(契約者)の定義である.まず,ロールmanagerのstartメソッドの中で,複数のロールcontractorに対してタスク告示メッセージ(task-announcement)が発行される2.ロールcontractor側では,自分の入札基準と照らし合わせて,条件を満たしていれば,ロールmanagerに入札メッセージ(bid)を発行する.ロールmanager側は,入札メッセージを受けとったロールcontractor(複数)の中からの自分の落札基準に最も適合するロールcontractorを選択し,落札メッセージ(award)を発行する.落札メッセージを受けとったロールcontractorは依頼されたタスクを実行する(execute-task).このように,Epsilon/0では契約ネットプロトコルだけに着目した協調計算を個々のオブジェクトとは独立に環境として記述できる.

 2get-all-roleは,コンテクストに所属するロール(インスタンス)のリストを返す組み込み関数.

;;Context contract-net

 (define-context contract-net( )...)

;;Role manager

 (define-role contract-net manager( )condition-shown-by-manager)

 (define-role-method contract-net manager

 (start self)

 (let((contractor-list(get-all-role(context-of self))))

 …contractor-listの各ロール(自分自身を除く)に対して

 task-announcementメッセージを発行))

 (define-role-method contract-net manager

 (bid self a-contractor a-condition-shown-by-contractor)

 …入札情報を内部に保管

 (if(入札はすべて終了したか)

 (award(select-contractor self)self)))

;;Role contractor

 (define-role contract-net contractor( )condition-shown-by-contractor)

 (define-role-method contract-net contractor

 (task-announcement self a-manager a-codition-shown-by-manager)

 (if(条件を満たすタスクか)

 (bid a-manager self condition-shown-by-contractor)))

 (define-role-method contract-net contractor

 (award self a-manager)

 (execute-task self))

契約ネットプロトコル環境の実行

 以下は,発展性を持たせた契約ネットプロトコルの実行記述である.taroという名前のオブジェクトが自律的に複数の契約ネットプロトコル環境を検索し,自分の条件にあったものに動的に適応していく様子を示している.taroは遂行しなければならない仕事とそのための資金を持っており,あるときは契約者となって資金を増やし(マネージャと協調計算),また,あるときはマネージャとなって遂行すべき仕事の一部を別のオブジェクトにやってもらう(契約者と協調計算).すべての仕事が終った時点でプログラムは終了する.図2はこの様子を概念的に図示したものである.結合および結合解消には,bind/unbindと呼ばれるEpsilon/0の組み込み関数を使用する.また,オブジェクトとロールの結合関係を調べる場合はsearch-role関数を使用する.これにより,オブジェクトは指定された環境で,どのロールと結合しているかが分かる3.

 3計算におけるselfはEpsilon/0では完全には実現されていない.具体的には,オブジェクトメソッドの中でselfに対して直接ロールメソッドを起動することはできない.この場合はsearch-role関数を使用し,一旦,ロール参照を取り出してからメソッドを起動することになる.

図2:発展型協調計算に基づいた契約ネットプロトコル;; オブジェクトのクラス定義(ベースレベル)

 (define-class person( )name money)

 (define-method person(execute-task self)…)

 (define-method person(life self job)

 (meta-life(meta-of self)job))

;;適応戦略の記述(メタレベル)

 (meta

 (define-class taro-meta(metaobject))

 (define(make-taro-meta class slots evaluator options)

 (make taro-meta:class class

 :slots slots

 :evaluator evaluator

 :lock (make-lock)))

 (define-method taro-meta(meta-life self job)

 (future-to-base

 …遂行すべき仕事を複数のタスクに分割

 …すべてのタスクが完了するまで以下を繰り返す

 (let((env(get-all-context)))

 (begin

 …managerとして参加できるcontract-net環境を探す

 複数の候補がある場合は,最も条件に適合するものを選択

 …環境適応

 selected-contract-net環境のselected-managerロールと結合

 (bind selected-contract-net(den-of self)selected-manager)

 (start(search-role(den-of self)selected-contract-net))

 …もし,手持ちの資金不足で契約が失敗すれば,

 contractorとして参加できるcontract-net環境を探し,適応

 (bind selected-contract-net(den-of self)selected-contractor)

 …契約が成立すると,手持ちの資金が増える))))

;;自律的行動の開始

 (define taro

 (make person:name"Taro Yamada"

 :metaobject-creator make-taro-meta))

 (life taro a-job)

 上記プログラム中,(meta…)はメタレベルで式が評価されること示している.taro-metaのクラス定義ではデフォルトのメタオブジェクトmetaobjectを継承しており,これ自身メタオブジェクトとなる.make-taro-metaはメタオブジェクト生成関数である.この関数は,オブジェクトtaroを生成する際に,metaobject-creatorスロットの初期値として指定される.これにより,オブジェクトtaroのメタオブジェクトが実際に生成される.

 まず,personクラスの中にlifeメソッドを定義する.実際のlifeの内容はメタオブジェクトのメソッドmeta-lifeの中に記述にされる.lifeは単純にこのメソッドを呼び出すだけである4.オブジェクトtaroの場合はメタオブジェクトtaro-metaに記述されている.(future-to-base…)は,メタレベルのプログラム中からベースレベルのオブジェクトのメソッドを起動するときに使用される.

 4meta-of関数は,ベースレベルオブジェクトに対応するメタオブジェクトの参照を返す.den-of関数はその逆.

 lifeはオブジェクトの自律性を記述するためのデザインパターンになっている.オブジェクトのlifeをメタオブジェクトに記述するメリットとして,オブジェクトが自分自身のメタ情報を参照することにより,計算状態に応じた判断が可能になることが挙げられる.たとえば,自分自身の負荷状態を参照しながら,適切な環境に自律的に適応して行くことが可能になる.

4考察

 従来,協調計算と環境適応は別々の概念として捉えられ,研究されてきた.協調計算をどのように一般表現するかについては,主に,オブジェクト指向技術を中心とするソフトウェア工学で研究されてきた.一方,環境適応については,主に,単独のオブジェクトがどのように機能を進化発展させていくかという側面から研究されてきた.たとえば,人というオブジェクトがあった場合,就職や結婚により,必要なメソッドや属性をどのようなメカニズムで獲得して行ったらよいかという観点から研究されてきた.

 ところが,実際には,協調計算と環境適応は相互に関係しあう概念である.オブジェクト群がお互いに協調計算する場合,個々のオブジェクトは自分に与えられた役割を遂行しなければならない.ある場合には,契約ネットプロトコルのように,オブジェクトは計算の進行と共にその役割を変化させる必要も発生する.そのためには,オブジェクトは新しい役割に応じて機能を進化発展させなければならない.一方,オブジェクトが自分自身を進化発展させるのは,進化させた機能を使用して他のオブジェクトとやり取りするためである.他との相互作用に繋がらない進化発展はあまり意味をなさない.前述のように,協調計算そのものの表現方法やオブジェクト単独の進化発展については既にいくつか研究されているが,本論文のように両者を共通の土俵で取り上げた研究事例は極めて少ない.

5おわりに

 ここ数年,モバイル環境下で動作するアプリケーションやインターネット上で分散処理を行うようなシステムが増えて来つつある.このようなアプリケーションは計算の進行と共に動作環境が変化していくという性質を持っているが,これらの多くは環境概念をもっておらず,プログラムの中で個々の動作状況に対応した記述を行っている.そのため,動作環境が変わると,大幅な修正を行わなければならない場合が多い.今後,このような問題に対応するため従来の計算モデルやプログラミング言語を発展させていく必要性が出てくると思われるが,本研究で導入した発展型協調計算のアプローチはその1つの方向性を示すものと言える.

参考文献[1]R.G.Smith,The Contract Net Protocol:High-Level Communication and Control in a Distributed Problem Solver,IEEE Trans.on Computers,Vol.29,No.12,pp.1104-1113(1980).[2]鵜林尚靖,玉井哲雄,オブジェクト間協調に基づく環境適応型プログラミング言語Edenの設計,情報処理学会論文誌プログラミング(掲載予定).[3]鵜林尚靖,玉井哲雄,動的な役割変化を考慮したオブジェクト間の協調動作とそのモジュール化メカニズム,電子情報通信学会和文論文誌(掲載予定).
審査要旨

 本論文では,計算モデルにおける計算主体としてのオブジェクト群が,協調計算を通じてその機能を動的に発展させていくための新たな枠組みを提示している.協調計算とは,様々な役割を担うオブジェクト群が相互にメッセージ通信を行いながら,オブジェクト単独では実現できないひとまとまりの機能を果たすことをいう.一方,発展とは,オブジェクトが動的にその振る舞いや属性を変化させていくことをいう.これを実現するため,本論文では,オブジェクトに協調計算の場を提供する「環境」という概念を導入している.オブジェクトは動的に環境に適応したり,環境から離脱したりすることにより,他者との協調関係を変化させつつ発展していく.一方,環境側もそこに所属するオブジェクトが出入りすることにより発展する.すなわち,オブジェクトと環境は互い相補的に発展していく.本論文では,このような計算のことを発展型協調計算と呼び,その基盤として環境適応型計算モデル「計算」を与えている.

 従来,協調計算と環境適応は別々の概念として捉えられ研究されることが多かった.協調計算をどのように表現するかについては,主に,オブジェクト指向技術を中心とするソフトウェア工学やマルチエージェントなどの分野で研究されてきた.一方,環境適応については,主に,単独のオブジェクトが環境の変化に対しどのように機能を適応させていくかという側面から研究されてきた.たとえば,人というオブジェクトがあった場合,就職や結婚により必要となる機能や属性をどのようなメカニズムで獲得して行ったらよいかという観点からの研究である.ところが実際には,協調計算と環境適応は相互に関係しあう概念である.オブジェクト群が互いに協調計算する場合,個々のオブジェクトは自分に与えられた役割を遂行しなければならない.場合によっては,オブジェクトは計算の進行と共にその役割を変化させる必要も生じる.そのためには,オブジェクトは新しい役割に応じて機能を発展させなければならない.一方,オブジェクトが自分自身を発展させるのは,発展させた機能を使用して他のオブジェクトとやり取りするためである.他との相互作用に繋がらない発展はそれほど大きな意味をもちえない.協調計算そのものの表現方法やオブジェクト単独の発展については既にいくつか研究されているが,本論文のようにソフトウェア工学的な観点から両者を融合した研究事例は少ない.

 本論文の第1章では,上に挙げたような研究の背景や目的などが述べられている.第2章では,本論文の核心である計算が導入されている.ここで計算の諸概念について述べられると共に,モデルとしての定義が与えられている.計算とは,オブジェクト群がメッセージ通信を通じて協調計算する場を個々のオブジェクトにとっての環境と考えるモデルである.オブジェクトが新しい環境に適応すると,その環境の中で活動するのに必要な役割を動的に獲得する.第3章では,計算を実証するために実験的に開発されたプログラミング言語Epsilon/0について述べている.Epsilon/0の主な言語要素が導入されると共に,簡単なプログラミング例で環境適応型のプログラミングがどのようなものであるかが示される.第4章は,Epsilon/0の実装方式について述べたものである.Epsilon/0の処理系は,自己反映計算機能を持つ並列オブジェクト指向プログラミング言語ABCL/R3を核言語とし,その上に実装されている.この実装は,自己反映計算の新たな応用を示すものであり意義深い.第5章では,Epsilon/0による協調プログラミングの例として2つの例題を取り上げ,計算の有効性を具体的に示している.1つは「契約ネットプロトコル」と呼ばれる問題であり,動的に役割が変化するオブジェクト群の協調計算が従来のオブジェクト指向言語と比較して簡潔に記述されている.もう1つは排他制御の問題として有名なDijkstraの「哲学者の食事問題」で,この例題を通じて,環境がオブジェクトの動作を調整する場合の記述が示されている.第6章と第7章は,計算から派生するソフトウェア工学上重要な概念を述べたものである.第6章は計算による再利用・部品化機構を述べたものであり,複数のオブジェクトにまたがった協調計算を抽象化し,それを1つの協調プロトコル部品として定義する方法について考察している.このような部品化は,従来の言語アーキテクチャでは実現が困難であった.第7章はメタアーキテクチャに基づく発展型協調計算の実現機構について述べたものであり,メタレベルに発展戦略を記述する方式を与えている.第8章は,本論文のまとめであり,今後の研究課題について述べている.

 現在,モバイル環境下で動作するアプリケーションやインターネット上で分散処理を行うようなシステムが,急速に増加している.このようなアプリケーションは計算の進行と共に動作環境が変化していくという性質を持っているが,これらの多くは環境概念をもっておらず,プログラムの中で個々の動作状況に対応した記述を行っている.そのため,動作環境が変わると,大幅な修正を行わなければならない場合が多い.今後,このような問題に対応するため,従来の計算モデルやプログラミング言語を発展させていく必要性が出てくると思われるが,本研究で導入した発展型協調計算のアプローチはその1つの方向性を示すものと言え,学問上貢献するところが大きい.よって,本論文は博士(学術)の学位論文としてふさわしいものであると審査委員会は認め,合格と判定する.

UTokyo Repositoryリンク