(57)【要約】【課題】複数のエージェントが協調して動作することにより実世界を模擬する際、動作間の矛盾を引き起こしたプログラムの検出を効率よく行うことが可能なシミュレーション方法とその装置を提供する。【解決手段】エージェント毎に個別シミュレータを備え、エージェントとシミュレータの各ペアは平行してシミュレーション処理を実行し、エージェントの出力結果である動作データは関連する全てのシミュレータに送り、シミュレータ上で動作データ間の矛盾を検査する。【選択図】        図１
2004272693.tif 000002
【特許請求の範囲】
【請求項１】
複数のエージェントと複数のシミュレータにより実行するシミュレーション装置において、
前記複数のエージェントは夫々、内部状態データベースと、プログラムデータベースと、プログラム解釈部とを備え、
前記複数のシミュレータは夫々、入力バッファと、動作定義データベースと、動作決定部と、動作実行部とを備えることを特徴とするシミュレーション装置。
【請求項２】
エージェントの内部状態データベースは、エージェントの内部状態を示すデータを格納していることを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
エージェントのプログラムデータベースは、エージェントが所定の内部状態である場合に実行すべき動作を記述したプログラムデータを格納していることを特徴とする請求項１記載のシミュレーション装置。
【請求項４】
エージェントのプログラム解釈部は、プログラムデータベースに格納されているプログラムデータのうち、プログラムデータに記述されている内部状態データと内部状態データベースに格納されている内部状態データとが一致するプログラムデータを選択し、当該プログラムデータに記述されている動作データをシミュレータの入力バッファに供給することを特徴とする請求項１記載のシミュレーション装置。
【請求項５】
シミュレータの入力バッファは、エージェントが出力した動作データを記録することを特徴とする請求項１記載のシミュレーション装置。
【請求項６】
シミュレータの動作定義データベースは、動作の名前と効果を記述した動作定義データを格納していることを特徴とする請求項１記載のシミュレーション装置。
【請求項７】
シミュレータの動作決定部は、入力バッファに格納された動作データと動作定義データベースに格納された動作定義データの名前データとが一致する当該動作定義データの効果データを、前記動作データの全てに付加した動作データの集合であって、当該動作データの集合の部分集合のうち、動作データに付加された効果データの集合が無矛盾となる動作データの極大集合を決定することを特徴とする請求項１記載のシミュレーション装置。
【請求項８】
シミュレータの動作実行部は、動作決定部によって決定された動作データに付加された効果データを、エージェントの内部状態データベースに格納することを特徴とする請求項１記載のシミュレーション装置。
【請求項９】
内部状態データベースとプログラムデータベースとプログラム解釈部を備える複数のエージェントと、入力バッファと動作定義データベースと動作決定部と動作実行部とを備える複数のシミュレータにより実行するシミュレーション方法において、
夫々のエージェントは、前記プログラムデータベースに格納されているプログラムデータのうち、該プログラムデータに記述された内部状態データと前記内部状態データベースに格納されている内部状態データとが一致するプログラムデータを取り出し、その後、当該プログラムデータに記述された動作データを前記シミュレータの前記入力バッファに書き込み、
各々のシミュレータは、前記入力バッファから動作データを取り出し、前記動作定義データベースに格納された動作定義データのうち、動作定義データの名前データが前記動作データと一致する動作定義データの効果データを、前記動作データに付加することを取り出された全ての動作データに対して行い、その後、当該動作データの集合の部分集合のうち、動作データに付加された効果データの集合が無矛盾となるような動作データの極大集合を決定し、当該決定された動作データに付加された効果データを、エージェントの内部状態データベースに格納することを特徴とするシミュレーション方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のエージェントが協調して動作するプログラムを作成する際、作成したプログラムが正しく動作するか否かを検証するために、複数のエージェントの動作をシミュレートするシミュレーション装置及びそのシミュレーション方法に関する。
【０００２】
【従来の技術】
従来のシミュレーションシステムは、個々のエージェントが自律的に意思決定を行うためのエージェントを複数備え、また、これら複数のエージェントが処理した結果として生成する動作データ間の矛盾の検出を容易にするためのシミュレータを備えていてシミュレータ上で動作間の矛盾検出を集中的に行うシステム、即ち、マルチエージェント・シミュレーションシステムがあった（例えば、特許文献１参照）。
【０００３】
【特許文献１】
特開平５−２３３０５３号公報（第１図）
【０００４】
【発明が解決しようとする課題】
マルチエージェント・シミュレーションシステムにおいては、各エージェントが出力した複数の動作間の矛盾を効率良く検出することが重要であり、上述した従来のマルチエージェント・シミュレーションシステムでは、動作間の矛盾の検出のためにシミュレータを設け、集中的に行っていた。しかし、エージェントの数が増えた場合には、集中的に行うシミュレータの処理量が多くなり、矛盾の検出が効率良く行えないという課題があった。
【０００５】
この発明は上述した課題を解決するためになされたもので、シミュレーションの対象とするオブジェクトには対応するシミュレータを設け、自律的に行動するオブジェクトに対してはシミュレータに対応するエージェントを設け、エージェントが出力した動作データは、動作がおよぶ全てのオブジェクトが対応するシミュレータに送られ、動作の矛盾検出をシミュレータが行うことにより、矛盾検出処理を分散処理するシミュレーション装置とシミュレーション方法を得ることを目的とする。
【０００６】
【課題を解決するための手段】
この発明に係るシミュレーション装置は、複数のエージェントと複数のシミュレータを備えてシミュレーションを実行するシミュレーション装置において、複数のエージェントは夫々、内部状態データベースと、プログラムデータベースと、プログラム解釈部とを備え、一方、複数のシミュレータは夫々、入力バッファと、動作定義データベースと、動作決定部と、動作実行部とを備え、矛盾検出処理を分散処理するものである。
【０００７】
【発明の実施の形態】
以下、本発明の一実施の形態について図１〜図７を参照して詳細に説明する。
実施の形態１．
図１は実施の形態１に係るマルチエージェント・シミュレーションシステムの構成を示す図である。マルチエージェント・シミュレーションシステムはエージェントＡ１、Ａ２とシミュレータＳ１、Ｓ２、Ｓ３を備える。しかしながらエージェントとシミュレータはこれらの個数に限るものではない。
【０００８】
エージェントＡ１、Ａ２は内部状態データベース１とプログラムデータベース２とプログラム解釈部３を含んでいる。
【０００９】
シミュレータＳ１、Ｓ２、Ｓ３は入力バッファ４と動作定義データベース５と動作決定部６と動作実行部７を含んでいる。
【００１０】
エージェントＡ１、Ａ２が備える内部状態データベース１には、エージェントＡ１、Ａ２のもつ知識や信念などを示す内部状態データが格納されている。また、プログラムデータベース２には、エージェントＡ１、Ａ２が所定の内部状態をもつときに実行すべき動作を記述したプログラムデータが格納されている。更にプログラム解釈部３は、プログラムデータベース２に格納されているプログラムデータのうち、該プログラムデータに記述された内部状態データが、内部状態データベース１に格納されている内部状態データと一致するプログラムデータを取り出し、該プログラムデータに記述された動作データを出力し、シミュレータＳ１、Ｓ２、Ｓ３のうち、動作データに関連する全てのシミュレータの入力バッファ４に書き込む。
【００１１】
シミュレータＳ１、Ｓ２、Ｓ３が備える入力バッファ４には、エージェントＡ１、Ａ２のプログラム解釈部３から出力された動作データが一時的に格納される。また、動作定義データベース５には、動作の名前と効果とを記述した動作定義データが格納されている。
【００１２】
また、動作決定部６は、入力バッファ４から動作データを取り出し、まず、動作定義データベース５に格納された動作定義データのうち、動作定義データの名前データが該動作データと一致する動作定義データの効果データを該動作データに付加することを、取り出された全ての動作データに対して行う。次に、該動作データの集合の部分集合のうち、その要素である動作データに付加された効果データの集合が無矛盾となるような動作データの極大集合を決定する。さらに動作実行部７は、動作決定部６によって決定された各動作データに対し、該動作データに付加された効果データを、対応するエージェントの内部状態データベース１に格納する。
【００１３】
次に、図２および図３に示す具体例に基づいてエージェントＡ１、Ａ２における各部の処理を詳細に説明する。なお、図２（ａ）、（ｂ）は内部状態データベースの記述例を示す図であり、また、図３（ａ）、（ｂ）はプログラムデータベーの記述例を示す図である。
【００１４】
本図は、エージェントである書類配送ロボット「ロボ太」のプログラムの検証を対象としたものである。図２において、内部状態データ１１は、ロボ太がもっている責務を記述したもので、「書類が会議室にあること（Ａｔ（書類、会議室）と記述される）を実現するという責務（ＣＭＴ：ｃｏｍｍｉｔｍｅｎｔの略）を、ロボ太が一郎に対してもっている」ことを表している。内部状態データ１２は、ロボ太がもっている信念を記述したもので、「書類が机の上にある（Ｏｎ（書類、机）と記述される）という信念（Ｂ：ｂｅｌｉｅｆの略）をロボ太がもっている」ことを表している。同様に、内部状態データ１３は、ロボ太の信念を記述したもので、「ロボ太が机のある場所にいること（Ａｔ（ロボ太、机）と記述される）をロボ太が信じている」ことを表している。
【００１５】
図３のプログラムデータベース２には、ロボ太がある内部状態をもつときに実行すべき動作を記述したプログラムデータが格納されている。プログラムデータは、変数を含んだ内部状態データと動作データとの組で記述される。図３（ａ）、（ｂ）において、ａ、ｘ、ｙ、ｚ、ｗは変数を表す。
【００１６】
図３のプログラムデータ２１は、ロボ太が、エージェントａに対して、ｘがｙにあることを実現するという責務をもち、ロボ太が、ｘがｚの上にあると信じていて、ロボ太が、自分（ロボ太）がｗにいると信じているときに、「ロボ太は、ｗからｚに移動（Ｍｏｖｅ）する」という動作を実行するプログラムを表している。
【００１７】
同様に、プログラムデータ２２は、ロボ太が、エージェントａに対して、ｘがｙにあることを実現するという責務をもち、ロボ太が、ｘがｚの上にあると信じていて、ロボ太が、自分（ロボ太）がｚにいると信じているときに、「ロボ太は、ｘを掴む（Ｐｉｃｋ  Ｕｐ）」という動作を実行するプログラムを表している。
【００１８】
図４は、図１のプログラム解釈部３の処理のフローチャートである。プログラム解釈部３は、まず、プログラムデータベース２に格納されている全てのプログラムデータに対し、該プログラムデータに記述された内部状態データが、内部状態データベース１に格納されている内部状態データと一致するか否かを調べる（ステップＳＴ３０１）。
次に、ステップＳＴ３０１の検査に合格したプログラムデータに記述された動作データを出力する（ステップＳＴ３０２）。
【００１９】
図２および図３の具体例を用いて、具体的な処理例を説明する。まず、図４に示すステップＳＴ３０１において、図３のプログラムデータ２１および２２に対し、各プログラムデータ２１、２２の内部状態データが、図２の内部状態データ１１、１２、１３と一致するか否かが調べられる。プログラムデータ２１に対しては変数の代入が行われ、ａに「一郎」、ｘに「書類」、ｙに「会議室」、ｚに「机」、ｗに「机」が代入される。しかし、ｚとｗという異なる変数に対し同じ値が代入されるため、図３に示すプログラムデータ２１の内部状態データは図２に示す内部状態データ１１、１２、１３とは一致しない。したがって、プログラムデータ２１はステップＳＴ３０１の検査に不合格となる。
【００２０】
また、プログラムデータ２２に対しても、同様に変数の代入が行われ、ａに「一郎」、ｘに「書類」、ｙに「会議室」、ｚに「机」が代入される。この場合は、全ての変数に対し、各々異なる値が代入されているため、図３に示すプログラムデータ２２の内部状態データは図２に示す内部状態データ１１、１２、１３と一致する。したがって、プログラムデータ２２はステップＳＴ３０１の検査に合格することになる。
【００２１】
次に、ステップＳＴ３０１の検査に合格したプログラムデータに記述された動作データがシミュレータに出力される（ステップＳＴ３０２）。この例では、プログラムデータ２２に記述された動作データ「Ｐｉｃｋ  Ｕｐ（ロボ太、書類）」が出力される。該動作データは「ロボ太が書類を掴む」という動作を表している。図１に示すように、本動作データ「Ｐｉｃｋ  Ｕｐ（ロボ太、書類）」は、動作の対象となる「ロボ太」のシミュレータＳ１と、動作が関連する「書類」のシミュレータＳ３の入力バッファ４に格納される。
【００２２】
次に、図５および図６の具体例に基づいて、図１のシミュレータＳ１、Ｓ２、Ｓ３における各部の処理動作を詳細に説明する。なお、図５はシミュレータＳ１、Ｓ２、Ｓ３の入力バッファ４の記述例であり、図６は動作定義データベース５の記述例である。
【００２３】
図５、図６は、エージェントである書類配送ロボット「ロボ太」と同じく書類配送ロボット「ロビン」の動作のシミュレーションを対象としたものである。「ロボ太」が上述の処理により、「ロボ太が書類を掴む」という動作を出力したとする。「ロビン」も同様の処理により、「ロビンが書類を掴む」という動作を出力したとする。
【００２４】
シミュレータＳ１、Ｓ２、Ｓ３の各入力バッファ４には、図５に示すように、これらエージェントが出力した動作データが一時的に格納されている。動作データ４１と４３はロボ太が出力した動作データであり、「ロボ太が書類を掴む」という動作を表している。同様に、動作データ４２と４４はロビンが出力した動作データであり、「ロビンが書類を掴む」という動作を表している。
【００２５】
動作定義データベース５には、図６に示すように、動作の名前と効果とを記述した動作定義データが格納されている。動作定義データ５１は、「掴む（Ｐｉｃｋ  Ｕｐ）」という動作の定義を記述したもので、「ｘがｙを掴む」という名前の動作によって、「ｘがｙをもっている（Ｈａｓ）ことを、ｘが信じる」という効果があることを表している。同様に、動作定義データ５２は、「移動する（Ｍｏｖｅ）」という動作の定義を記述したもので、「ｘがｙからｚに移動する」という名前の動作によって、「ｘがｚにいることを，ｘが信じる」という効果があることを表している。
【００２６】
図７は、図１の動作決定部６と動作実行部７の処理のフローチャートである。動作決定部６は、まず、入力バッファ４から全ての動作データを取り出す（ステップＳＴ６０１）。次に、ステップＳＴ６０１で取り出された全ての動作データに対し、動作定義データベース５に格納された動作定義データのうち、動作定義データの名前データが該動作データと一致する動作定義データの効果データを該動作データに付加する（ステップＳＴ６０２）。さらに、ステップＳＴ６０２で効果データを付加された動作データの集合の部分集合のうち、その要素である動作データに付加された効果データの集合が無矛盾となるような動作データの極大集合を決定する（ステップＳＴ６０３）。
【００２７】
つぎに、図５および図６の具体例を用いて、シミュレータＳ１、Ｓ２、Ｓ３のそれぞれについて、処理例を説明する。
【００２８】
シミュレータＳ１においては、まずステップＳＴ６０１において、入力バッファ４から全ての動作データが取り出される。この例では、図５の動作データ４１が取り出される。次に、ステップＳＴ６０１で取り出された全ての動作データに対し、ステップＳＴ６０２において図６の動作定義データベース５に格納された動作定義データのうち、動作定義データの名前データが該動作データと一致する動作定義データの効果データが該動作データに付加される。
【００２９】
この例では、図５の動作データ４１に対し、図６の動作定義データベース５に基づいて効果データが付加される。動作データ４１に対しては、図６の動作定義データ５１に記述された名前データが、変数ｘに「ロボ太」、変数ｙに「書類」を代入することで、一致する。したがって、動作定義データ５１に記述された効果データに対し、ｘに「ロボ太」、ｙに「書類」を代入した効果データ「Ｂ（ロボ太、Ｈａｓ（ロボ太、書類））」が動作データ４１に付加される。該効果データは、「ロボ太が書類をもっていることをロボ太が信じる」ということを表している。
【００３０】
続いてステップＳＴ６０３において、ステップＳＴ６０２で効果データを付加された動作データの集合の部分集合のうち、その要素である動作データに付加された効果データの集合が無矛盾となるような動作データの極大集合が決定される。この例では、ステップＳＴ６０２で効果データを付加された動作データの集合｛動作データ４１｝の部分集合は、｛動作データ４１｝、｛｝の２つである。このうちで、極大となる部分集合は、要素数が１個の｛動作データ４１｝であり、動作データ４１に付加されたデータは矛盾しない。従って、集合｛動作データ４１｝が、ステップＳＴ６０３において決定された動作データの集合として出力される。
【００３１】
つぎにシミュレータＳ２においては、まずステップＳＴ６０１で入力バッファ４から全ての動作データが取り出される。この例では、図５の動作データ４２が取り出される。次に、ステップＳＴ６０１で取り出された全ての動作データに対し、ステップＳＴ６０２で図６の動作定義データベース５に格納された動作定義データのうち、動作定義データの名前データが該動作データと一致する動作定義データの効果データが該動作データに付加される。
【００３２】
この例では、図５の動作データ４２に対し、図６の動作定義データ５１に記述された名前データが、変数ｘに「ロビン」、変数ｙに「書類」を代入することで一致する。したがって、動作定義データ５１に記述された効果データに対し、ｘに「ロビン」、ｙに「書類」を代入した効果データ「Ｂ（ロビン、Ｈａｓ（ロビン、書類））」が動作データ４２に付加される。該効果データは、「ロビンが書類をもっていることをロビンが信じる」ということを表している。
【００３３】
続いて、ステップＳＴ６０３において、ステップＳＴ６０２で効果データを付加された動作データの集合の部分集合のうち、その要素である動作データに付加された効果データの集合が無矛盾となるような動作データの極大集合が決定される。この例では、ステップＳＴ６０２で効果データを付加された動作データの集合｛動作データ４２｝の部分集合は、｛動作データ４２｝、｛｝の２つである。このうちで、極大となる部分集合は、要素数が１個の｛動作データ４２｝であり、動作データ４２に付加されたデータは矛盾しない。従って、集合｛動作データ４２｝が、ステップＳＴ６０３において決定された動作データの集合として出力される。
【００３４】
つぎにシミュレータＳ３においては，まずステップＳＴ６０１において、入力バッファ４から全ての動作データが取り出される。この例では、図５の動作データ４３および４４が取り出される。次に、ステップＳＴ６０２においてステップＳＴ６０１で取り出された全ての動作データに対し、図６の動作定義データベース５に格納された動作定義データのうち、動作定義データの名前データが該動作データと一致する動作定義データの効果データが該動作データに付加される。
【００３５】
この例では、図５の動作データ４３、４４に対し、図６の動作定義データベース５に基づいて効果データが付加される。動作データ４３に対しては、図６の動作定義データ５１に記述された名前データが、変数ｘに「ロボ太」、変数ｙに「書類」を代入することで一致する。従って、動作定義データ５１に記述された効果データに対し、ｘに「ロボ太」、ｙに「書類」を代入した効果データ「Ｂ（ロボ太、Ｈａｓ（ロボ太、書類））」が動作データ４３に付加される。該効果データは、「ロボ太が書類をもっていることをロボ太が信じる」ということを表している。
【００３６】
同様に、動作データ４４に対しても、図６の動作定義データ５１に記述された名前データが、変数ｘに「ロビン」、変数ｙに「書類」を代入することで、一致するので、動作定義データ５１に記述された効果データに対し、ｘに「ロビン」、ｙに「書類」を代入した効果データ「Ｂ（ロビン、Ｈａｓ（ロビン、書類））」が動作データ４４に付加される。該効果データは、「ロビンが書類をもっていることをロビンが信じる」ということを表している。
【００３７】
つぎに、ステップＳＴ６０３において、ステップＳＴ６０２で効果データを付加された動作データの集合の部分集合のうち、その要素である動作データに付加された効果データの集合が無矛盾となるような動作データの極大集合が決定される。
【００３８】
この例では、ステップＳＴ６０２で効果データを付加された動作データの集合｛動作データ４３、動作データ４４｝の部分集合は、｛動作データ４３、動作データ４４｝、｛動作データ４３｝、｛動作データ４４｝、｛｝の４つである。このうちで、極大となる部分集合は、要素数が２個の｛動作データ４３、動作データ４４｝であるが、その要素である動作データ４３、４４にそれぞれ付加された効果データは互いに矛盾する（同じ書類を、異なる配送ロボットが同時にもつことはできないため）。したがって、次の極大部分集合として、要素数が１個の｛動作データ４３｝および｛動作データ４４｝が得られる。部分集合｛動作データ４３｝の要素である動作データ４３に付加された効果データは矛盾しない。同様に、部分集合｛動作データ４４｝の要素である動作データ４４に付加された効果データも矛盾しない。無矛盾となるような動作データの極大集合が複数存在する場合には、任意の１つが選ばれる。部分集合｛動作データ４４｝が選ばれたとすると、集合｛動作データ４４｝が、ステップＳＴ６０３において決定された動作データの集合として出力される。
【００３９】
このように、オブジェクト毎に対応するシミュレータを設けることにより、動作データ間の矛盾の検出および実行可能な動作データの決定を行う事が可能となると共に、処理の障害となり得る動作の一元管理を行わないため、効率良くマルチエージェント・シミュレーションを実行できる。
【００４０】
動作実行部７は、動作決定部６によって決定された各動作データに対し、該動作データに付加された効果データを対応するエージェントの内部状態データベース１に格納する（ステップＳＴ７０１）。また、ステップＳＴ７０１で動作決定部６によって選択されなかった動作データに対し、該動作データに付加された効果データをキャンセルするためのデータを、対応するエージェントの内部状態データベース１に格納する。
【００４１】
上述の例では、シミュレータＳ１において選択された集合｛動作データ４１｝の要素である動作データ４１に付加された効果データ「Ｂ（ロボ太、Ｈａｓ（ロボ太、書類））」がエージェント「ロボ太」の内部状態データベース１に格納される。また、シミュレータＳ２において選択された集合｛動作データ４２｝の要素である動作データ４２に付加された効果データ「Ｂ（ロビン、Ｈａｓ（ロビン、書類））」がエージェント「ロビン」の内部状態データベース１に格納される。更に、シミュレータＳ３において選択された集合｛動作データ４４｝の要素である動作データ４４に付加された効果データ「Ｂ（ロビン、Ｈａｓ（ロビン、書類））」がエージェント「ロビン」の内部状態データベース１に格納される。そして、シミュレータＳ３において選択されなかった集合  ｛動作データ４３｝の要素である動作データ４３に付加された効果データ「Ｂ（ロボ太、Ｈａｓ（ロボ太、書類））」を、エージェント「ロボ太」の内部状態データベース１においてキャンセルするためのデータが格納される。
【００４２】
エージェント「ロボ太」の出力した動作「動作データ４３」がキャンセルされたことから、図３の「ロボ太」のプログラムデータ２２が正しく動作しなかった（すなわち、他のエージェントが出力した動作と矛盾した）ことを検出できる。このように、矛盾の検査を行う処理は多数のシミュレータ上で同時に並行して実行可能であり、効率よく矛盾の検査を行うことが可能となる。
【００４３】
【発明の効果】
以上のように、この発明によれば、エージェント毎に個別にシミュレータを備えていて、エージェントとシミュレータの各ペアは並行してシミュレーション処理を実行し、エージェントが出力する動作データは関連する全てのシミュレータに送られ、シミュレータ上で動作データ間の矛盾を並行して検査することができるので、効率良く動作間の矛盾の検出を行うことが可能となる効果がある。
【図面の簡単な説明】
【図１】この発明の実施の形態１に係る実施例のマルチエージェント・シミュレーションシステムの構成図である。
【図２】内部状態データベースの記述例を示す図である。
【図３】プログラムデータベースの記述例を示す図である。
【図４】プログラム解釈部の処理の流れを示すフローチャートである。
【図５】入力バッファの記述例を示す図である。
【図６】動作定義データベースの記述例を示す図である。
【図７】動作決定部および動作実行部の処理の流れを示すフローチャートである。
【符号の説明】
１  内部状態データベース、２  プログラムデータベース、３  プログラム解釈部、４  入力バッファ、５  動作定義データベース、６  動作決定部、７  動作実行部、１１，１２，１３  内部状態データ、２１，２２  プログラムデータ、４１，４２，４３，４４  動作データ、５１，５２  動作定義データ、Ａ１，Ａ２  エージェント、Ｓ１，Ｓ２，Ｓ３  シミュレータ。
【図１】
2004272693.tif 000003
【図２】
2004272693.tif 000004
【図３】
2004272693.tif 000005
【図４】
2004272693.tif 000006
【図５】
2004272693.tif 000007
【図６】
2004272693.tif 000008
【図７】
2004272693.tif 000009