(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
以下、本発明の実施形態について、説明する。なお、以下の説明に用いる図面では、同じ機能を持つ構成部や同じ処理を行うステップには同一の符号を記し、重複説明を省略する。
【0014】
<第一実施形態>
[理論的背景]
まず、行動制御装置及び方法の理論的背景について説明する。以下、行動制御の対象である制御対象物が、ロボットである場合を例に挙げて説明するが、制御対象物は、制御の対象となり得るものであれば、ロボット以外であってもよい。
【0015】
多数のロボットが協調して開始位置における隊列形成状態から移動を行い、目標位置での隊列形成を行う任務は、例えば
図7に例示するような壁で区切られた部屋においての開始位置から目標位置まで複数のロボットの移動によって実現するものである。
【0016】
任務を行うロボットは、N台(例えばN≧50)であり、各ロボットは、二次元平面におけるX軸方向及びY軸方向のそれぞれに移動可能とする。すなわち、この例では、各ロボットは、
図7の紙面に対して上下左右の四方向に移動可能とする。
図7の各格子は、それぞれのロボットの位置を示すものである。各格子にはロボットは一台しか存在することができない。それぞれのロボットは、移動しようとする方向に障害物か他のロボットがある場合には、静止をするものと仮定する。
【0017】
図7において、Rが記載された格子はロボットが存在する位置を示し、Oが記載された格子は障害物が存在する位置を示し、Fが記載された格子は目標位置を示す。また、太線の破線で囲まれた領域は開始位置を示し、太線で囲まれた領域は後述する入口位置を示す。このように、
図7においては、ロボットの開始位置での隊列形状は略長方形であり、目標位置での隊列形状は略星形である。
【0018】
それぞれのロボットi(iはロボット番号を表す)の初期位置を(Xr0[i],Yr0[i])とし、目標位置を(Xre[i],Yre[i])とするとき、初期位置に配置されたロボットが、目標位置まで移動するための行動計画を求める問題を考える。
【0019】
このような問題に対して単純にマルコフ状態遷移モデルを適用しようとする場合、マルコフ状態空間は、iをロボット番号としたとき、ロボットiの位置(Xr[i],Yr[i])、ロボットiの行動a[i]によって構成される。各状態(ロボットの位置と行動)は離散値で表現される。部屋をX,Yの直交座標系からなる2次元平面で表すと、X軸、Y軸をそれぞれ離散化表現した値により各位置を表現する。つまり、
図7のように部屋(2次元平面)は格子で区切られ、各格子が各位置に対応する。また、各格子において、障害物の「ある/なし」が予め設定されている。上述の通り、
図7では、障害物のある格子をOで示している。
【0020】
また、この例では、制御対象物である行動主体は部屋に配置されている各ロボットとなる。ロボットiの行動a[i]∈D[i]は、静止、上下左右方向への1格子分の移動の計5種類のうちの何れかを取る。すなわち、D[i]∈{0,1,2,3,4}として、各行動は例えば以下のように定義される。
0: 静止
1: 二次元平面上で右方向に1格子だけ移動する
2: 二次元平面上で上方向に1格子だけ移動する
3: 二次元平面上で左方向に1格子だけ移動する
4: 二次元平面上で下方向に1格子だけ移動する
【0021】
このような任務環境におけるマルコフ状態空間は、ロボット数×2の次元数の状態を持ち、かつ選択可能な行動数は、ロボットの行動(=5通り)のロボット数乗だけ存在する。例えば、ロボット数が50で、部屋の縦横方向の格子数がそれぞれ20であるとすれば状態数は20の100乗個にもなり、探索計算に要する資源の量は膨大なものとなる。さらにロボット数が1台増えるごとに、その状態数は400倍増加していくことになり、複数のロボットを使用する場合の大きな問題となっている。
【0022】
そこで、この実施形態では、このような状態空間の爆発をさけるために、学習に使用するマルコフ状態空間を、後述する目標エリアへの入口位置の数と同じ台数分のロボットの状態変数のみで構成することにする。すなわち、状態変数及び行動変数を以下のように定義する。
【0023】
状態変数L=(Xr,Yr),行動変数a∈{0,1,2,3,4}
N台あるすべてのロボットは、この状態変数を引数とした入口位置の数と同じM個の価値関数Q
j(L,a)(j=1,2,…,M)を共有する。すなわち、各時刻ステップにおける価値関数Q
j(L,a)の更新は、N台の各ロボットが同じ価値関数を各々の経験によって更新する(すなわち、1時刻ステップでN回の更新を行う)。更新式は以下の通りである。
【0025】
ここで、式(1)におけるαは学習率、γは割引率と呼ばれる予め定められた定数であり0<α<1、0<γ<1である。また、式(1)における←は右辺の値で左辺の値を更新することを意味する。1時刻ステップ前のロボットの位置をLとし、現在のロボット位置をL’とし、位置L'に遷移したときの報酬をr(L')とする。
【0026】
i番目のロボットについて、式(1)及び式(2)の右辺のLにi番目のロボットの位置L[i]を代入し、式(1)及び式(2)のaにi番目のロボットの行動変数a[i]を代入して、式(1)及び式(2)を実行することで価値関数及び方策を更新する。これを、各i=1,2,…,Nについて繰り返す。
【0027】
行動選択時にも、ロボットは、M個の価値関数のうちの1個の価値関数Q
j(L,a)によって導かれる方策関数π
j(L)を選択し、π
j(L)を使用して行動選択を行う。π
j(L)は、入口位置Pe[j]へたどり着くための各位置Lでの適切な行動値を返す関数である。言い換えれば、例えばロボットである制御対象物は、制御対象物がその制御対象物の現在の位置Lにおいて各行動aを取ったときの適切さを表すM個の価値関数のうちの1個の価値関数に基づいて行動制御が行われるとする。これにより、ロボットの数がどんなに増えても、学習に使用する状態空間の状態数がロボットM台分(入口位置の数M分)の状態空間の状態数と同じとなり、状態空間の大きさがロボット数に依存しないことになる。当然であるが、M=1(入口位置の数が1)であるならば、必要な状態空間の状態数は、ロボット1台分しか必要としない。
【0028】
なお、本実施形態では、各ロボットは、それぞれの位置を計測することができ、また隣の位置に他のロボットが存在しているか否か、隣の位置に障害物があるか否かを知ることができるものとする。さらにロボットは、上下左右、もしくはロボットを囲む8マスに位置するロボット同士では、通信を行うことができ、それぞれのロボットの位置の値を送受信することが可能であるとする。それにより、ロボットは、互いに接しているロボット同士の通信により、M個の入口位置Pe[j]のうち、どの入口位置がロボットに占拠されておらず空いているかを知ることができる。
【0029】
このような価値関数Q
j (L,a)を使う場合で、M=1の場合を例にとり、ひとつの価値関数Q(L,a)を使用して学習を行った場合に起こる問題を以下に述べる。例えば学習において、各目標位置においてロボットに高い報酬を与えるものとする。まず、Q(L,a)においては、1個のロボットが開始位置からどのような行動を選択していくことで、最短時刻ステップ数で目標位置に到達できるかが記述されているのであるから、π(L)に従う各ロボットは、例えば目標位置へ向かう途中の障害物を回避するときに、障害物の角にあたる同じ位置を通ろうとする傾向がある。すなわち、同じ経路に多数のロボットが殺到し、文字通りの渋滞を引き起こしてしまう。また、目標位置に早めについたロボットがその位置に静止し、後から目標位置に到着しようとするロボットの道をふさいでしまうことも起こりうる。その結果、すべてのロボットが適切に目標位置に到達することが保証できない。それをさけるために、各ロボットの開始位置を考量して、早めに目標位置に到達するロボットには遠めの目標位置を割り振るなどの処理をする方法もあるが、そのためには、各ロボットの位置をロボットの台数分だけマルコフ状態空間に組み込むことが必要となってしまい、ロボット台数が多い場合には、状態空間の深刻な増加を引き起こす。このような問題は、入口位置の数Mが1ではないときでも同様に起こるものである。
【0030】
そこで、このようなことを引き起こさないために、主に2つの方法を提案する。1つ目は包摂構造を使用した行動選択手法であり、2つ目は目標位置におけるボイド制御である。
【0031】
図8に、包摂構造を使用した行動選択手法の例の概念図を示す。
図8の〇の中にsが描かれたモジュール(以下、包摂モジュールとする)は、包摂構造における重要なキーパーツである。包摂モジュールは、上位のモジュールから入力された信号を、下位のモジュールからの信号入力がない限りはそのまま出力する。包摂モジュールは、下位のモジュールからの入力があった場合は、上位モジュールからの入力を無視し、下位モジュールの入力を出力する。
【0032】
各層のモジュールは、Qxth(x=1,2,3,4)モジュールとStopperモジュールで構成される。最下層のQxthモジュールはQ1stモジュール、第二層はQ2ndモジュール、第三層はQ3rd、第四層はQ4thモジュールである。最上層はStayComモジュールで構成される。各入口位置j用の価値関数Q
j(L,a)について以下の処理を行う。
【0033】
Q1stモジュールは、現在のロボットiの位置L=(xr[i],yr[i])を入力値として受け取り、L=(xr[i],yr[i])においてQ
j(L,a)の値を最大とするaの値をロボットiの入口位置Pe[j]に向かうための行動a[i][j]の候補として出力する。同様に、Q2ndモジュールは、現在のロボットiの位置L=(xr[i],yr[i])を入力値として受け取り、L=(xr[i],yr[i])においてQ
j (L,a)の値を2番目に大きな値とするaの値をロボットiの入口位置Pe[j]に向かうための行動a[i][j]の候補として出力する。さらに、Q3rdモジュールは、現在のロボットiの位置L=(xr[i],yr[i])を入力値として受け取り、L=(xr[i],yr[i])においてQ
j(L,a)の値を3番目に大きな値とするaの値をロボットiの入口位置Pe[j]に向かうための行動a[i][j]の候補として出力する。同様に、Q4thモジュールは、現在のロボットiの位置L=(xr[i],yr[i])を入力値として受け取り、L=(xr[i],yr[i])においてQ
j(L,a)の値を4番目に大きな値とするaの値をロボットiの入口位置Pe[j]に向かうための行動a[i][j]の候補として出力する。
【0034】
なお、各Qxthモジュールは、出力する行動の候補としてa[i][j]=0(静止)を含めないものとする。Stopperモジュールは、位置(xr[i],yr[i])に存在するロボットの隣の位置(xr[i]+1,yr[i])、(xr[i],yr[i]+1)、(xr[i]-1,yr[i])、(xr[i],yr[i]-1)に他のロボットが存在しているかどうかをチェックし、入力された値の行動によってロボットが移動する先の位置に、他のロボットが存在している場合には、何も行動値を出力しない。そうでない場合は入力された行動値をそのまま出力する。StayComモジュールは、常に静止行動a[i][j]=0を出力する。
【0035】
ここで述べた行動選択方法は、例えば、位置LにおいてQ値を最大にする行動をロボットが選択した場合に、その行動によって移動する先の格子にすでに他のロボットが存在してしまっているときに、ロボットに動作をさせずに静止させるのではなく、最適ではないにしても、次に望ましい行動を選択して、他のロボットに占拠されていない格子に移動する行動をロボットに指示するものである。
【0036】
これは、ちょうど流体が障害物にぶつかってもそこで静止せずに、障害物をよけつつも主流の方向から遠くずれない方向に流れていく性質を、ロボットに与えるものである。
【0037】
なお、
図8のモジュールが4層(第1〜第4)のレイヤで構成されているのは、この例では静止(a=0)以外でロボットの取りうる行動が4種類(a=1,2,3,4)であるとしているためである。一般には、行動の種類がV個(静止を含む)あれば、
図8のモジュールはV−1個のレイヤになる。
【0038】
以上の計算により、各ロボットiにおいて、各入口位置jに向かうための行動a[i][j]が算出された後に、ロボットにより占拠されていない入口位置に向かうための行動値a[i][j]の中で、Q
j(L,a[i][j])が最大となる行動値a[i][j]を選択して、ロボットiの行動とする。これにより、ロボットiは、まだ空いている入口位置のうち最も近いところにある入口位置を目指すのに最適な行動を選択することとなる。例えば、M個の全ての入口位置が占拠されていない場合には、M個の価値関数Q
j(L,a[i][j])の中で最大となるa[i][j]を選択する。また、全ての入口位置が占拠されている場合には、後述する最終入口位置Pe[j_last]が占拠されていないものとみなし、最終入口位置Pe[j_last]に向かうための行動値a[i][j_last]を選択する。
【0039】
次にボイド制御の原理について述べる。まず、各ロボットの目標位置をここに厳密に割り振ることをせず、目標位置全体の集合を、目標隊列エリアGと定義する。すなわち、
(Xre[i],Yre[i])∈G …(3)
として、各ロボットはG内の全ての全ての位置を自由に目標位置とすることができるものとする。つまり、Gをちょうど流体を注ぐ器のようなものとして扱う。すなわち、各ロボットは、Gの境界上にある決められた位置からGに入ることが可能であるが、一度G内に入ったロボットは、Gを出る行動をとることができないものとする。また、強化学習時における報酬の設定については、G内の境界上に複数の入口位置Pe[j]=(Xpe[j],Ype[j]) (j=1,2,…,M)を設定し、ロボットがPe[j]からG内に入ったときのみ、Q
j(L,a)の値の更新時に、高報酬であるr=1を与え、それ以外の経験については、すべてr=0を与えるものとする。Pe[j]の位置はGの内部であって、Gの境界上であればどこでも構わないが、ロボットの開始位置から近い位置を選ぶのがロボットの動作をスムーズにするうえで効果的である。Pe[j]の位置を入口位置と呼ぶ。ここで、さらにM個の入口位置のうち、一つを最終入口位置と定義し、Pe[j_last]とする。
【0040】
G内における行動選択では、ロボットは常に、最終入口位置Pe[j_last]用の行動方策関数π
j_last(L)を使用して、行動選択を行うものとする。G内での各入口位置用の価値関数Q
j(L,a)の値の更新は、G外の場合と同様に行うが、行動選択の場合は、π
j_last(L)が返す行動値をロボットの行動に伴って動く“ボイド”の動作として扱うことにする。ボイドとは、ロボットが位置Lから、L’に遷移したときに同時に、L’からLに遷移する空隙のことである。すなわち、一台のロボットがGの内部に入ったときは、同時に一つのボイドがGの外部に出ていくことになる。方策関数π
j_lastが返す値は、G内外問わずに、最終入口位置Pe[j_last]に制御対象物を導く行動となるが、ここで、ボイド制御においては、制御対象としてのロボットをボイドと入れ替えて、方策関数π
j_lastが返す値をボイドの行動として解釈し、そうしたボイドの動きを実現するためにロボットを動作させれば、必然的にロボットの動作は、最終入口位置Pe[j_last]からG内に入ったのちに最終入口位置Pe[j_last]から離れた位置を目指して、G内に分散していく動作となる。以下、そのための行動選択方法について述べる。G内において、ロボットが位置Lから、L’に遷移したときに、Q
j_lastの値は式(1)により更新される。式(1)により更新されたQ
j_lastの値によって導かれる行動方策π
j_last(Q
j_lastの値を最大化する行動を返す関数)は、ボイドのとるべき最適な行動として解釈され、ロボットは、ボイドがそのような行動をとれるように移動を行う。
【0041】
ここで、ロボットがG内に入ることが可能な位置は、各入口位置jについて、複数設定され、経由位置Et[j][h]=(Xet[j][h],Yet[j][h])(h=1,2,…,H
j)と定義される。経由位置Et[j][h]は、
図7に示すEの書かれたマスに示すように、太線で囲まれた入口位置をPe[j]としたとき(ここでは一つのみ示す。)、Pe[j]の周囲で、G外にありGに接する位置である。方策関数π
jに従い行動するロボットは、経由位置Et[j][h]を経由してのみ、G内に入ることができる。ロボットがG外からG内に入る行動をとった際のQ
j(L,a)の値の更新は、この経由位置Et[j][h]を経由した場合においてのみ行われ、それ以外の位置を経由した場合には行われないものとする。こうすることで、Q
j(L,a)の値には、経由位置Et[j][h]以外の位置を経由したG内への移動の経験が反映されないことになり、結果として、Q
j(L,a)の値から導かれたπ
j(L)が、経由位置Et[j][h]以外の位置で返す行動値が、Gに侵入する行動ではないものとなる。
【0042】
G外にありGに接している位置のうち、経由位置Et[j][h]に含まれるものとそうでないものの判別は、Q学習を行う事前の段階で計算される。経由位置Et[j][h]に含まれるべき位置とは、「Gに接するどのG外の位置からでもG内に入ることが可能という条件でQ学習をしたときに、そのQ学習の結果得られた行動方策関数π
j(L)と、本実施形態の包摂構造を使用した行動選択方法を使用してロボットが行動選択をするとして、入口位置Pe[j]以外の全てのG内の位置が他のロボットによって占拠されてしまった場合に、ある出発位置からロボットが入口位置Pe[j]にたどり着くことができるとき、そのような出発位置のうち、Gに接するすべてのG外の位置」である。そのような経由位置Et[j][h]に含まれるべき位置の求め方を2つ例示する。
【0043】
(経由位置の求め方1)
(1)L=Pe[j]のときに値0を返し、それ以外のLの値の場合(L≠Pe[j]のとき)には、入口位置Pe[j]からの縦方向の距離と、横方向の距離の差の和を返す距離関数Dist(L,j)を用意する。例えば、
図7の太枠のマスを入口位置Pe[j]とした場合、Dの位置にて、Dist(L,j)の値は、X方向の距離が3、Y方向の距離が2なので、3+2=5となる。
(2)Gに接するG外の全ての位置をEtCandidate[j][h]((h=1,2,…,H
max(H
maxは、Gに接するG外の位置の総数))とし、以下の(3)〜(6)のプロセスを繰り返す。
(3)h←1とする。
(4)Dを位置を表す変数D=(x,y)とし、位置DをEtCandidate[j][h]の位置とする。つまり、D←EtCandidate[j][h]。
(5)位置Dに上下左右で隣接する4つの位置(x+1,y),(x,y+1),(x-1,y),(x,y-1)の中に、まず、((i-a)入口位置Pe[j]である位置)がある場合、その位置をDに代入する。続いて、位置Dに上下左右で隣接する4つの位置(x+1,y),(x,y+1),(x-1,y),(x,y-1)の中に((i-b)G外の位置かつ障害物位置ではない位置であって、さらに、(ii)その位置での距離関数Distの値が、位置Dでの距離関数Dist(D,j)の値より小さい位置)がある場合、その位置をDに代入する。さらに、(6)を実行する。位置Dに上下左右で隣接する4つの位置の何れもが、(i-a)または、((i-b)かつ(ii))のいずれをも満たさなければ、EtCandidate[j][h]は経由位置Etに含まれないこととする。h=H
maxでなければ、hをインクリメントの後、(4)を実行する。h=H
maxであれば、入口位置Pe[j]に対する経由位置Et[j][h]は全て得られたと判断し、入口位置Pe[j]に対する経由位置Et[j][h]の算出を終了する。
(6)位置Dが入口位置Pe[j]に一致するかを判定し、一致しないならば、(5)に戻る。一致するならば、EtCandidate[j][h]は経由位置Et[j][h]に含まれることとする。h=H
maxでなければ、hをインクリメントの後、(4)を実行する。h=H
maxであれば、入口位置Pe[j]に対する経由位置Et[j][h]の算出を終了する。
【0044】
以上の処理を、全ての入口jに対して行う。
【0045】
(経由位置の求め方2−1)
経由位置Et[j][h]を判定するために使用する価値関数Qet_j(L,a)(j=1,2,…,M)を各入口位置Pe[j]ごとに用意し、学習において、価値関数Qj(L,a)の更新と同じタイミングにて、同様に式(1)を使用して価値関数Qet_j(L,a)を更新する。Qet_jとQjでは、報酬の与え方も同じである。Qet_jとQjの学習で異なるのは、経由位置Et[j][h]を経由しないでロボットがG内に入った場合でも、Qet_jの場合は、式(1)による値の更新を行う点である。各位置Lにおいて、Qet_j(L,a)の値の最大値を返す関数をQet_j_max(L)としたとき、上記、(1)〜(6)のプロセスにおけるDist(L,j)関数をQet_j_max(L)関数に置き換えた以下の処理によっても、同様にEt[j][h]の計算を行うことができる。この手法でEt[j][h]の計算をする場合は、学習プロセス中の各時刻ステップ毎に、Et[j][h]の更新を行う。
(1)Gに接するG外の全ての位置をEtCandidate[j][h]((h=1,2,…,H
max(H
maxは、Gに接するG外の位置の総数))とし、以下の(3)〜(6)のプロセスを繰り返す。
(2)h←1とする。
(3)Dを位置を表す変数D=(x,y)とし、位置DをEtCandidate[j][h]の位置とする。
(4)Dに上下左右で隣接する4点の中に、まず、((i-a)入口位置Pe[j]である位置)である位置が存在する場合、その位置をDに代入する。続いて、Dに上下左右で隣接する4点の中に((i-b)G外であって障害物位置ではない位置であって、かつ、(ii)その位置でのQet_j_max関数の値が、位置DでのQet_j_max関数の値より大きい位置がある)場合、その位置をDに代入する。さらに、(5)を実行する。位置Dに上下左右で隣接する4つの位置の何れもが、(i-a)、または、((i-b)かつ(ii))のいずれをも満たさなければ、EtCandidate[j][h]は経由位置Etに含まれないこととする。h=H
maxでなければ、hをインクリメントの後、(3)を実行する。h=H
maxであれば、入口位置Pe[j]に対する経由位置Et[j][h]の算出を終了する。
(5)位置Dが入口位置Pe[j]に一致するかを判定し、一致しないならば、(4)に戻る。一致するならば、EtCandidate[j][h]は経由位置Et[j][h]に含まれることとする。h=H
maxでなければ、hをインクリメントの後、(3)を実行する。h=H
maxであれば、入口位置Pe[j]に対する経由位置Et[j][h]の算出を終了する。
【0046】
以上の処理を、全ての入口jに対して行う。
【0047】
(経由位置の求め方2−2)
または、Qj(L,a)の状態Lでの最大値をQj_max(L)関数とし、上記(4)(5)の項を以下のように置き換えてもよい。
【0048】
位置DでのQet_j_max関数の値とQj_max関数の値が異なる場合、EtCandidate[j][h]は経由位置Etに含まれないこととし、等しい場合は、含まれることとする。h=H
maxでなければ、hをインクリメントの後、(3)を実行する。h=H
maxであれば、入口位置Pe[j]に対する経由位置Et[j][h]の算出を終了する。
【0049】
以上により、Gの入口位置Pe[j]を目指してやってきたロボットがPe[j]近傍にやってきたときに、Pe[j]からG内に入るよりも近道でGに入れる場合、その近道がEt[j][h]を経由するものであるならば、Et[j][h]経由でロボットがGに入るようにロボットの行動が制御されるので、Gに入ろうとするロボットがPeの一点に集中して渋滞を起こすことはない。
【0050】
(ボイド制御に関して)
次にG内での行動選択について述べる。G内においてもGの外部と同様に、包摂構造による行動選択を行うが、Qxthモジュールの動作がGの内部では異なる。G内部では、Qxthモジュールは、まずロボット位置Lの隣の位置(xr[i]+1,yr[i])、(xr[i],yr[i]+1)、(xr[i]-1,yr[i])、(xr[i],yr[i]-1)にある各ボイドについてQ
j_last値を最大化する行動が、ボイドを現在のロボット位置に向かわせるようになっているボイドを、候補ボイドとして複数選択する。つづいて、それらの候補ボイドの中から、Qmaxの値(式(1)で定義されるQ関数の最大値)をx番目に小さくするものをターゲットボイドとして一つ選択し、選択したターゲットボイドにロボットを向かわせる行動の値を出力する。このようにすることで、ロボットを動かして適切にボイドを最終入口位置Pe[j_last]に誘導し、常に後からGに入ってこようとするロボットに入口を空いた状態に確保することができる。
【0051】
なお、Qxthモジュールの設計についてはいくつかオプションがあり、例えば、候補ボイドの中からターゲットボイドを選択する手法としてとして、候補ボイドの中からQmaxの値をx番目に大きくするものをターゲットボイドとして一つ選択する手法や、候補ボイドにロボットを向かわせる行動の中から行動番号の小さいものをロボットの行動として出力するなどの色々な方法があり得る。
【0052】
[行動制御装置及び方法]
図を参照して、行動制御装置及び方法の例について説明する。この行動制御装置及び方法は、複数の制御対象物を所定の入口位置を含む目標位置の集合に移動させるための行動制御を行うものである。
【0053】
行動制御装置は、
図1に示すように、学習部1、記憶部2及びスケジューリング部3を例えば備えている。
【0054】
学習部1は、
図2に示すように、入力部11、行動割当部12、位置更新部13及び制御部14、経由位置計算部111を例えば備えている。
【0055】
スケジューリング部3は、
図6に示すように、初期状態入力部31、行動割当部32、位置更新部33、目標位置到達判定部34を例えば備えている。
【0056】
以下では、制御の対象となる制御対象物が、ロボットである場合を例に挙げて説明する。もちろん、制御対象物は、制御の対象となり得るものであれば、ロボット以外であってもよい。
【0057】
まず、行動制御装置の学習部1による学習ステップの処理について説明する。学習ステップの処理の流れの例を、
図9に示す。
【0058】
<入力部11>
入力部11には、N台のロボットのそれぞれの初期位置(xr0[i],yr0[i])及び目標位置(Xre[i],Yre[i])が入力される。ここで、i=1,2,…,Nとする。N個の目標位置の集合は、G={(Xre[1],Yre[1]),(Xre[2],Yre[2]),…,(Xre[N],Yre[N])}として記憶部2に記憶される。
【0059】
N台のロボットのそれぞれについて、入力された初期位置の情報を用いて、i番目のロボットの初期位置L[i]=(xr0[i], yr0[i])を設定し、i番目のロボットの初期位置を記憶部2に記憶する。
【0060】
なお、目標位置は、M個の入口位置Pe[j]=(Xpe[j],Ype[j])(j=1,2,…M)を含み、M個の入口位置は最終入口位置Pe[j_last]を含むとする。入力部11から入力され、記憶部2に記憶されるとする。
【0061】
<経由位置計算部111>
経由位置計算部111では、上述の経由位置の求め方1、2−1及び2−2の何れかによって経由位置Et[j][h]を計算し、計算結果を記憶部2に記憶する。
【0062】
<記憶部2>
記憶部2には、M個の入口位置Pe[j]、最終入口位置Pe[j_last]、位置L及びa∈{0,1,2,3,4}の組み合わせのそれぞれについてのQ関数Q
j(L,a)、各位置Lについての方策π
j (L)の初期値が記憶されているとする。経由位置の求め方2−1、2−2により経由位置を求める場合には、Q関数Qet_j(L,a)の初期値が記憶されているとする。Q関数の初期値は、例えば0を設定すればよい。経由位置計算部111で求めた経由位置Et[j][h]=(Xet[j][h],Yet[j][h])の値も記憶されているものとする。Lの取りうる範囲は、対象となる二次元平面上の領域内の全ての座標である。ただし、Lが障害物位置と合致する場合は、Q(L,a)=0と設定してもよい。
【0063】
各位置Lの報酬r(L)についても、記憶部2に記憶されているとする。各位置Lの報酬r(L)についての情報は、例えば入力部11から入力される。
【0064】
<行動割当部12>
行動割当部12による行動割当処理は、各ロボットについて順次実行される。行動割当部12は、第1割当部12−1,第2割当部12−2,…,第i割当部12−i,…,第N割当部12−Nを例えば備えている。
【0065】
i=1,2,…,Nとして、i番目のロボットの行動についての行動割当処理は、第i割当部12−iが例えば行うとする。第i割当部12−iの構成の例を
図3に示す。第i割当部12−iは、位置判定部12−i−1と、M個の第j目的領域外行動決定部12−i−2−jと、目的領域内行動決定部12−i−3と、目標入口位置決定部12−i−4とを含む。以下、各部の処理例を説明する。
【0066】
≪位置判定部12−i−1≫
位置判定部12−i−1は、記憶部2からi番目のロボットの位置(xr[i],yr[i])を読み込み、読み込んだ位置(xr[i],yr[i])が目的位置の集合G内に含まれるか否かを判定する。言い換えれば、位置判定部12−i−1は、ロボットが目標位置に位置するか判定する(ステップA1)。
【0067】
位置判定部12−i−1は、位置(xr[i],yr[i])が目的位置の集合G内に含まれない場合は第j目的領域外行動決定部12−i−2―jが次の処理を実行し、(xr[i],yr[i])が目的位置の集合G内に含まれる場合は目的領域内行動決定部12−i−3が次の処理を実行するよう制御する。
【0068】
また、位置判定部12−i−1は、位置(xr[i],yr[i])が目的位置の集合G内に含まれない場合は、M個の第j目的領域外行動決定部12−i−2―jから出力される行動値がそれぞれ目標入口位置決定部12−i−4に入力され、(xr[i],yr[i])が目的位置の集合G内に含まれる場合は、目的領域内行動決定部12−i−3から出力される行動値が位置更新部13に入力されるよう制御する。
【0069】
≪第j目的領域外行動決定部12−i−2−j≫
第j目的領域外行動決定部12−i−2−jの構成の例を
図4に示す。
【0070】
第j目的領域外行動決定部12−i−2−jは、
図8の行動選択手法に基づいて行動を決定するものである。すなわち、第j目的領域外行動決定部12−i−2−jは、ロボットが目標位置に位置しないと判定された場合には、ロボットが入口位置Pe[j]に向かうことを理想的な状態としてロボットの現在の位置に基づいて価値関数Q
j(L,a)を更新し、ロボットが移動可能な位置の中で更新後の価値関数Q
j(L,a)の値が最も大きい位置に移動する行動をロボットの行動として決定する(ステップA2)。
【0071】
〔領域外Q関数更新部12−i−2−j−1〕
領域外Q関数更新部12−i−2−j−1は、1時刻ステップ前のi番目のロボット位置をL=(xr[i],yr[i])とし、現在のi番目のロボット位置をL‘=(xr’[i],yr’[i])とし、記憶部2に記憶されたQ
j(L,a)とQ
j(L’,a)を参照して、1時刻ステップ前のロボットの行動aについて、式(1)によりQ
j(L,a)を求め、求めたQ
j(L,a)の値で記憶部2に記憶されたQ
j(L,a)の値を更新する。また、領域外Q関数更新部12−i−2−j−1は、更新前のQ
j(L,a)の値と更新後のQ
j(L,a)の値を制御部14へ出力する。
【0072】
さらに、経由位置の求め方2−1、2−2により経由位置を求める場合には、記憶部2に記憶されたQet_j(L,a)とQet_j(L’,a)を参照して、1時刻ステップ前のロボットの行動aについて、式(1)によりQet_j(L,a)を求め、求めたQet_j(L,a)の値で記憶部2に記憶されたQet_j(L,a)の値を更新する。
【0073】
また、領域外Q関数更新部12−i−2−j−1は、更新されたQ
j(L,a)の値を用いて、式(2)により方策π
j(L)を求め、求めたπ
j(L)の値で記憶部2に記憶された方策π
j(L)を更新する。
【0074】
〔第1領域外行動候補決定部12−i−2−j−2〕
第1領域外行動候補決定部は、L=(xr[i],yr[i])として、記憶部2に記憶されたQ
j(L,1),Q
j(L,2),Q
j(L,3),Q
j(L,4)のうちの最大値をとるaの値を第1領域外行動候補値として出力する。
【0075】
〔第1領域外包摂制御部12−i−2−j−3〕
第1領域外包摂制御部12−i−2−j−3は、第1領域外行動候補決定部12−i−2−j−2で決定された第1領域外行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか否かを判定する。
【0076】
第1領域外包摂制御部12−i−2−j−3は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、障害物が存在する場合には、第2領域外行動候補決定部12−i−2−j−4が次の処理を実行するよう制御する。
【0077】
第1領域外包摂制御部12−i−2−j−3は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しないか、かつ、障害物が存在しない場合には、第1領域外行動候補値を「第j入口位置用行動値a_gate[i][j]」として出力する。
【0078】
〔第2領域外行動候補決定部12−i−2−j−4〕
第2領域外行動候補決定部12−i−2−j−4は、L=(xr[i],yr[i])として、記憶部2に記憶されたQ
j(L,1),Q
j(L,2),Q
j(L,3),Q
j(L,4)のうちの2番目に大きな値をとるaの値を第2領域外行動候補値として出力する。
【0079】
〔第2領域外包摂制御部12−i−2−j−5〕
第2領域外包摂制御部12−i−2−j−5は、第2領域外行動候補決定部12−i−2−j−4で決定された第2領域外行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか否かを判定する。
【0080】
第2領域外包摂制御部12−i−2−j−5は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、障害物が存在する場合には、第3領域外行動候補決定部12−i−2−j−6が次の処理を実行するよう制御する。
【0081】
第2領域外包摂制御部12−i−2−j−5は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しないか、かつ、障害物が存在しない場合には、第2領域外行動候補値を「第j入口位置用行動値a_gate[i][j]」として出力する。
【0082】
〔第3領域外行動候補決定部12−i−2−j−6〕
第3領域外行動候補決定部12−i−2−j−6は、L=(xr[i],yr[i])として、記憶部2に記憶されたQ
j(L,1),Q
j(L,2),Q
j(L,3),Q
j(L,4)のうちの3番目に大きな値をとるaの値を第3領域外行動候補値として出力する。
【0083】
〔第3領域外包摂制御部12−i−2−j−7〕
第3領域外包摂制御部12−i−2−j−7は、第3領域外行動候補決定部12−i−2−j−6で決定された第3領域外行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか否かを判定する。
【0084】
第3領域外包摂制御部12−i−2−j−7は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、障害物が存在する場合には、第4領域外行動候補決定部12−i−2−j−8が次の処理を実行するよう制御する。
【0085】
第3領域外包摂制御部12−i−2−j−7は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しないか、かつ、障害物が存在しない場合には、第3領域外行動候補値を「第j入口位置用行動値a_gate[i][j]」として出力する。
【0086】
〔第4領域外行動候補決定部12−i−2−j−8〕
第4領域外行動候補決定部12−i−2−j−8は、L=(xr[i],yr[i])として、記憶部2に記憶されたQ
j(L,1),Q
j(L,2),Q
j(L,3),Q
j(L,4)のうちの4番目に大きな値をとる(つまり、最小値をとる)aの値を第4領域外行動候補値として出力する。
【0087】
〔第4領域外包摂制御部12−i−2−j−9〕
第4領域外包摂制御部12−i−2−j−9は、第4領域外行動候補決定部12−i−2−j−8で決定された第4領域外行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k])(i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか否かを判定する。
【0088】
第4領域外包摂制御部12−i−2−j−9は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、障害物が存在する場合には、a=0(静止)を「行動値」として出力する。
【0089】
第4領域外包摂制御部12−i−2−j−9は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しないか、かつ、障害物が存在しない場合には、第4領域外行動候補値を「第j入口位置用行動値a_gate[i][j]」として出力する。
【0090】
≪目標入口位置決定部12−i−4≫
目標入口位置決定部12−i−4は、M個の第j目的領域外行動決定部12−i−2−jからそれぞれ第j入口位置用行動値a_gate[i][j]を受け取る。また、各ロボットの位置情報を受け取り、ロボットにより占拠されていない入口位置の情報を求める。なお、ロボットにより占拠されていない入口の番号の集合を、非占拠入口集合Pe_not_occupied∈{0,1,…}とする。例えば、各ロボットの位置情報と記憶部2に格納されている入口位置Pe[j]とが一致するか否かにより、容易に非占拠入口集合Pe_not_occupiedを求めることができる。ここで、最終入口位置j_lastを常に非占拠入口集合Pe_not_occuppiedに含めるようにしてもよい。このような構成とすることで、全ての入口位置が占拠されている場合であっても各ロボットは、行き先を失わずに、効率的に行動を選択することができる。続いて、Pe_not_occupiedに含まれている入口位置に向かうための行動値a_gate[i][j]の中で、Q
j(L,a_gate[i][j])が最大となる行動値a_gate[i][j]を選択して、ロボットiの行動a[i]として決定し、出力する。
【0091】
≪目的領域内行動決定部12−i−3≫
目的領域内行動決定部12−i−3の詳細構成を
図5に示す。
【0092】
目的領域内行動決定部12−i−3は、ロボットが目標位置に位置すると判定された場合には、M個の入口位置の内の1つである最終入口位置を占拠しないように移動する行動をロボットの行動として決定し(ステップA3)、出力する。
【0093】
目的領域内行動決定部12−i−3は目的領域外行動決定部12−i−2と同様に
図8の行動選択手法に基づいて行動を決定するものである。ただし、目的領域内行動決定部12−i−3ではボイド制御も組み込んだ処理が行われる。
【0094】
例えば、目的領域内行動決定部12−i−3は、ロボットが目標位置に位置すると判定された場合には、ロボットの移動に伴ってそのロボットと位置が入れ替わる仮想的な存在であるボイドが最終入口位置Pe[j_last]に向かうことを理想的な状態として、ロボットの現在の位置に基づいて価値関数を更新し、ロボットの現在の位置Lに移動可能な位置であるボイド位置の中で更新後の価値関数の値を最大にする行動が位置Lに移動する行動である位置を候補ボイド位置とし、その最大にする行動に対応する更新後の価値関数の値を候補ボイドQ関数値として、候補ボイド位置の中でロボットが移動可能な位置であり候補ボイドQ関数値が最小である位置に移動する行動をロボットの行動として決定する。
【0095】
〔領域内Q関数更新部12−i−31〕
領域内Q関数更新部12−i−31は、1ステップ前のi番目のロボットの位置(xr[i],yr[i])をLとし、現在のi番目のロボット位置をL’として、以下の処理を行う。
(1)もし、LがG外の場合には、各入口位置j用価値関数Q
j(L,a)について、Lが第j入口位置用の経由位置Et[j][h](h=1,2,…,Hj)のいずれかの位置と一致するか否かを判定し、一致する場合のみ、記憶部2に記憶されたQ
j(L,a)とQ
j(L’a)を参照して、1時刻ステップ前のロボットの行動aについて、式(1)によりQ
j(L,a)を求め、求めたQ
j(L,a)の値で記憶部2に記憶されたQ
j(L,a)の値を更新する。なお、Lが第j入口位置用の経由位置Et[j][h]のいずれとも一致しない場合には、Q
j(L,a)の値を更新しない。
(2)もし、LがG内の場合には、各入口位置j用価値関数Q
j(L,a)について、記憶部2に記憶されたQ
j(L,a)とQ
j(L’a)を参照して、1時刻ステップ前のロボットの行動aについて、式(1)によりQ
j(L,a)を求め、求めたQ
j(L,a)の値で記憶部2に記憶されたQ
j(L,a)の値を更新する。
【0096】
また、各j値について、記憶部2に記憶されたQ
j(L,a)とQ
j(L’,a)を参照して、式(1)によりQ
j(L,a)を求め、求めたQ
j(L,a)の値で記憶部2に記憶されたQ
j(L,a)の値を更新する。
【0097】
さらに、経由位置の求め方2−1、2−2により経由位置を求める場合には、記憶部2に記憶されたQet_j(L,a)とQet_j(L’a)を参照して、1時刻ステップ前のロボットの行動aについて、式(1)によりQet_j(L,a)を求め、求めたQet_j(L,a)の値で記憶部2に記憶されたQet_j(L,a)の値を更新する。
【0098】
領域内Q関数更新部12−i−31は、更新前のQ
j(L,a)と更新後のQ
j(L,a)を制御部14に出力する。また、式(2)により記憶部2に記憶された方策π
j(L)の値を更新する。
【0099】
〔候補ボイド集合生成部12−i−32〕
候補ボイド集合生成部12−i−32は以下の(1)から(3)の処理を行う。
【0100】
(1)i番目のロボットの位置(xr[i],yr[i])に隣接する位置(xr[i]+1,yr[i])、(xr[i],yr[i]+1)、(xr[i]-1,y[ri])、(xr[i],yr[i]-1)の各々をボイド位置L’として、各位置L’において、最終入口位置Pe[j_last]用の価値関数Q
j_last(L’,a
-1)[a
-1=0,1,2,3,4]のうち最大値をとるQ
j_last(L’,a
-1)を「候補ボイドQ関数値」として決定する。またこのときのa
-1の値を「L’における候補ボイド行動」として決定する。
【0101】
(2)上記(1)で求めた各L’における候補ボイド行動のうち、候補ボイド行動に従ってL’からボイドが移動したと仮定したときの移動後の位置がi番目のロボットの位置(xr[i], yr[i])となるL’の集合を「候補ボイド位置集合」として求める。
【0102】
(3)上記(2)で求めた「候補ボイド位置集合」に含まれる各候補ボイド位置L’と、L’における候補ボイドQ関数値と、L’における候補ボイド行動との組からなる集合を「候補ボイド集合」として、第1領域内行動候補決定部12−i−33に出力する。
【0103】
〔第1領域内行動候補決定部12−i−33〕
第1領域内行動候補決定部12−i−33は、「候補ボイド集合」から候補ボイドQ関数値が最小となる候補ボイドQ関数値に対応する候補ボイド位置L’を「第1ターゲット位置」として決定する。
【0104】
i番目のロボットの位置(xr[i], yr[i])から、上記(2)で決定された第1ターゲット位置へ移動する行動を第1領域内行動候補値として出力する。
【0105】
〔第1領域内包摂制御部12−i−34〕
第1領域内包摂制御部12−i−34は、第1領域内行動候補決定部12−i−33で決定された第1領域内行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか、位置(xr’[i],yr’[i])がGの外部であるか否かを判定する。
【0106】
第1領域内包摂制御部12−i−34は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、位置(xr’[i],yr’[i])に障害物が存在するか、または、位置(xr’[i],yr’[i])がGの外部である場合には、第2領域内行動候補決定部が次の処理を実行するよう制御する。
【0107】
第1領域内包摂制御部12−i−34は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しない場合、かつ、位置(xr’[i],yr’[i])に障害物が存在しない場合、かつ、位置(xr’[i],yr’[i])がGの外部でない場合には、第1領域内行動候補値を「行動値」として出力する。
【0108】
〔第2領域内行動候補決定部12−i−35〕
第2領域内行動候補決定部12−i−35は、「候補ボイド集合」から候補ボイドQ関数値が2番目に小さな値をとる候補ボイドQ関数値に対応する候補ボイド位置L’を「第2ターゲット位置」として決定する。
【0109】
i番目のロボットの位置(xr[i],yr[i])から、上記(2)で決定された第2ターゲット位置へ移動する行動を第2領域内行動候補値として出力する。
【0110】
〔第2領域内包摂制御部12−i−36〕
第2領域内包摂制御部12−i−36は、第2領域内行動候補決定部12−i−35で決定された第2領域内行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか、位置(xr’[i],yr’[i])がGの外部であるか否かを判定する。
【0111】
第2領域内包摂制御部12−i−36は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、位置(xr’[i],yr’[i])に障害物が存在するか、または、位置(xr’[i],yr’[i])がGの外部である場合には、第3領域内行動候補決定部12−i−37が次の処理を実行するよう制御する。
【0112】
第2領域内包摂制御部12−i−36は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しない場合、かつ、位置(xr’[i],yr’[i])に障害物が存在しない場合、かつ、位置(xr’[i],yr’[i])がGの外部でない場合には、第2領域内行動候補値を「行動値」として出力する。
【0113】
〔第3領域内行動候補決定部12−i−37〕
第1領域内行動候補決定部12−i−37は、「候補ボイド集合」から候補ボイドQ関数値が3番目に小さな値をとる候補ボイドQ関数値に対応する候補ボイド位置L’を「第3ターゲット位置」として決定する。
【0114】
i番目のロボットの位置(xr[i],yr[i])から、上記(2)で決定された第3ターゲット位置へ移動する行動を第3領域内行動候補値として出力する。
【0115】
〔第3領域内包摂制御部12−i−38〕
第3領域内包摂制御部12−i−38は、第3領域内行動候補決定部12−i−37で決定された第3領域内行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか、位置(xr’[i],yr’[i])がGの外部であるか否かを判定する。
【0116】
第3領域内包摂制御部12−i−38は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、位置(xr’[i],yr’[i])に障害物が存在するか、または、位置(xr’[i],yr’[i])がGの外部である場合には、第4領域内行動候補決定部12−i−39が次の処理を実行するよう制御する。
【0117】
第3領域内包摂制御部12−i−38は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しない場合、かつ、位置(xr’[i],yr’[i])に障害物が存在しない場合、かつ、位置(xr’[i],yr’[i])がGの外部でない場合には、第3領域内行動候補値を「行動値」として出力する。
【0118】
〔第4領域内行動候補決定部12−i−39〕
第4領域内行動候補決定部12−i−39は、「候補ボイド集合」から候補ボイドQ関数値が4番目に小さな値をとる候補ボイドQ関数値に対応する候補ボイド位置L’を「第4ターゲット位置」として決定する。
【0119】
i番目のロボットの位置(xr[i],yr[i])から、上記(2)で決定された第4ターゲット位置へ移動する行動を第4領域内行動候補値として出力する。
【0120】
〔第4領域内包摂制御部12−i−310〕
第4領域内包摂制御部12−i−310は、第4領域内行動候補決定部12−i−39で決定された第4領域内行動候補値に従ってi番目のロボットが移動すると仮定したときの移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか否かを判定する。つまり、(xr’[i],yr’[i])=(xr[k],yr[k]) (i≠k)となるkが存在するか否かを判定する。さらに、位置(xr’[i],yr’[i])に障害物が存在するか、位置(xr’[i],yr’[i])がGの外部であるか否かを判定する。
【0121】
第4領域内包摂制御部12−i−310は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在するか、または、位置(xr’[i],yr’[i])に障害物が存在するか、または、位置(xr’[i],yr’[i])がGの外部である場合には、a=0(静止)を「行動値」として出力する。
【0122】
第4領域内包摂制御部12−i−310は、移動後の位置(xr’[i],yr’[i])に他のロボットが存在しない場合、かつ、位置(xr’[i],yr’[i])に障害物が存在しない場合、かつ、位置(xr’[i],yr’[i])がGの外部でない場合には、第4領域内行動候補値を「行動値a[i]」として出力する。
【0123】
以上の処理により、第i割当部12−i−310からは、i番目のロボットが現在の位置(xr[i],yr[i])において選択する行動に対応する値である行動値a[i]∈{0,1,2,3,4}が出力される。ゆえに、行動割当部12からは、N個のロボットがそれぞれ現在の位置において選択する行動値a[i]が出力される。
【0124】
なお、1時刻ステップの行動割当の結果、あるロボットと他のロボットとが同じ位置に移動しようとする場合が生じる。このような場合には、従来の様々な行動制御方法を用いて制御をすればよい。例えば、番号iの小さいものの行動を優先する。また、1時刻ステップでN個のロボットの行動を割り当てるのではなく、1個のロボットの行動を割り当てることで、上述の問題が生じるのを避けることができる。
【0125】
<位置更新部13>
位置更新部13は、各i=1,2,…,Nについて、i番目のロボットの現在の位置(xr[i],yr[i])において、行動割当部12から出力された行動値a[i]に対応する行動をとった場合のロボットの移動後(行動後)の位置(xr’[i],yr’[i])を計算し、計算された(xr’[i],yr’[i])で記憶部2に格納されたi番目のロボットの位置を更新する。言い換えれば、位置更新部13は、行動割当部12によって決定された行動に基づいて例えばロボットである制御対象物のそれぞれの位置を更新する(ステップA4)。更新後の位置の系列{(xr’[1],yr’[1]),(xr’[2],yr’[2]),…,(xr’[N],yr’[N])}は、制御部14に入力される。
【0126】
<制御部14>
制御部14は、行動割当部12と位置更新部13との処理を繰り返し行うように制御する(ステップA5)。
【0127】
制御部14は、所定の終了条件を満たすまで、行動割当部12と位置更新部13との処理を繰り返し行うように制御する。例えば、制御部14は、第i割当部(言い換えると、M個の第j目的領域外行動決定部12−i−2−jの何れか又は目的領域内行動決定部12−i−3)から出力されたN個の行動値a[i]に対応するすべての更新前のQ関数と更新後のQ関数とから構成される組について、更新前Q関数の値と更新後Q関数の値の差が所定の閾値以下となるまで、行動割当部12及び位置更新部13の処理を実行するよう制御する。この場合の終了条件は、更新前Q関数の値と更新後Q関数の値の差が所定の閾値以下となることである。
【0128】
すべての更新前のQ関数と更新後のQ関数とから構成される組について、更新前Q関数の値と更新後Q関数の値の差が所定の閾値以下となったら、行動制御装置の学習部1による学習ステップの処理は終了する。
【0129】
次に、行動制御装置のスケジューリング部3による行動スケジュールステップの処理について説明する。以下、学習部1と異なる部分を中心に説明し、学習部1と同様の部分については重複説明を省略する。
【0130】
行動スケジュールステップの処理の流れの例を、
図10に示す。
【0131】
<スケジューリング部3>
スケジューリング部3は、以上の学習部1の処理により得られたQ関数と方策とを用いて、N台の実ロボットが初期位置から目的の隊列を形成するための各ロボットの行動計画を決定する。スケジューリング部の詳細構成を
図6に示す。スケジューリング部3は、初期状態入力部31と行動割当部32と位置更新部33と目標位置到達判定部34とを含む。
【0132】
≪初期状態入力部31≫
初期状態入力部31には、N台のロボットのそれぞれの初期位置(xr0[i], yr0[i])[i=1,2,…,N]が入力される。
【0133】
≪行動割当部32≫
行動割当部32の処理は学習部1の行動割当部12と同様である。i=1,2,…,Nとして、第i割当部32−iは、学習部1の行動割当部12の第i割当部12−iと同様である。
【0134】
ただし、行動割当部32は、ここでは各iについて決定された行動a[i]を現在の時刻tにおいてi番目のロボットが選択する行動a
t[i]として記憶部2に格納する。これにより、記憶部2には時刻tまでの各時刻でi番目のロボットが選択する行動の系列(行動系列)A[i]={a
1[i],a
2[i],…,a
t−1[i]}が格納されることになる。
【0135】
また、学習部1の行動割当部12ではa[i]を決定するだけでなく、Q関数の値と方策の値の更新も行っているが、スケジューリング部3の行動割当部32ではQ関数の値と方策の値の更新を行う必要はない。
【0136】
Q関数の値の更新を行わない場合には、行動割当部32の位置判定部は、ロボットが目標位置に位置するか判定する(ステップB1)。行動割当部32の第j目的領域外行動決定部と目標入口位置決定部とは、ロボットが目標位置に位置しないと判定された場合には、ロボットが移動可能な位置の中で価値関数の値が最も大きい位置に移動する行動をロボットの行動として決定する(ステップB2)。目的領域内行動決定部は、ロボットが目標位置に位置すると判定された場合には、ロボットの現在の位置Lに移動可能な位置であるボイド位置の中で価値関数の値を最大にする行動が位置Lに移動する行動である位置を候補ボイド位置とし、その最大にする行動に対応する価値関数の値を候補ボイドQ関数値として、候補ボイド位置の中でロボットが移動可能な位置であり候補ボイドQ関数値が最小である位置に移動する行動をロボットの行動として決定する(ステップB3)。
【0137】
≪位置更新部33≫
位置更新部33の処理は、学習部1の位置更新部13と同様である。すなわち、位置更新部33は、行動割当部32によって決定された行動に基づいて例えばロボットである制御対象物のそれぞれの位置を更新する(ステップB4)。
【0138】
≪目標位置到達判定部34≫
目標位置到達判定部34は、各i=1,2,…,Nについて、位置更新部33から出力された更新後の位置(xr’[i],yr’[i])∈Gであるか否かを判定し、全てのiについて(xr’[i],yr’[i])∈Gである場合には、現在記憶部2に記憶されている行動系列A[i]={a
1[i],a
2[i],…,a
t−1[i],a
t[i]}をスケジューリング結果として出力する。少なくとも1つ以上のiについて(xr’[i],yr’[i])∈Gを満たさない場合には、目標位置到達判定部34は、行動割当部32及び位置更新部33を再度実行するよう制御する(ステップB5)。
【0139】
<効果>
このような構成とすることで、ボイド制御により、任意形状の隊列制御が可能となる。また、M個の価値関数のみで制御対象物を制御することができるため、計算負荷を従来よりも低くすることができる。さらに、経由位置から目標位置への進入を可能とすることで、目標位置に入ろうとするロボットが入口位置に集中して渋滞を起こすことを低減することができる。
【0140】
[変形例等]
なお、行動制御装置は、制御対象物の何れかに実装してもよいし、他の装置(サーバ)に実装してもよい。また、学習部1とスケジューリング部3とを別々の装置に実装し、学習部1での処理の結果を、スケジューリング部3を備える装置の記憶部内に記憶してもよい。また、前述の通り、制御対象物は、制御の対象となり得るものであればよく、例えば、仮想的なものであってもよい。例えば、行動制御装置をコンピュータ上に実装し、同じコンピュータ上で動く仮想的なロボットに対して、本実施形態の処理を実行する。つまり、仮想的なロボットに対して、学習部1及びスケジューリング部3の処理を行う。その結果得られるN個の行動系列A[i]={a
1[i],a
2[i],…,a
t−1[i],a
t[i]}を記憶部2から取り出し、実体のN個のロボットにその行動系列A[i]に沿った行動を実行させてもよい。
【0141】
また、ロボットの位置情報の取得方法としては様々な方法が考えられる。例えば、当該行動制御装置がロボットの内の何れかに実装され、1時刻ステップの前後において、ロボット同士が常に接した状態を維持する場合には、ロボット同士の通信により、どの入口位置がロボットに占拠されておらず空いているかを知ることができる。また、各ロボットがより広い範囲で通信を行うことができるのであれば、ロボット同士が常に接した状態を維持する必要はなく、位置情報を管理するサーバ等を設けてもよい。
【0142】
本実施形態では、目標位置の個数と制御対象物の個数とが同一であったが、制御条件に応じて適宜変更してもよい。例えば、N'(>N)個の目標位置にN個の制御対象物を移動させるための行動制御を行ってもよい。また、例えば、N'(<N)個の目標位置にN個の制御対象物の内のN'個を移動させるための行動制御を行ってもよい。何れの場合であっても、第一実施形態の行動制御方法で実現することができる。
【0143】
第j目的領域外行動決定部12−i−2−jが4層(第1〜第4)のレイヤで構成されているのは、上記の例では静止(a=0)以外でロボットの取りうる行動が4種類(a=1,2,3,4)であるとしているためである。一般には、行動の種類がV個(静止を含む)あれば、第j目的領域外行動決定部12−i−2−jはV-1個のレイヤになる。目的領域内行動決定部12−i−3、行動割当部32に含まれる第j目的領域外行動決定部及び目的領域内行動決定部についても同様である。
【0144】
この発明は上述の実施形態に限定されるものではなく、この発明の趣旨を逸脱しない範囲で適宜変更が可能である。また、上記実施形態において説明した処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されるとしてもよい。
【0145】
また、上記実施形態において説明したハードウェアエンティティにおける処理機能をコンピュータによって実現する場合、ハードウェアエンティティが有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記ハードウェアエンティティにおける処理機能がコンピュータ上で実現される。
【0146】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)等を、光磁気記録媒体として、MO(Magneto-Optical disc)等を、半導体メモリとしてEEP−ROM(Electronically Erasable and Programmable-Read Only Memory)等を用いることができる。
【0147】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0148】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0149】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ハードウェアエンティティを構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。