(57)【要約】【課題】タスクに応じたアクションを適切な時間間隔において選択して指示できるようにする。【解決手段】本制御方法は、（Ａ）ノード間の辺に、次に実行すべきアクションとさらに次に実行すべきアクションを選択するまでの時間とを対応付けた、アクション及び時間を選択する木探索のための探索木において、新たなノードを追加しつつ、第１の評価式の値でノードを探索する探索処理を、前回実行された探索処理において選択されたノードへの辺に対応付けられた時間中に実行するステップと、（Ｂ）今回実行された探索処理において選択されたノードへの辺に対応付けられたアクションを、制御対象物に実行させるステップとを含む。【選択図】図２
2020009122.tif 000002
【特許請求の範囲】
【請求項１】
ノード間の辺に、次に実行すべきアクションとさらに次に実行すべきアクションを選択するまでの時間とを対応付けた、アクション及び時間を選択する木探索のための探索木において、新たなノードを追加しつつ、第１の評価式の値でノードを探索する探索処理を、前回実行された探索処理において選択されたノードへの辺に対応付けられた時間中に実行するステップと、
今回実行された探索処理において選択されたノードへの辺に対応付けられたアクションを、制御対象物に実行させるステップと、
を、１又は複数のプロセッサに実行させるための制御プログラム。
【請求項２】
前記次に実行すべきアクションが、有限の連続値の中の一つの値に対応し、
前記さらに次に実行すべきアクションを選択するまでの時間が、有限の連続する時間内の一つの値である
請求項１記載の制御プログラム。
【請求項３】
前記探索処理に含まれる前記新たなノードを追加する処理が、
前記次に実行すべきアクションと前記時間とで張られる空間において、当該空間に含まれる領域の包含関係を階層的に表し、各領域に対応するノードを有する第２の探索木において、第２の評価式の値でノードを前記第２の探索木のルートノードからリーフノードまで選択するステップと、
選択された前記リーフノードに対応する領域内において点を選択するステップと、
選択された前記点についてのアクション及び時間が対応付けられた辺で繋がるノードを前記探索木において追加するステップと、
を含む請求項２記載の制御プログラム。
【請求項４】
前記探索処理に含まれる前記新たなノードを追加する処理が、
選択された前記リーフノードに対応する領域を、前記空間の次元数を指数とする所定数（２以上の自然数）のべき乗個に分割することで生成された新たな領域に対応するリーフノードを、前記第２の探索木に追加するステップ
をさらに含む請求項３記載の制御プログラム。
【請求項５】
ノード間の辺に、次に実行すべきアクションとさらに次に実行すべきアクションを選択するまでの時間とを対応付けた、アクション及び時間を選択する木探索のための探索木において、新たなノードを追加しつつ、第１の評価式の値でノードを探索する探索処理を、前回実行された探索処理において選択されたノードへの辺に対応付けられた時間中に実行するステップと、
今回実行された探索処理において選択されたノードへの辺に対応付けられたアクションを、制御対象物に実行させるステップと、
を含み、１又は複数のプロセッサが実行する制御方法。
【請求項６】
ノード間の辺に、次に実行すべきアクションとさらに次に実行すべきアクションを選択するまでの時間とを対応付けた、アクション及び時間を選択する木探索のための探索木において、新たなノードを追加しつつ、第１の評価式の値でノードを探索する探索処理を、前回実行された探索処理において選択されたノードへの辺に対応付けられた時間中に実行する探索部と、
今回実行された探索処理において選択されたノードへの辺に対応付けられたアクションを、制御対象物に実行させる指示部と、
を有するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適制御技術に関する。
【背景技術】
【０００２】
モンテカルロ木探索（Monte Carlo Tree Search: ＭＣＴＳ）は、決定空間を追加的に伸びる探索木で表すことで、現在の状態において採るべき最善のアクションを決定するものである。探索木は、ランダムなシミュレーションにより、シミュレートされた新たな状態（ノード）と、アクション（エッジ又は辺）とで更新される。ノード及び辺を繰り返し追加することで、現在の状態から終了状態（terminal state）まで遷移する。探索木のノードは、そのノードの状態から先に進む場合における期待報酬（expected reward）を保持している。ノードの期待報酬は、そのノードを介して進む全シミュレーションの平均的な成果を表している。
【０００３】
ＭＣＴＳのシミュレーションは、選択（selection）、展開（expansion）、ロールアウト（roll-out）及び逆伝搬（backpropagation）の４つのフェーズに分けられる。図１に４つのフェーズを簡易的に示している。（１）選択フェーズでは、まだ十分に展開されていないノードに達するまでルートからノードを選択してゆく。図１の例では、ルートノードから２階層下のノードが選択されたことが矢印で表されている。（２）展開フェーズでは、選択フェーズで選択されたノードに、１つのノードが追加される。（３）ロールアウトフェーズでは、ロールアウトのデフォルトポリシーに従ってシミュレーションを行う。（４）逆伝搬フェーズでは、シミュレーションの結果を逆方向、すなわちリーフノードからルートノード方向に伝搬してゆく。図１の例では、追加されたノード、選択されたノード、その親ノード、そしてルートノードに、シミュレーションの結果が逆方向に伝播されていく様子が模式的に示されている。
上でも述べたように、ノードは、シミュレートされたタスクの状態を表し、辺は、現在のノードの状態から子ノードの状態へ遷移するために実行されたアクションに対応する。
【０００４】
ＭＣＴＳの各シミュレーションは、現在の状態に対応するルートノードから始まる。上で述べた選択フェーズにおいては、ノードの値と被訪問回数とについて定義された選択ポリシーに基づき探索木の辺をたどってゆく。そして、子ノードを追加できるノードに到達すると、そのノードに新たなリーフノードを追加することで、探索木を拡張する。このリーフノードの追加が、展開フェーズの処理である。そして、ロールアウトフェーズにおいて、新たなリーフノードの状態から、ロールアウトポリシーが適用される。ロールアウトのシミュレーションは、許可された最大回数実行するか又は終了状態に至るまで繰り返される。このロールアウトポリシーには、ストレートフォワードランダムアクション（straight-forward random action）というロールアウトポリシーが広く用いられている。最後に、シミュレーションの結果が、リーフノードからルートノードまでの部分木において管理されている情報を更新するように、逆伝搬される。
【０００５】
なお、ＭＣＴＳの選択フェーズにおけるキーは、有望なアクションの活用と決定空間の探索とのバランスをとることで、Upper Confidence Bounds applied to Trees (ＵＣＴ)アルゴリズムが、それに対する良い解を与えており、一般的に用いられている。
【０００６】
典型的なＭＣＴＳは、有限数のシーケンシャルな決定問題に適用される。しかし、決定空間がとても広いと、ある状態からすべてのアクションが少なくとも一度は探索されるので、探索木の展望がとても浅くなってしまうという問題が生ずる。このような場合は、決定空間が無限で連続であるという環境において生ずる。このような問題については、Hierarchical Optimistic Optimization applied to Tree (ＨＯＯＴ)というアプローチが提案されている。ＨＯＯＴは、ＵＣＴの限界を超えるために、ＨＯＯアルゴリズムを木探索プランニングに統合したものである。ＨＯＯは、bandit問題に対する選択ポリシーを構成しており、その選択ポリシーは、前回のシミュレーションの結果に関して、アーム（arm）の選択で損した範囲（後悔の範囲：regret bounds）を改善するものである。ＨＯＯは、決定空間を木として分解することで、決定空間の一般的なトポロジカルな表現を形成するものである。
【０００７】
アクションが照会されると、ＨＯＯアルゴリズムでは、ノードで算出されるB-valueというスコアが最大となるパスに沿って探索が行われる。リーフノードでは、リーフノードで表される、決定空間内の範囲においてアクションがサンプリングされる。そして、２つの子ノードが、そのリーフノードに追加され、各子ノードは、そのリーフノードの親ノードにより表される、決定空間内の範囲の半分をカバーする。
【０００８】
ＨＯＯＴは、ＵＣＴに類似するが、ＨＯＯＴは、連続的なアクションのbanditアルゴリズムであるＨＯＯを探索木の各ノードに配置するものである。ＨＯＯは、ＵＣＴにおける離散アクションという限界を超えるため、アクションの選択のために、決定空間をサンプリングするのに用いられる。
【０００９】
従来のＭＣＴＳにおいては、アクションを選択してから次のアクションを選択するまでの時間間隔は固定であった。そのため、状態が刻々と変化するような環境においては、この時間間隔を短くすることで対応することになる。しかしながら、時間間隔が短くなると、シミュレーションの実行回数が制限されて信頼のおける探索木が生成できないという問題がある。
【００１０】
また、従来のＨＯＯＴでは、１種類のアクションを取り扱うことがほとんどであり、２種類以上のアクションをどのように取り扱うかについては、具体的な提案は存在していない。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】Remi Coulom, "Efficient selectivity and backup operators in monte-carlo tree search" In Interna-tional conference on computers and games, pages p72-83, Springer, 2006
【非特許文献２】Christopher R. Mansley, Ari Weinstein, and Michael L. Littman, "Sample-based planning for continuous action markov decision processes", In Proceed-ings of the 21st International Conference on Automated Planning and Scheduling, 2011
【非特許文献３】Peter Auer, Nicolo Cesa-Bianchi, and Paul Fischer, "Finite-time analysis of the multiarmed bandit problem", Machine learning, 47(2-3):235-256, 2002
【非特許文献４】Levente Kocsis and Csaba Szepesvari, "Bandit based monte-carlo planning", In Eu-ropean conference on machine learning, pages 282-293, Springer, 2006
【非特許文献５】Kristof Van Moffaert, "Multi-Criteria Reinforcement Learning for Sequential Decision Making Problems", 2016 Uitgeverij VUBPRESS Brussels University Press
【発明の概要】
【発明が解決しようとする課題】
【００１２】
従って、本発明の目的は、一側面として、タスクに応じたアクションを適切な時間間隔において選択して指示できるようにするための技術を提供することである。
【課題を解決するための手段】
【００１３】
本発明に係る制御方法は、（Ａ）ノード間の辺に、次に実行すべきアクションとさらに次に実行すべきアクションを選択するまでの時間とを対応付けた、アクション及び時間を選択する木探索のための探索木において、新たなノードを追加しつつ、第１の評価式の値でノードを探索する探索処理を、前回実行された探索処理において選択されたノードへの辺に対応付けられた時間中に実行するステップと、（Ｂ）今回実行された探索処理において選択されたノードへの辺に対応付けられたアクションを、制御対象物に実行させるステップとを含む。
【発明の効果】
【００１４】
一側面によれば、タスクに応じたアクションを適切な時間間隔において選択して指示できるようになる。
【図面の簡単な説明】
【００１５】
【図１】図１は、ＭＣＴＳを説明するための図である。
【図２】図２は、実施の形態に係るシステム全体の概要を示す図である。
【図３】図３は、実施の形態におけるタイムシーケンス例を示す図である。
【図４】図４は、本実施の形態に係るＭＣＴＳの探索木の一例を示す図である。
【図５】図５は、モンテカルロ木探索部が実行する処理の処理フローを示す図である。
【図６】図６は、２ＤＨＯＯＴ部が実行する処理の処理フローを示す図である。
【図７Ａ】図７Ａは、処理の具体例における第１のフェーズを示す図である。
【図７Ｂ】図７Ｂは、処理の具体例における第２のフェーズを示す図である。
【図７Ｃ】図７Ｃは、処理の具体例における第３のフェーズを示す図である。
【図７Ｄ】図７Ｄは、処理の具体例における第４のフェーズを示す図である。
【図７Ｅ】図７Ｅは、処理の具体例における第１のフェーズを示す図である。
【図８】図８は、コンピュータ装置のブロック構成図である。
【発明を実施するための形態】
【００１６】
図２に、本実施の形態に係るシステムの概要を示す。本実施の形態に係るシステムは、制御装置１００と、連続的にタスクを実行する制御対象物２００とを含む。制御装置１００は、制御対象物２００に対する制御装置として機能する。
【００１７】
制御装置１００は、モンテカルロ木探索部１１０と、２ＤＨＯＯＴ部１２０と、シミュレーション部１３０と、インターフェース部１４０とを有する。インターフェース部１４０は、時刻ｔiにおいて実行すべきアクションａi及び次のアクションを選択するまでの時間τiをモンテカルロ木探索部１１０から受け取り、時間τiの間に制御対象物２００にアクションａiを実行させる。これに対して、インターフェース部１４０は、制御対象物２００から時刻ｔiにおけるタスクの状態Ｓiを受け取り、モンテカルロ木探索部１１０に出力する。
【００１８】
シミュレーション部１３０は、制御対象物２００が実行するタスクの挙動を複製したシミュレーションモデルである。よって、モンテカルロ木探索部１１０が、状態Ｓを指定して、時間τ中にアクションａを実行するように指示すれば、シミュレーション部１３０は、期待される状態Ｓと、報酬ｒとを予測して、モンテカルロ木探索部１１０に返す。
【００１９】
２ＤＨＯＯＴ部１２０は、モンテカルロ木探索部１１０から状態ＳとＭＣＴＳ探索木の着目ノードの平均報酬ｒaとを受け取り、以下に述べる処理を行って、それらに応じたアクションａと時間τとを返す。
【００２０】
モンテカルロ木探索部１１０は、２ＤＨＯＯＴ部１２０とシミュレーション部１３０と協働して、以下に述べる処理を行って、次に実行すべきアクションａi及びさらに次に実行すべきアクションを選択するまでの時間τiを決定する。
【００２１】
具体的なタイムシーケンスを図３を用いて説明する。時間は左から右に進行するが、上段はアクションの遷移を表し、下段は時間間隔の遷移を表す。すなわち、時刻ｔiでは、タスクの状態は実際にはＳiであるが、状態Ｓ'iを推定して、モンテカルロ木探索部１１０は、時刻ｔiにおいてアクションａi及び時間τiを選択する。制御対象物２００がアクションａiを実行している時間τiにおいて、モンテカルロ木探索部１１０は、以下で述べるような処理を行って状態Ｓ'i+1を推定して（図３では、ＭＣＴＳ（Ｓ'i+1）と表している）、アクションａi+1及び時間τi+1を選択する。但し、時刻ｔiから時間τi後の時刻ｔi+1では、タスクの実際の状態はＳi+1である。このようなシーケンスが繰り返される。なお、図３に示したようにτi＝τi+1ではないかもしれないし、同じであるかもしれないが、その都度選択される。
【００２２】
本実施の形態においてモンテカルロ木探索部１１０で探索される探索木の一例を図４を用いて説明する。本実施の形態では、ノード間の辺には、アクションと時間のペアが対応付けられている。子ノードの状態は、エッジに対応付けられているアクションが、エッジに対応付けられている時間中、親ノードの状態から適用された場合に推定される状態である。図４の例では、状態Ｓiにおいて、アクションａiを実行している時間τi中に、次の状態Ｓ'i+1を推定して、そこから、第１の候補のアクション及び時間のペア（ａ1i+1，τ1i+1）で遷移するノードと、第２の候補のアクション及び時間のペア（ａ2i+1，τ2i+1）で遷移するノードと、第３の候補のアクション及び時間のペア（ａ3i+1，τ3i+1）で遷移するノードとがある。
【００２３】
本実施の形態では、モンテカルロ木探索部１１０は、上で述べたＵＣＴを採用し、ＵＣＢ１と呼ばれる値を最大化するノードを選択する。ＵＣＢ１は、以下のように表される。なお、子ノードｊを表す。
ＵＣＢ１＝Ｘaj＋Ｃ×（２logｎ／ｎj）1/2
【００２４】
ここで、Ｘajは、子ノードｊを通過するシミュレーションのすべての報酬の平均値を表す。ｎは、子ノードｊの親ノードの被訪問回数を表し、ｎjは子ノードｊの被訪問回数を表す。また、Ｃは正の定数であり、実験的に決定されるものである。
【００２５】
図４において、第１乃至第３の候補のアクション及び時間のペアで遷移する３つのノードに付された値がＵＣＢ１の値であるとすると、矢印で示しているように、ＵＣＢ１の値が最も大きいノードに繋がれた辺に係る第１の候補のアクション及び時間のペアが選択されることになる。
【００２６】
本実施の形態では、ＨＯＯＴを２次元に拡張して適用することで、従来の問題を解決する。すなわち、時間とアクションとで張られる２次元空間に対して２ＤＨＯＯＴを用いて、時間とアクションのペアを効果的にサンプリングする。２ＤＨＯＯＴでは、２次元空間における領域の包含関係を階層的に示し、各領域に対応するノードを有する別の探索木を用いる。例えば、ルートノードが、２次元空間全体を表し、ルートノードの４つの子ノードが、２次元空間を４つに分割した４つの大領域を表し、子ノードの４つの孫ノードが、大領域を４つに分割した４つの中領域を表し、孫ノードの４つのひ孫ノードが、中領域を４つに分割した４つの小領域を表す。
【００２７】
但し、このようなペアの数については、既知のプログレッシブワイドニング（ＰＷ：Progressive widening）を用いて制限する。ＰＷは、探索木を浅くしてしまうのを避けるために、ＭＣＴＳが、制限された数のペアに初期的にはフォーカスするようにする。シミュレーションの回数が増加すると、より広く決定空間をカバーするように、考慮すべきペアを増加させる。ある時点において、子ノードの数が、ノードの被訪問回数に関連して許容されるペアの最大数に達すると、そのノードについては、十分に展開されたとみなされる。
【００２８】
２ＤＨＯＯＴは、シミュレーション中に評価されるべきアクションと時間のペア群に対するフィルタを追加するように機能する。２ＤＨＯＯＴサンプリングにおいては、探索木に追加すべきアクションと時間のペアの選択は、有望なペアがより選択され易いような領域に向かうようになる。結果として、ＭＣＴＳによるアクションと時間のペアの選択効率は、シミュレーションの回数が制限されていても、改善されることになる。具体例については、後に詳細に述べる。
【００２９】
次に、図５乃至図７Ｅを用いて、制御装置１００の処理内容について説明する。
【００３０】
まず、図５を用いて、タスクについて与えられた状態についてのＭＣＴＳに係る処理について説明する。
【００３１】
モンテカルロ木探索部１１０は、現在ノード（すなわち着目ノード）に、ルートノードを設定する（図５：ステップＳ１）。前回選択されたアクションと対で選択された時間τ（τは変動する）毎に行われる探索木の構築は、ルートノードから始まる。
【００３２】
そして、モンテカルロ木探索部１１０は、現在ノードは十分に展開されたか否かを判断する（ステップＳ３）。十分に展開されたか否かは、例えばＰＷに基づき決定される。十分に展開されたと判断された場合には、モンテカルロ木探索部１１０は、現在ノードに、評価値ＵＣＢ１が最大の子ノードを設定する（ステップＳ５）。そして処理はステップＳ３に戻る。ＵＣＢ１の定義は、従来と同じである。
【００３３】
一方、十分に展開されたと判断されなかった場合には、モンテカルロ木探索部１１０は、状態Ｓと平均報酬ｒaを渡して２ＤＨＯＯＴ部１２０を呼び出し、（ａ，τ）をサンプリングさせ、探索木に当該（ａ，τ）を辺とするリーフノードを追加する（ステップＳ７）。２ＤＨＯＯＴ部１２０の処理については、後に説明する。なお、ここで、追加したリーフノードに、２ＤＨＯＯＴにおいてサンプリングされたノードへのポインタを保存する。
【００３４】
そして、モンテカルロ木探索部１１０は、サンプリングされた（ａ，τ）と状態Ｓとを渡してシミュレーション部１３０にタスクのシミュレーションを行わせることでロールアウトを実行する（ステップＳ９）。制御対象物２００が実行するタスクを模したモデルでシミュレーションを実行するものである。そうすると、シミュレーション部１３０は、シミュレーション結果として状態Ｓと報酬ｒを返してくる。
【００３５】
また、モンテカルロ木探索部１１０は、追加されたリーフノードからシミュレーション結果を逆伝搬させるバックアップ処理を実行する（ステップＳ１１）。本ステップの逆伝搬は、従来と同じなので説明を省略する。
【００３６】
そして、モンテカルロ木探索部１１０は、今回の処理開始から、前回選択されたノードへの辺に対応づけられた時間τi-1i-1が経過したか否かを判断する（ステップＳ１３）。今回の処理開始から時間τi-1が経過していなければ、処理はステップＳ１に戻る。
【００３７】
一方、処理開始から時間τi-1が経過した場合には、モンテカルロ木探索部１１０は、各ノードについて評価値ＵＣＢ１を算出して、評価値ＵＣＢ１が最大のノードを選択し、そのノードへの辺に対応付けられている（ａi，τi）を選択する（ステップＳ１５）。
【００３８】
そうすると、モンテカルロ木探索部１１０は、ａi及びτiをインターフェース部１４０に出力し、インターフェース部１４０は、時間τi中に、アクションａiを実行するように、制御対象物２００に指示する（ステップＳ１７）。制御対象物２００は指示に従ってタスクを実行し、タスクの処理結果として状態Ｓiを返してくる。
【００３９】
このような処理を繰り返すことで、適切に選択された各時間間隔で、適切に選択されたアクションを制御対象物２００に実行させることができるようになる。
【００４０】
次に、ステップＳ７で呼び出される２ＤＨＯＯＴ部１２０の処理内容について説明する。
【００４１】
本実施の形態では、ＭＣＴＳにおける探索木の各ノードは、２ＤＨＯＯＴにおける探索木を含む。２ＤＨＯＯＴにおける探索木において、ルートノードは、アクション空間（決定空間）全体のクオリティの楽観的な見積もりを保持しており、その子ノードは、アクション空間におけるより狭い領域についてのより正確な見積もりを保持している。一般的に、ある親ノードの子ノードは、同じサイズを有する各々別の領域を表しており、それらの領域で、親ノードが表す領域をすべてカバーする。２ＤＨＯＯＴのアルゴリズムに従えば、あるリーフノードが選択され、そのリーフノードが表す領域から、アクションａと時間τのペアがサンプリングされる。
【００４２】
より詳細な処理内容について、図６を用いて説明する。
【００４３】
まず、２ＤＨＯＯＴ部１２０は、ルートノードを選択する（図６：ステップＳ３１）。そして、２ＤＨＯＯＴ部１２０は、現在ノード（すなわち着目ノード）に、選択ノードを設定する（ステップＳ３３）。その後、２ＤＨＯＯＴ部１２０は、現在ノードは、スコア等が更新されていない子ノードを有するか判断する（ステップＳ３５）。現在ノードが、スコア等が更新されていない子ノードを有する場合には（ステップＳ３５：Ｙｅｓルート）、２ＤＨＯＯＴ部１２０は、スコア等が更新されていない子ノードを、選択する（ステップＳ３７）。そして処理はステップＳ３３に戻る。このように、ループＬ３１１では、ルートノードから、スコア等が更新されていない下位のノードを再帰的に探索する。
【００４４】
一方、現在ノードが、スコア等が更新されていない子ノードを有しないノードまで到達すると（ステップＳ３５：Ｎｏルート）、２ＤＨＯＯＴ部１２０は、現在ノードのスコア等を更新する（ステップＳ３９）。
【００４５】
２ＤＨＯＯＴの探索木から選択されるアクション及び時間ペアの期待報酬は、ＭＣＴＳで実施されたシミュレーションの平均報酬ｒaに依存する。また、２ＤＨＯＯＴの探索木におけるノードの値は、そのサブツリーに属する全てのノードの影響を受ける。すなわち、ノードｉの見積もり報酬Ｒeiは、以下の式で繰り返し更新される。
【数１】
2020009122.tif 000003
【００４６】
なお、ｊは、ノードｉの各子ノードを表し、ｎiは、ノードｉの被訪問回数であり、ｎjは、ノードｊの被訪問回数であり、Ｒejは、ノードｊの見積もり報酬を表す。
【００４７】
また、U-Valueは、ノードｉの見積もり報酬Ｒeiに基づき以下のように定義されている。
【数２】
2020009122.tif 000004
【００４８】
ここで、ｎは、図６の処理の繰り返し回数を表し、定数ｖ1及びρは、ｖ1＞０で０＜ρ＜１で、実験的に適切な値がセットされる。ｈiは、探索木におけるノードｉの深さを表す。
【００４９】
そして、スコアB-value（スコアＢとも記す）は、以下のように定義される。
【数３】
2020009122.tif 000005
【００５０】
なお、Ｂjは、ノードｉの子ノードｊのスコアB-valueであり、（３）式は、全ての子ノードｊについてのＢjのうちの最大値と、Ｕiとの最小値を、Ｂiに設定するものである。また、まだサンプリングされていないノードのＢi及びＵiには、無限大が設定される。
【００５１】
ステップＳ３９では、このように定義されるスコア等の値を更新する。
【００５２】
そして、２ＤＨＯＯＴ部１２０は、現在ノードがルートノードであるか否かを判断する（ステップＳ４１）。現在ノードがルートノードではない場合には、２ＤＨＯＯＴ部１２０は、親ノードを選択する（ステップＳ４３）。そして処理はステップＳ３３に移行する。
【００５３】
このように、ループＬ３１における処理によってリーフノードからルートノード方向に、スコア等の値の更新を行ってゆく。
【００５４】
一方、現在ノードがルートノードである場合には、スコア等の値の更新が終了したので、２ＤＨＯＯＴ部１２０は、現在ノードがリーフノードであるか否かを判断する（ステップＳ４５）。ステップＳ４５に最初に移行してくる場合には、現在ノードはルートノードなので、現在ノードはリーフノードではないと判断される。
【００５５】
現在ノードがリーフノードではない場合には、２ＤＨＯＯＴ部１２０は、スコアB-valueが、最大の子ノードを選択して、現在ノードに設定する（ステップＳ４７）。また、選択されたノードの被訪問回数を１インクリメントする。そして、処理はステップＳ４５に移行する。このようなループＬ３３は、スコアB-valueが最大であるノードをリーフノードまでたどるパスを探索する処理である。
【００５６】
一方、現在ノードがリーフノードである場合には、２ＤＨＯＯＴ部１２０は、リーフノードでカバーされる領域において、（ａ，τ）をサンプリングする（ステップＳ４９）。アクションａについては、選択されたリーフノードでカバーされる領域［ａmin，ａmax］内の値がサンプリングされる。時間τについても、選択されたリーフノードでカバーされる領域［τmin，τmax］内の値がサンプリングされる。
【００５７】
そして、２ＤＨＯＯＴ部１２０は、２ＤＨＯＯＴの探索木を拡張する処理を行う（ステップＳ５１）。具体的には、選択されたリーフノードに、４つの子ノードを追加する。４つの子ノードは、選択されたリーフノードがカバーする領域を均等に４分割することで得られる領域の各々に対応する。なお、アクションａと時間τの２次元空間なので、次元数（＝２）を指数とする、ひとつの次元についての分割数（＝２）のべき乗＝４で分割される。なお、ひとつの次元についての分割数については２以上の自然数であり、ユーザなどの設定により決定される。
【００５８】
なお、リーフノードからルートノードまでの選択されたノードの被訪問回数を更新するために、２ＤＨＯＯＴの探索木のバックアップが実行される。すなわち、各ノードについて被訪問回数を保持しておき、その数を更新する。
【００５９】
そして、２ＤＨＯＯＴ部１２０は、リーフノードへのポインタと、サンプリングされた（ａ，τ）を、モンテカルロ木探索部１１０に出力する（ステップＳ５３）。これによって、より有望なアクション及び時間のペアがサンプリングされる。
【００６０】
図７Ａ乃至図７Ｅを用いて、処理の具体例について説明する。
【００６１】
ＭＣＴＳの探索木におけるノードｐが初めて訪問されると（図７Ａの（ａ）の上段）、２ＤＨＯＯＴの探索木のルートノード１が選択され（図７Ａの（ｂ）の上段）、当該ルートノード１が表す、アクションａと時間τとで張られる決定空間の全領域から、点１（ａ1，τ1）がサンプリングされる（図７Ａの（ｃ））。
【００６２】
本実施の形態では、アクションａも時間τも、有限の範囲内の連続的な値であるが、ここでは［０，１］に正規化されて示されている。
【００６３】
そうすると、２ＤＨＯＯＴの探索木の拡張、すなわち４つの子ノードの追加がなされる（図７Ａの（ｂ）の下段）。この４つの子ノードは、図７Ａの（ｃ）に示すように、互いに重ならずに同じ面積を有する領域Ａ乃至Ｄのいずれかに対応する。
【００６４】
サンプリングされた（ａ1，τ1）は、ＭＣＴＳの探索木をノードａで拡張するのに用いられる。すなわち、図７Ａの（ａ）の下段に示すように、ノードｐからノードａへの辺は、（ａ1，τ1）に対応付けられている。なお、ノードａの値が更新されると、ノード１の値も更新される。
【００６５】
次に、ＭＣＴＳの探索木におけるノードｐが再度拡張される場合には（図７Ｂの（ａ）の上段）、２ＤＨＯＯＴの探索木では、ルートノード１の子ノード２が選択され（図７Ｂの（ｂ）の上段）、ノード２が表す領域Ｂの中から、点２（ａ2，τ2）がサンプリングされる（図７Ｂの（ｃ））。
【００６６】
そうすると、２ＤＨＯＯＴの探索木の拡張、すなわち４つの子ノードの追加がなされる（図７Ｂの（ｂ）の下段）。この４つの子ノードは、図７Ｂの（ｃ）に示すように、互いに重ならずに同じ面積を有する領域Ｂ１乃至Ｂ４のいずれかに対応する。
【００６７】
サンプリングされた（ａ2，τ2）は、ＭＣＴＳの探索木をノードｂで拡張するのに用いられる。すなわち、図７Ｂの（ａ）の下段に示すように、ノードｐからノードｂへの辺は、（ａ2，τ2）に対応付けられている。
【００６８】
次に、ＭＣＴＳの探索木におけるノードｐが再度拡張される場合には（図７Ｃの（ａ）の上段）、２ＤＨＯＯＴの探索木では、ルートノード１の子ノード３が選択され（図７Ｃの（ｂ）の上段）、ノード３が表す領域Ａの中から、点３（ａ3，τ3）がサンプリングされる（図７Ｃの（ｃ））。
【００６９】
そうすると、２ＤＨＯＯＴの探索木の拡張、すなわち４つの子ノードの追加がなされる（図７Ｃの（ｂ）の下段）。この４つの子ノードは、図７Ｃの（ｃ）に示すように、互いに重ならずに同じ面積を有する領域Ａ１乃至Ａ４のいずれかに対応する。
【００７０】
サンプリングされた（ａ3，τ3）は、ＭＣＴＳの探索木をノードｃで拡張するのに用いられる。すなわち、図７Ｃの（ａ）の下段に示すように、ノードｐからノードｃへの辺は、（ａ3，τ3）に対応付けられている。
【００７１】
このような処理を繰り返してゆき、ＭＣＴＳの探索木に５つのノードａ乃至ｅを追加した後に、再度、ＭＣＴＳの探索木におけるノードｐが拡張される場合には（図７Ｄの（ａ）の上段）、２ＤＨＯＯＴの探索木では、ノード２の子ノード６が選択され（図７Ｄの（ｂ）の上段）、ノード６が表す領域Ｂ１の中から、点６（ａ6，τ6）がサンプリングされる（図７Ｄの（ｃ））。
【００７２】
そうすると、２ＤＨＯＯＴの探索木の拡張、すなわち４つの子ノードの追加がなされる（図７Ｄの（ｂ）の下段）。この４つの子ノードは、図７Ｄの（ｃ）に示すように、互いに重ならずに同じ面積を有する領域Ｂ１１乃至Ｂ１４のいずれかに対応する。
【００７３】
サンプリングされた（ａ6，τ6）は、ＭＣＴＳの探索木をノードｆで拡張するのに用いられる。すなわち、図７Ｄの（ａ）の下段に示すように、ノードｐからノードｆへの辺は、（ａ6，τ6）に対応付けられている。
【００７４】
ここまでで、ノードａとノード１が関連付けられ、ノードｂとノード２が関連付けられ、ノードｃとノード３が関連付けられ、ノードｄとノード４が関連付けられ、ノードｅとノード５が関連付けられ、ノードｆとノード６が関連付けられている。
【００７５】
なお、２ＤＨＯＯＴの探索木において、孫ノードの階層に行く前に、ルートノードの全ての子ノードが更新される。一般的には、そのノードから次の下の階層に行く前に、そのノードの全ての子が更新される。
【００７６】
さらに処理が繰り返されて、ＭＣＴＳの探索木に１０個のノードａ乃至ｌを追加した後に、再度、ＭＣＴＳの探索木におけるノードｐが拡張される場合には（図７Ｅの（ａ）の上段）、２ＤＨＯＯＴの探索木では、ノード７の子ノード１１が選択され（図７Ｅの（ｂ）の上段）、ノード１１が表す領域Ｂ２３の中から、点１１（ａ11，τ11）がサンプリングされる（図７Ｅの（ｃ））。
【００７７】
そうすると、２ＤＨＯＯＴの探索木の拡張、すなわち４つの子ノードの追加がなされる（図７Ｅの（ｂ）の下段）。この４つの子ノードは、図７Ｅの（ｃ）に示すように、互いに重ならずに同じ面積を有する領域Ｂ２３１乃至Ｂ２３４のいずれかに対応する。
【００７８】
サンプリングされた（ａ11，τ11）は、ＭＣＴＳの探索木をノードｋで拡張するのに用いられる。すなわち、図７Ｅの（ａ）の下段に示すように、ノードｐからノードｋへの辺は、（ａ11，τ11）に対応付けられている。
【００７９】
このように、２ＤＨＯＯＴの探索木におけるノードは、ＭＣＴＳの探索木におけるノードと関連付けられる。また、ＭＣＴＳの探索木におけるノードの値が更新されると、２ＤＨＯＯＴの探索木におけるノードの値も更新される。
【００８０】
ＭＣＴＳの探索木において追加された各ノードは、親ノードのための２ＤＨＯＯＴの探索木における選択リーフノードへのポインタを保持し、新たな２ＤＨＯＯＴの探索木を初期化する。すなわち、ＭＣＴＳの探索木は、各ノードにアクション及び時間のペアを選択するための２ＤＨＯＯＴの探索木と、親ノードのための２ＤＨＯＯＴの探索木においてアクション及び時間のペアがサンプルされたリーフノードへのポインタとを保持している。
【００８１】
リーフノードへのポインタは、平均報酬ｒaを更新するために用いられる。（１）式で示したように、２ＤＨＯＯＴの探索木におけるノードｉの見積もり報酬Ｒeiの計算には、平均報酬ｒaが用いられる。このような平均報酬ｒaを用いることで、決定空間において、長期にわたってうまく実行されることが期待されるアクション等の領域に向かって、２ＤＨＯＯＴの探索木におけるノード選択が行われるようになる。
【００８２】
以上本実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、機能ブロック構成例は例に過ぎず、プログラムモジュール構成とは一致しない場合もある。また、処理フローについても、処理結果が変わらない限り、処理順番を入れ替えたり、複数のステップを並列に実行してもよい。
【００８３】
また、上で述べた例では、アクションａと時間τで２次元空間を取り扱ったが、より多くの次元をＨＯＯＴで取り扱うことも可能である。すなわち、アクションａ1乃至ａn-1と時間τとでｎ次元空間を取り扱ってもよい。時間τを除いてｎ次元空間としてもよい。その場合、探索木の拡張時には、ｎ次元ＨＯＯＴで子ノードは、ひとつの次元について指定された分割数（２以上の自然数）のｎ乗個追加することになる。
【００８４】
なお、制御対象部２００は、どのようなものでもよいが、例えば車両の自動運転その他の連続したタスクを実行する装置である。
【００８５】
図６に示した処理の内容を疑似コードで表すと以下のようになる。
1: procedure UCTSEARCH(root, τ)
2:    while time ＜ τ do                      //ステップＳ１３
3:        front = TreeSearch(root)            //ステップＳ１
4:        reward = DefaultPolicy(front.state, front.horizon) 
//ステップＳ９
5:        BackUp(front, reward)               //ステップＳ１１
6:    return BestChild(root, 0)               //最適な（ａ，τ）を選択
7: procedure TREESEARCH(node)
8:    while not node.state.terminal() do:   //終了状態になるまで探索を繰り返す
9:        if not node.fully.expanded() then:  //ステップＳ３
10:           return Expand(node)             //ステップＳ７
11:       else:
12:           node = BestChild(node, scale)   //ステップＳ５
13:   return node
14: procedure DEFAULTPOLICY(state)            //ステップＳ９の詳細
15:    reward = state.reward
16:    done = state.terminal()
17:    steps=h
18:    while done == false && steps ＜MAXSTEPS do:
19:       a = sample.actionSpace()
20:       obs, rew, done = env.step(a)
21:       reward = reward + rew
22:       steps = steps + 1
23:    return reward
24: procedure EXPAND(node)                    
25:    a, τ, Hlead = HOOSearch(node.Hroot)   //ステップＳ７:（ａ，τ）sampling
26:    addedNode = node.AddChild(a, τ, Hleaf) //ステップＳ７：ノード追加
27: return addedNode                          //ステップＳ７：探索木の拡張
28: procedure BESTCHILD(node, C)              //最大UCB1のノードを選択
29:    bestchildren = []
30:    UCB1max = −∞
31:    for node.childrenに含まれるｘ do
32:      UCB1 = x.reward/x.visits + C×{(2log(node.visits)/x.visits}0.5
33:      if UCB1 == UCB1max then
34:         bestchildren.append(x)
35:      if UCB1 ＞ UCB1max then
36:         bestchildren = [x]
37:         UCB1max = UCB1
38:      return random.choice(bestchildren)   //複数候補の場合はランダム
39: procedure BACKUP(Node, reward)            //ステップＳ１１の詳細 
40:    while node do
41:       node.visits = node.visits + 1       //被訪問回数をインクリメント
42:       node.reward = node.reward + reward  //報酬の更新
43:       node.Hleaf.reward = node.reward     //2DHOOTのノード値を更新
44:       node = node.parent
【００８６】
図７に示した処理の内容を疑似コードで表すと以下のようになる。
1: procedure HOOSEARCH(root)
2:    HOO-Update(root, root.visits)         //ループL31  木の更新
3:    leaf = HOOPolicy(root)                //ループL33  最大スコアのパス探索
4:    a,τ = sample.leaf.region()           //ステップＳ４９
5:    leaf.expand()                         //ステップＳ５１
6:    return a, τ, leaf                    //（ａ，τ）とpointerを返す
7: procedure HOO-UPDATE(node, N)            //再帰的なループL31の詳細
8:    childBmax = 0
9:    for node.children含まれるｘ do        //ループL311 再帰的な子ノードの更新
10:       HOO-Update(x,N)
11:   for node.children含まれるｘ do        //ステップＳ３９
12:       node.reward = node.reward + x.reward
13:       if x.Bvalue ＞ childBmax then
14:          childBmax = x.Bvalue           //Bvalue更新のため用いられる
15:   Uvalue=node.reward/node.visits + {2log(N)/node.visits}0.5 
+ v1ρh    //ステップＳ３９ U-value更新
16:   if Uvalue ＜ childBmax then      //ステップＳ３９ B-value更新
17:      node.Bvalue = Uvalue
18:   else
19:      node.Bvalue = childBmax
20: procedure HOOPOLICY(node)
21:    while node.children do                 //ループL33
22:       node.visits = node.visits + 1       //ノード被訪問回数の増分
23:       bestchildren = []
24:       Bvaluemax = -∞
25:       for node.childrenに含まれるｘ do
26:          if x.Bvalue == Bvaluemax then
27:             bestchildren.append(x)
28:          if x.Bvalue ＞ Bvaluemax then
29:             bestchildren = [x]
30:             Bvaluemax = x.Bvalue
31:       node = random.choice(bestchildren)      //複数候補の場合はランダムに
32:    node.visits = node.vistis + 1              //被訪問回数の増分
33:    return node                                //選択されたleaf nodeを返す
【００８７】
なお、上で述べた制御装置１００は、コンピュータ装置であって、図８に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とスピーカ２５１８とがバス２５１９で接続されている。なお、ＨＤＤはソリッドステート・ドライブ（ＳＳＤ：Solid State Drive）などの記憶装置でもよい。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００８８】
なお、上で述べたような処理を実行することで用いられるデータは、処理途中のものであるか、処理結果であるかを問わず、メモリ２５０１又はＨＤＤ２５０５等の記憶装置に格納される。例えば、探索木を表すデータ、及び被訪問回数、評価値、スコア等のノードの値は、メモリ２５０１等に格納される。
【００８９】
以上述べた実施の形態をまとめると以下のようになる。
【００９０】
本実施の形態に係る制御方法は、（Ａ）ノード間の辺に、次に実行すべきアクションとさらに次に実行すべきアクションを選択するまでの時間とを対応付けた、アクション及び時間を選択する木探索のための探索木において、新たなノードを追加しつつ、第１の評価式の値（例えばＵＣＢ１の値が最大）でノードを探索する探索処理を、前回実行された探索処理において選択されたノードへの辺に対応付けられた時間中に実行するステップと、（Ｂ）今回実行された探索処理において選択されたノードへの辺に対応付けられたアクションを、制御対象物に実行させるステップとを含む。
【００９１】
このように、新規な探索木を用いて、制御対象物が実行するタスクに応じたアクションを適切な時間間隔において選択して指示できるようになる。なお、木探索の探索処理は、例えばＭＣＴＳに従うものである。
【００９２】
なお、上記次に実行すべきアクションが、有限の連続値の中の一つの値に対応し、上記さらに次に実行すべきアクションを選択するまでの時間が、有限の連続する時間内の一つの値である場合もある。これらの値は、適切なサンプリングにて選択される。
【００９３】
また、上で述べた探索処理に含まれる上記新たなノードを追加する処理が、（ａ１）次に実行すべきアクションと時間とで張られる空間において、当該空間に含まれる領域の包含関係を階層的に表し、各領域に対応するノードを有する第２の探索木において、第２の評価式の値（例えばスコアＢが最大）でノードを第２の探索木のルートノードからリーフノードまで選択するステップと、（ａ２）選択されたリーフノードに対応する領域内において点を選択するステップと、（ａ３）選択された点についてのアクション及び時間が対応付けられた辺で繋がるノードを探索木において追加するステップとを含むようにしてもよい。
【００９４】
このように、アクション及び時間をペアで適切にサンプリングするために、上で述べたような第２の探索木を用いるような処理を採用するようにしてもよい。第２の探索木を用いるような処理は、例えば多次元に拡張されたＨＯＯＴに従うものである。
【００９５】
さらに、上で述べた探索処理に含まれる上記新たなノードを追加する処理が、（ａ４）選択されたリーフノードに対応する領域を、上記空間の次元数を指数とする所定数（２以上の自然数）のべき乗個に分割することで生成された新たな領域に対応するリーフノードを、第２の探索木に追加するステップを含むようにしてもよい。このようにすれば、適切に空間を分割しつつ、第２の探索木で領域の関係を適切に表すことができるようになる。
【００９６】
以上述べた制御方法をコンピュータに実行させるためのプログラムを作成することができて、そのプログラムは、様々な記憶媒体に記憶される。
【００９７】
また、上で述べたような制御方法を実行する制御装置は、１台のコンピュータで実現される場合もあれば、複数台のコンピュータで実現される場合もあり、それらを合わせて制御システム又は単にシステムと呼ぶものとする。
【符号の説明】
【００９８】
１００  制御装置
１１０  モンテカルロ木探索部
１２０  ２ＤＨＯＯＴ部
１３０  シミュレーション部
１４０  インターフェース部
２００  制御対象物
【図１】
2020009122.tif 000006
【図２】
2020009122.tif 000007
【図３】
2020009122.tif 000008
【図４】
2020009122.tif 000009
【図５】
2020009122.tif 000010
【図６】
2020009122.tif 000011
【図７Ａ】
2020009122.tif 000012
【図７Ｂ】
2020009122.tif 000013
【図７Ｃ】
2020009122.tif 000014
【図７Ｄ】
2020009122.tif 000015
【図７Ｅ】
2020009122.tif 000016
【図８】
2020009122.tif 000017