(57)【要約】【課題】目的関数の定義が困難な最適化問題に適用可能な演算手法を提供する。【解決手段】複数のノードから構成される対象システムを最適化する最適化システムであって、ノードは、ＡＤＭＭを用いて、ノードを制御するパラメータを表す決定変数の最適値を算出する演算処理部と、学習処理によって構築された演算モデルに基づいて、決定変数の値の入力を受け付け、目的関数の値を算出する関数値算出部と、を有し、演算処理部は、任意の決定変数の値を関数値算出部に入力し、関数値算出部によって算出された目的関数の値及び任意の決定変数の値を、第一最適化問題の双対変換した第二最適化問題に代入することによって双対変数の値を算出する処理を、双対変数の値が条件を満たすまで繰り返し実行し、自ノード及び他のノードが算出した双対変数の値に基づいて、自ノードの決定変数の最適値を算出する。【選択図】図２
2020030691.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるネットワークインタフェースを有する複数のノードから構成される対象システムを最適化する最適化システムであって、
前記複数のノードの各々は、
交互方向乗数法を用いて、前記複数のノードの各々を制御するパラメータを表す決定変数を変数とする目的関数及び制約関数により与えられる第一最適化問題の解として前記決定変数の最適値を算出する演算処理部と、
前記決定変数の値及び前記目的関数の値から構成される学習データを用いた学習処理によって構築された演算モデルに基づいて、前記決定変数の値の入力を受け付け、前記目的関数の値を算出する関数値算出部と、
前記演算処理部によって算出された前記決定変数の最適値に基づいて前記ノードを制御する制御部と、を有し、
前記演算処理部は、
任意の前記決定変数の値を前記関数値算出部に入力し、前記関数値算出部によって算出された前記目的関数の値及び前記任意の決定変数の値を、前記第一最適化問題の双対変換によって、双対変数を変数とする関数及び前記目的関数により与えられる第二最適化問題に代入することによって前記双対変数の値を算出する処理を、前記双対変数の値が所定の条件を満たすまで繰り返し実行し、
前記ネットワークインタフェースを介して、他のノードによって算出された前記双対変数の値を取得して、前記メモリに格納し、
自ノード及び前記他のノードが算出した前記双対変数の値に基づいて、前記自ノードの前記決定変数の最適値を算出して、前記メモリに格納することを特徴とする最適化システム。
【請求項２】
請求項１に記載の最適化システムであって、
前記複数のノードの各々は、前記演算モデルを構築する学習部を有し、
前記複数のノードの各々は、前記関数値算出部によって算出された前記目的関数の値及び前記決定変数の最適値から構成される履歴データを蓄積し、
前記学習部は、前記履歴データを前記学習データとして用いた学習処理を実行することによって前記演算モデルを構築することを特徴とする最適化システム。
【請求項３】
請求項２に記載の最適化システムであって、
前記演算モデルは、ニューラルネットワークであることを特徴とする最適化システム。
【請求項４】
請求項２に記載の最適化システムであって、
前記演算処理部は、前記自ノードと相互作用するノードにアクセスするための情報を格納するノード接続情報を管理し、
前記対象システムに新たに追加される新規ノードの前記制御部は、
前記自ノードと相互作用するノードを決定し、
前記決定されたノードに接続要求を送信し、
前記決定されたノードにアクセスするための情報を取得することによって前記ノード接続情報を生成し、
前記決定されたノードから前記履歴データを取得し、
前記新規ノードの前記学習部は、前記決定されたノードから取得した前記履歴データを用いた学習処理を実行することによって前記演算モデルを構築し、
前記接続要求を受信したノードは、前記ノード接続情報に前記新規ノードにアクセスするための情報を追加することを特徴とする最適化システム。
【請求項５】
請求項４に記載の最適化システムであって、
前記新規ノードの前記制御部は、
前記決定されたノードとの間の相互作用の強さに基づいて、前記決定されたノードから取得する前記履歴データのデータ量を算出し、
前記算出された履歴データのデータ量を含む取得要求を、前記決定されたノードに送信することを特徴とする最適化システム。
【請求項６】
複数のノードから構成される対象システムにおける最適化方法であって、
前記ノードは、
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるネットワークインタフェースを有し、
交互方向乗数法を用いて、前記複数のノードの各々を制御するパラメータを表す決定変数を変数とする目的関数及び制約関数により与えられる第一最適化問題の解として前記決定変数の最適値を算出する演算処理部と、
前記決定変数の値及び前記目的関数の値から構成される学習データを用いた学習処理によって構築された演算モデルに基づいて、前記決定変数の値の入力を受け付け、前記目的関数の値を算出する関数値算出部と、
前記演算処理部によって算出された前記決定変数の最適値に基づいて前記ノードを制御する制御部と、を有し、
前記最適化方法は、
前記演算処理部が、任意の前記決定変数の値を前記関数値算出部に入力し、前記関数値算出部によって算出された前記目的関数の値及び前記任意の決定変数の値を、前記第一最適化問題の双対変換によって、双対変数を変数とする関数及び前記目的関数により与えられる第二最適化問題に代入することによって前記双対変数の値を算出する処理を、前記双対変数の値が所定の条件を満たすまで繰り返し実行するステップと、
前記演算処理部が、前記ネットワークインタフェースを介して、他のノードによって算出された前記双対変数の値を取得して、前記メモリに格納するステップと、
前記演算処理部が、自ノード及び前記他のノードが算出した前記双対変数の値に基づいて、前記自ノードの前記決定変数の最適値を算出して、前記メモリに格納するステップと、を含むことを特徴とする最適化方法。
【請求項７】
請求項６に記載の最適化方法であって、
前記複数のノードの各々は、前記演算モデルを構築する学習部を有し、
前記複数のノードの各々は、前記関数値算出部によって算出された前記目的関数の値及び前記決定変数の最適値から構成される履歴データを蓄積し、
前記最適化方法は、
前記学習部が、前記履歴データを前記学習データとして用いた学習処理を実行することによって前記演算モデルを構築するステップを含むことを特徴とする最適化方法。
【請求項８】
請求項７に記載の最適化方法であって、
前記演算モデルは、ニューラルネットワークであることを特徴とする最適化方法。
【請求項９】
請求項７に記載の最適化方法であって、
前記演算処理部は、前記自ノードと相互作用するノードにアクセスするための情報を格納するノード接続情報を管理し、
前記最適化方法は、
前記対象システムに新たに追加される新規ノードの前記制御部が、前記自ノードと相互作用するノードを決定するステップと、
前記新規ノードの前記制御部が、前記決定されたノードに接続要求を送信するステップと、
前記新規ノードの前記制御部が、前記決定されたノードにアクセスするための情報を取得することによって前記ノード接続情報を生成するステップと、
前記新規ノードの前記制御部が、前記決定されたノードから前記履歴データを取得するステップと、
前記新規ノードの前記学習部が、前記決定されたノードから取得した前記履歴データを用いた学習処理を実行することによって前記演算モデルを構築するステップと、
前記接続要求を受信したノードが、前記ノード接続情報に前記新規ノードにアクセスするための情報を追加するステップと、を含むことを特徴とする最適化方法。
【請求項１０】
請求項９に記載の最適化方法であって、
前記決定されたノードから前記履歴データを取得するステップは、
前記新規ノードの前記制御部が、前記決定されたノードとの間の相互作用の強さに基づいて、前記決定されたノードから取得する前記履歴データのデータ量を算出するステップと、
前記新規ノードの前記制御部が、前記算出された履歴データのデータ量を含む取得要求を、前記決定されたノードに送信するステップと、を含むことを特徴とする最適化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象システムの最適化を実現するシステム及び方法に関する。
【背景技術】
【０００２】
近年、社会インフラ及びシステムの効率的な運用の要求が増大している。具体的には、渋滞情報及び在庫情報等を利用して利益若しくは効果を最大化する配送計画及び生産計画の作成、有限な社会資源の効率的な分配計画の作成、又は、複雑なシステムの状態の把握等が求められている。
【０００３】
前述したような問題は、独立したサブシステム（ノード）が互いに影響を与えながら制御及び行動等を行うシステムにおける最適化問題として扱うことができる。当該最適化問題は、サブシステムの制御変数の組合せ、順序、及び値を決定するための処理である。
【０００４】
例えば、生産計画の作成する場合、演算機構は、需給及び生産効率等が変動する環境において、電力コスト及び二酸化炭素排出量等のシステムに係る制約を満たすように、工場における製品の生産量及び出荷数、並びに、製造機器の稼働時間等に対応する制御変数の値を決定する。
【０００５】
大規模なシステムの最適化問題の解析手法として分散最適化方法が知られている。その一つとして、交互方向乗数法（ＡＤＭＭ）がある。ＡＤＭＭは、例えば、式（１）で表される最適化問題の解析手法として知られている。
【０００６】
添字ｉはサブシステムの識別番号を表し、また、変数ｘｉはサブシステムの決定変数を表す。変数ｚは式（２）で定義される。また、関数ｆｉは添字ｉのサブシステムにおける目的関数を表し、関数ｇは制約関数を表す。制約関数ｇはシステム全体に対して与えられる。なお、最小値の代わりに最大値を求める最適化問題も同様の形式で表される。ＡＤＭＭの具体的なアルゴリズムは、例えば、非特許文献１に記載されている。
【０００７】
【数１】
2020030691.tif 000003
【０００８】
【数２】
2020030691.tif 000004
【０００９】
ＡＤＭＭでは式（１）を最小又は最大とする決定変数ｘを求めるための演算手法である。ＡＤＭＭを利用した技術として特許文献１に記載の技術が知られている。
【００１０】
特許文献１には、複数のワーカーノードを使用して、ＡＤＭＭを反復して実行し、停止基準が満たされるまで、分類器の学習を実行することが記載されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】米国特許第２０１７／０１４７０２０号明細書
【非特許文献】
【００１２】
【非特許文献１】Stephen Boyd  他２名、「Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers」、Foundations and Trends in Machine Learning、Vol.3, No.1, pp.1-122 (2010)
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ＡＤＭＭの演算を実行するためには目的関数を定義する必要がある。目的関数を定義するためには、サブシステムの振る舞い及びのサブシステム間の相互作用等を予め把握している必要がある。
【００１４】
しかし、複雑のシステム又はサブシステムの振る舞いが未知のシステムの場合、目的関数を定義できない可能性がある。また、サブシステムの追加及び削除が動的に行われ、また、サブシステム間の相互作用が動的に変更する場合、目的関数を再度定義する必要がある。
【００１５】
したがって、従来技術では、目的関数の定義が困難なシステム及び目的関数が動的に変化するシステムにＡＤＭＭを適用することが困難であった。
【００１６】
本発明では、目的関数の定義が困難なシステム及び目的関数が動的に変化するシステムに対して適用できる最適化問題の演算手法及び当該演算手法を実現するシステムを提供する。
【課題を解決するための手段】
【００１７】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるネットワークインタフェースを有する複数のノードから構成される対象システムを最適化する最適化システムであって、前記複数のノードの各々は、交互方向乗数法を用いて、前記複数のノードの各々を制御するパラメータを表す決定変数を変数とする目的関数及び制約関数により与えられる第一最適化問題の解として前記決定変数の最適値を算出する演算処理部と、前記決定変数の値及び前記目的関数の値から構成される学習データを用いた学習処理によって構築された演算モデルに基づいて、前記決定変数の値の入力を受け付け、前記目的関数の値を算出する関数値算出部と、前記演算処理部によって算出された前記決定変数の最適値に基づいて前記ノードを制御する制御部と、を有し、前記演算処理部は、任意の前記決定変数の値を前記関数値算出部に入力し、前記関数値算出部によって算出された前記目的関数の値及び前記任意の決定変数の値を、前記第一最適化問題の双対変換によって、双対変数を変数とする関数及び前記目的関数により与えられる第二最適化問題に代入することによって前記双対変数の値を算出する処理を、前記双対変数の値が所定の条件を満たすまで繰り返し実行し、前記ネットワークインタフェースを介して、他のノードによって算出された前記双対変数の値を取得して、前記メモリに格納し、自ノード及び前記他のノードが算出した前記双対変数の値に基づいて、前記自ノードの前記決定変数の最適値を算出して、前記メモリに格納する。
【発明の効果】
【００１８】
本発明によれば、目的関数の定義が困難なシステム及び目的関数が動的に変化するシステムに適用できる最適化問題の演算手法を実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１９】
【図１】実施例１の最適化対象のシステムの構成例を示す図である。
【図２】実施例１のノードの構成の一例を示す図である。
【図３】実施例１のノード接続情報のデータ構造の一例を示す図である。
【図４】実施例１のノードが実行するニューラルネットワークの構築処理の一例を説明するフローチャートである。
【図５】実施例１のノードが実行する決定変数算出処理の一例を示すフローチャートである。
【図６】実施例２のシステムに新規ノードが追加される場合に実行される処理の流れを説明するシーケンス図である。
【図７】実施例３のシステムから削除ノードが削除される場合に実行される処理の流れを説明するシーケンス図である。
【図８】実施例４のノードが実行する論理接続変更処理の概要を説明するフローチャートである。
【図９】実施例４のノードが生成する候補ノードリストのデータ構造の一例を示す図である。
【図１０】実施例４のノードが実行する候補ノードリスト生成処理の一例を説明するフローチャートである。
【図１１】実施例４のノードが実行する接続ノード選択処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００２０】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００２１】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【００２２】
本明細書等における「第１」、「第２」、「第３」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【００２３】
図面等において示す各構成の位置、大きさ、形状、及び範囲等は、発明の理解を容易にするため、実際の位置、大きさ、形状、及び範囲等を表していない場合がある。したがって、本発明では、図面等に開示された位置、大きさ、形状、及び範囲等に限定されない。
【実施例１】
【００２４】
図１は、実施例１の最適化対象のシステムの構成例を示す図である。
【００２５】
システム１０は、複数のノード１００から構成される。図１のノード１００の数字は、ノード１００の識別情報（識別番号）を表す。複数のノード１００は最適化の対象となるシステム（対象システム）を構成する。また、対象システムにおいて、相互作用するノード１００間の接続はノードネットワークを形成する。
【００２６】
相互作用するノード１００とは、後述する双対変数ｙの値を取得するノード１００を表す。ノードネットワークは、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）及びＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等の物理的な通信ネットワークとは異なるネットワークである。以下の説明では、相互作用するノード１００間の接続を論理接続と記載する。また、任意のノード１００と論理接続を介して接続されるノード１００を接続ノード１００と記載する。
【００２７】
ノード１００は、最適化問題の演算を実行することによってノード１００の行動及び処理等を制御するためのパラメータである決定変数の値を算出し、当該決定変数の値に基づいた制御を行う。具体的には、ノード１００は、式（１）から算出される決定変数ｘｉの値に基づいて制御を行う。なお、本発明は、ノード１００が行う制御の内容に限定されない。
【００２８】
実施例１では、最適化問題の解析手法としてＡＤＭＭを用いる。実施例１のＡＤＭＭでは、式（１）に示す主問題を式（３）に示す双対問題に変換し、双対問題から決定変数ｘｉの値を算出する。
【００２９】
【数３】
2020030691.tif 000005
【００３０】
より具体的には、ノード１００は、終了条件を満たすまで、決定変数ｘｉ及び双対変数ｙを交互に更新することによって最適解となる決定変数ｘｉを算出する。当該アルゴリズムを実現する処理については図４で説明する。
【００３１】
従来は、予め目的関数ｆｉ（ｘｉ）を与える必要があった。実施例１では、目的関数ｆｉ（ｘｉ）をニューラルネットワークに置き換えることによって、目的関数ｆｉ（ｘｉ）の値（目的関数値）を算出する。
【００３２】
図２は、実施例１のノード１００の構成の一例を示す図である。
【００３３】
ノード１００は、ハードウェアとしてプロセッサ２００、メモリ２０１、及びネットワークインタフェース２０２を備える。各ハードウェアは内部バスを介して互いに接続される。
【００３４】
プロセッサ２００は、メモリ２０１に格納されるプログラムを実行する。プロセッサ２００がプログラムにしたがって処理を実行することによって、特定の機能を実現するモジュールとして動作する。以下の説明では、モジュールを主語に処理を説明する場合、プロセッサ２００が当該モジュールを実現するプログラムを実行していることを示す。
【００３５】
メモリ２０１は、プロセッサ２００が実行するプログラム及びプログラムが使用する情報を格納する。また、メモリ２０１は、プログラムが一時的に使用するワーク襟を含む。メモリ２０１に格納されるプログラム及び情報については後述する。
【００３６】
ネットワークインタフェース２０２は、通信ネットワークを介して外部装置と通信するためのインタフェースである。
【００３７】
ここで、メモリ２０１に格納されるプログラム及び情報について説明する。メモリ２０１は、制御モジュール２１０、学習モジュール２１１、ＡＤＭＭ演算モジュール２１２、及び目的関数値算出モジュール２１３を実現するプログラムを格納する。また、メモリ２０１は、ノード接続情報２２０及び履歴情報２２１を格納する。
【００３８】
制御モジュール２１０は、ノード１００全体を管理する。学習モジュール２１１は、目的関数値算出モジュール２１３が使用するニューラルネットワークを構築するための学習処理を実行する。ＡＤＭＭ演算モジュール２１２は、ＡＤＭＭに基づいて決定変数ｘｉを算出する。目的関数値算出モジュール２１３は、学習処理によって構築された演算モデルであるニューラルネットワークを用いて、目的関数値を算出する。なお、各ノード１００には、初期ニューラルネットワークが設定されている。ただし、学習モジュール２１１によってニューラルネットワークは更新される。
【００３９】
ノード接続情報２２０は、ノードネットワークを管理するための情報である。ノード接続情報２２０の詳細は図３を用いて後述する。履歴情報２２１は、過去に算出された決定変数ｘｉの値及び目的関数値を管理するための情報である。例えば、履歴情報２２１には、タイムスタンプと、決定変数ｘｉの値及び目的関数値とから構成される履歴データが格納される。
【００４０】
なお、ノード１００が有する各モジュールについては、複数のモジュールを一つのモジュールにまとめてもよいし、一つのモジュールを機能毎に複数のモジュールに分けてもよい。例えば、制御モジュール２１０及びＡＤＭＭ演算モジュール２１２を一つのモジュールとしてもよいし、ＡＤＭＭ演算モジュール２１２及び目的関数値算出モジュール２１３を一つのモジュールとしてもよい。
【００４１】
図３は、実施例１のノード接続情報２２０のデータ構造の一例を示す図である。
【００４２】
ノード接続情報２２０は、自ノード１００と相互作用するノード１００、すなわち、自ノード１００と論理接続を形成するノード１００に対応するエントリを格納する。エントリは、ノードＩＤ３０１及びアドレス３０２から構成される。なお、エントリの構成は一例であって、これに限定されない。例えば、エントリは、相互作用の強さ（論理接続の強さ）及びノード１００間の距離等を格納するフィールドを含んでもよい。
【００４３】
ノードＩＤ３０１は、自ノード１００と相互作用するノード１００の識別情報を格納するフィールドである。アドレス３０２は、ノードＩＤ３０１に対応するノード１００と通信するためのアドレスを格納するフィールドである。
【００４４】
図４は、実施例１のノード１００が実行するニューラルネットワークの構築処理の一例を説明するフローチャートである。
【００４５】
ノード１００の制御モジュール２１０は、実行契機を検知した場合、学習モジュール２１１に学習処理の実行を指示する。例えば、制御モジュール２１０は、実行周期の経過、又は外部からの実行要求の受信を実行契機として検知する。
【００４６】
学習モジュール２１１は、履歴情報２２１から履歴データを取得する（ステップＳ１０１）。
【００４７】
学習モジュール２１１は、履歴情報２２１に格納される全ての履歴データを取得してもよいし、タイムスタンプが新しい順に所定の数の履歴データを取得してもよい。また、学習モジュール２１１は、タイムスタンプが任意の時間範囲に含まれる履歴データを取得してもよい。
【００４８】
なお、取得する履歴データは、ノード１００の処理能力、ノード１００の制御の開始までに要する時間等に応じて決定される。
【００４９】
次に、学習モジュール２１１は、履歴データを用いて、ニューラルネットワークを構築するための学習処理を実行する（ステップＳ１０２）。実施例１では、履歴データを学習データとして用いる学習処理が実行される。学習モジュール２１１は、決定変数ｘｉの値の入力に対して目的関数値を出力するニューラルネットワークを構築する。なお、学習処理は公知のものであるため詳細な説明は省略する。
【００５０】
次に、学習モジュール２１１は、構築されたニューラルネットワークを目的関数値算出モジュール２１３に出力し（ステップＳ１０３）、処理を終了する。
【００５１】
このとき、目的関数値算出モジュール２１３は、現在のニューラルネットワークを、新たなニューラルネットワークに更新する。目的関数値算出モジュール２１３は、ニューラルネットワークを保持していない場合、入力されたニューラルネットワークを設定する。
【００５２】
図５は、実施例１のノード１００が実行する決定変数算出処理の一例を示すフローチャートである。
【００５３】
ノード１００の制御モジュール２１０は、周期的に、又は、外部から指示を受け付けた場合、ＡＤＭＭ演算モジュール２１２に処理の実行を指示する。ＡＤＭＭ演算モジュール２１２は、変数ｓｕｐ＿ｖａｌｕｅ、ｍｉｎ＿ｖａｌｕｅ、ｔｍｐ＿１、ｔｍｐ＿２、ｙ＿ｌｏｃａｌを初期化した後、以下の処理を開始する。
【００５４】
ＡＤＭＭ演算モジュール２１２は、履歴情報２２１を参照して、双対変数ｙの値を選択する（ステップＳ２０１）。また、ＡＤＭＭ演算モジュール２１２は、決定変数ｘｉの値を選択する（ステップＳ２０２）。
【００５５】
なお、双対変数ｙ及び決定変数ｘｉのそれぞれが取り得る値の範囲は予め設定されているものとする。
【００５６】
次に、ＡＤＭＭ演算モジュール２１２は、目的関数値の算出指示を目的関数値算出モジュール２１３に出力する（ステップＳ２０３）。このとき、目的関数値算出モジュール２１３は、ニューラルネットワークに決定変数ｘｉの値を入力することによって、目的関数値を算出する。
【００５７】
次に、ＡＤＭＭ演算モジュール２１２は、式（４）に目的関数値、決定変数ｘｉの値、及び双対変数ｙの値を代入して、ｔｍｐ＿１を算出する（ステップＳ２０４）。
【００５８】
【数４】
2020030691.tif 000006
【００５９】
次に、ＡＤＭＭ演算モジュール２１２は、ｔｍｐ＿１がｓｕｐ＿ｖａｌｕｅより大きい場合、ｓｕｐ＿ｖａｌｕｅをｔｍｐ＿１に更新する（ステップＳ２０５）。なお、ｓｕｐ＿ｖａｌｕｅに値が設定されていない場合、ＡＤＭＭ演算モジュール２１２は、ｓｕｐ＿ｖａｌｕｅにｔｍｐ＿１を設定する。
【００６０】
次に、ＡＤＭＭ演算モジュール２１２は、全ての決定変数ｘｉの値について処理が完了したか否かを判定する（ステップＳ２０６）。
【００６１】
全ての決定変数ｘｉの値について処理が完了していないと判定された場合、ＡＤＭＭ演算モジュール２１２は、ステップＳ２０２に戻り、同様の処理を実行する。
【００６２】
全ての決定変数ｘｉの値について処理が完了していないと判定された場合、ＡＤＭＭ演算モジュール２１２は、式（５）にｓｕｐ＿ｖａｌｕｅを代入して、ｔｍｐ＿２を算出する（ステップＳ２０７）。
【００６３】
【数５】
2020030691.tif 000007
【００６４】
次に、ＡＤＭＭ演算モジュール２１２は、ｔｍｐ＿２がｍｉｎ＿ｖａｌｕｅより小さい場合、ｍｉｎ＿ｖａｌｕｅをｔｍｐ＿２に更新し、また、ｙ＿ｌｏｃａｌをステップＳ２０１において選択された双対変数ｙの値に更新する（ステップＳ２０８）。なお、ｍｉｎ＿ｖａｌｕｅに値が設定されていない場合、ＡＤＭＭ演算モジュール２１２は、ｍｉｎ＿ｖａｌｕｅにｔｍｐ＿２を設定し、また、ｙ＿ｌｏｃａｌにステップＳ２０１において選択された双対変数ｙの値を設定する。
【００６５】
次に、ＡＤＭＭ演算モジュール２１２は、全ての双対変数ｙの値について処理が完了したか否かを判定する（ステップＳ２０９）。
【００６６】
全ての双対変数ｙの値について処理が完了していないと判定された場合、ＡＤＭＭ演算モジュール２１２は、ステップＳ２０１に戻り、同様の処理を実行する。
【００６７】
全ての双対変数ｙの値について処理が完了したと判定された場合、ＡＤＭＭ演算モジュール２１２は、ノード接続情報２２０に基づいて、接続ノード１００にｙ＿ｌｏｃａｌを送信し、また、当該接続ノード１００から算出したｙ＿ｌｏｃａｌを取得する（ステップＳ２１０）。
【００６８】
具体的には、ＡＤＭＭ演算モジュール２１２は、接続ノード１００にｙ＿ｌｏｃａｌを送信した後、待ち状態に移行する。全ての接続ノード１００からｙ＿ｌｏｃａｌを取得した場合、ＡＤＭＭ演算モジュール２１２は、次のステップに進む。
【００６９】
なお、接続ノード１００は、他のノード１００からｙ＿ｌｏｃａｌを受信した場合、履歴情報２２１から最も新しい履歴データに格納されるｙ＿ｌｏｃａｌを取得し、他のノード１００に送信してもよいし、また、決定変数算出処理を開始してもよい。
【００７０】
次に、ＡＤＭＭ演算モジュール２１２は、自ノード１００及び接続ノード１００によって算出されたｙ＿ｌｏｃａｌに基づいて、決定変数ｘｉの値を算出する（ステップＳ２１１）。
【００７１】
このとき、ＡＤＭＭ演算モジュール２１２は、決定変数ｘｉの値及び目的関数値を対応づけた履歴データを履歴情報２２１に格納する。
【００７２】
このように、ＡＤＭＭ演算モジュール２１２は、双対問題の最適解が得られるまでｙ＿ｌｏｃａｌを算出する処理を繰り返し実行し、自ノード１００及び接続ノード１００が算出したｙ＿ｌｏｃａｌを用いて決定変数ｘｉの最適値を算出する。
【００７３】
制御モジュール２１０は、算出された決定変数ｘｉの値に基づいて、ノード１００を制御する。例えば、システム１０が交通管理システムである場合、乗用車がノード１００に対応し、移動経路が決定変数ｘｉに対応する。この場合、ノード１００は、渋滞を回避し、かつ、最短時間で目的地に向かう移動経路を算出し、当該移動経路への移動をナビゲーションする。
【００７４】
実施例１によれば、目的関数ｆｉ（ｘｉ）を定義できない場合であっても、学習処理によってニューラルネットワークを構築し、当該ニューラルネットワークを用いることによって最適化問題を解くことができる。すなわち、各ノード１００の制御の最適化を実現できる。
【実施例２】
【００７５】
実施例２では、システム１０にノード１００が追加された場合に実行される処理について説明する。以下の説明では、システム１０に新たに追加されるノード１００を新規ノード１００と記載する。
【００７６】
実施例２のシステム１０の構成は実施例１と同一である。実施例２のノード１００のハードウェア構成は実施例１と同一である。また、システム１０内のノード１００のソフトウェア構成は実施例１と同一である。
【００７７】
システム１０に追加されるノード１００のソフトウェア構成は実施例１と一部異なる。具体的には、システム１０に追加されるノード１００は、ノード接続情報２２０及び履歴情報２２１を保持していない。
【００７８】
図６は、実施例２のシステム１０に新規ノード１００が追加される場合に実行される処理の流れを説明するシーケンス図である。
【００７９】
新規ノード１００の制御モジュール２１０は、システム１０内の全てのノード１００に対して参加要求を送信する（ステップＳ３０１）。
【００８０】
システム１０内のノード１００の制御モジュール２１０は、参加要求を受信した場合、自ノード１００の識別情報及びアドレスを含む応答を新規ノード１００に送信する（ステップＳ３０２）。
【００８１】
新規ノード１００の制御モジュール２１０は、システム１０内のノード１００からの応答に基づいて、接続先のノード１００を選択する（ステップＳ３０３）。
【００８２】
具体的には、制御モジュール２１０は、新規ノード１００と他のノード１００との間の通信時間又は物理的な距離が短い順に、所定の数のノード１００を選択する。なお、隣接していないノード１００からの影響を取り込むために、制御モジュール２１０は、隣接のノード１００以外のノード１００の中から、一つ以上のノード１００を選択してもよい。
【００８３】
新規ノード１００の制御モジュール２１０は、選択されたノード１００に接続要求を送信する（ステップＳ３０４）。接続要求には、新規ノード１００の識別情報及びアドレスが含まれる。
【００８４】
システム１０内のノード１００の制御モジュール２１０は、接続要求を受信した場合、新規ノード１００に応答を送信し（ステップＳ３０５）、また、接続要求に含まれる情報に基づいてノード接続情報２２０を更新する（ステップＳ３０６）。
【００８５】
具体的には、制御モジュール２１０は、ノード接続情報２２０にエントリを追加し、追加されたエントリのノードＩＤ３０１及びアドレス３０２に、新規ノード１００の識別情報及びアドレスを設定する。
【００８６】
新規ノード１００の制御モジュール２１０は、選択されたノード１００から応答を受信した後、ノード接続情報２２０を生成する（ステップＳ３０７）。
【００８７】
具体的には、制御モジュール２１０は、ノード接続情報２２０にエントリを追加し、追加されたエントリのノードＩＤ３０１及びアドレス３０２に、応答を送信したノード１００の識別情報及びアドレスを設定する。なお、選択されたノード１００が複数である場合、制御モジュール２１０は、各ノード１００から応答を受信した場合に、同様の処理を実行する。
【００８８】
以上の処理によって、新規ノード１００は選択されたノード１００との間で論理接続を形成する。すなわち、ノードネットワークの構成が変更される。
【００８９】
新規ノード１００の制御モジュール２１０は、選択されたノード１００に履歴データ取得要求を送信する（ステップＳ３０８）。
【００９０】
選択されたノード１００が複数である場合、制御モジュール２１０は、論理接続の特性、すなわち、相互作用の強さに基づいて、各ノード１００から取得する履歴データのデータ量を決定する。制御モジュール２１０は、各ノード１００にデータ量を含む履歴データの取得要求を送信する。
【００９１】
例えば、実施例２では、履歴データのデータ量を表す値として比率を用いる。制御モジュール２１０は、各ノード１００から取得する履歴データのデータ量が同じになるように比率を決定する。また、制御モジュール２１０は、接続の強さを表す数値に基づいて、比率を決定する。なお、各ノード１００の比率の合計値が１００となるように比率は決定される。
【００９２】
新規ノード１００は、接続ノード１００と類似する振る舞いを行うものと考えられる。したがって、目的関数も類似しているものと推定される。そこで、新規ノード１００は、接続ノード１００の履歴データを用いた学習処理を実行することによってニューラルネットワークを構築する。
【００９３】
ノード１００は、履歴データ取得要求を受信した場合、履歴情報２２１から履歴データを読み出し、履歴データを新規ノード１００に送信する（ステップＳ３０９）。
【００９４】
履歴データの取得要求に比率が含まれる場合、制御モジュール２１０は、当該比率に基づいて、履歴情報２２１から所定の数の履歴データを読み出す。例えば、比率が５０の場合、制御モジュール２１０は、履歴情報２２１の全データ量（エントリ数）の５０パーセント分の履歴データを読み出す。
【００９５】
新規ノード１００は、選択された全てのノード１００から履歴データを取得した場合、受信した履歴データを用いてニューラルネットワークの構築処理を実行する（ステップＳ３１０）。実施例２のニューラルネットワークの構築処理は、実施例１と同一であるため説明を省略する。
【００９６】
なお、選択されたノード１００は、ステップＳ３０９の処理が完了した後に、決定変数算出処理を実行してもよい。また、新規ノード１００は、ステップＳ３１０の処理が完了した後、決定変数算出処理を実行してもよい。
【００９７】
実施例２によれば、システム１０に新規ノード１００を追加する場合、予め、目的関数を設定していなくても、ＡＤＭＭの演算を実行することができる。また、システム１０内のノード１００は、新規ノード１００の追加に伴うノードネットワークの構成の変化に応じてニューラルネットワークを更新し、当該変化に追従した制御の最適化を行うことができる。
【実施例３】
【００９８】
実施例３では、システム１０からノード１００が削除された場合に実行される処理について説明する。以下の説明では、システム１０から削除されるノード１００を削除ノード１００と記載する。
【００９９】
実施例３のシステム１０の構成は実施例１と同一である。実施例３のノード１００のハードウェア構成及びハードウェアは実施例１と同一である。
【０１００】
図７は、実施例３のシステム１０から削除ノード１００が削除される場合に実行される処理の流れを説明するシーケンス図である。
【０１０１】
削除ノード１００は、ノード接続情報２２０を参照し、接続ノード１００に接続変更要求を送信する（ステップＳ４０１）。接続変更要求には、削除ノード１００の識別情報及び削除ノード１００が保持するノード接続情報２２０が含まれる。
【０１０２】
接続ノード１００は、接続変更要求を受信した場合、新たに接続するノード１００を決定する（ステップＳ４０２）。
【０１０３】
具体的には、制御モジュール２１０は、接続変更要求に含まれるノード接続情報２２０を参照し、各エントリのノードＩＤ３０１からノード１００の識別情報を取得する。制御モジュール２１０は、自ノード１００が保持するノード接続情報２２０のノードＩＤ３０１と取得したノード１００の識別情報とを比較し、登録されていないノード１００を特定する。制御モジュール２１０は、特定されたノード１００を接続するノード１００に決定する。
【０１０４】
接続ノード１００は、ノード接続情報２２０を更新する（ステップＳ４０３）。
【０１０５】
具体的には、制御モジュール２１０は、ノードＩＤ３０１に削除ノード１００の識別情報が設定されたエントリを検索し、当該エントリを削除する。制御モジュール２１０は、削除ノード１００から受信したノード接続情報２２０を参照し、ノードＩＤ３０１に決定されたノード１００の識別情報が設定されるエントリを取得する。制御モジュール２１０は、ノード接続情報２２０に取得したエントリを追加する。
【０１０６】
当該処理によって、接続ノード１００と削除ノード１００との間の論理接続が削除される。すなわち、ノードネットワークから削除ノード１００が削除される。さらに、接続ノード１００は、削除ノード１００が接続していた他のノード１００との間で論理接続を形成する。
【０１０７】
接続ノード１００は、決定変数算出処理を実行する（ステップＳ４０４）。決定変数算出処理は実施例１と同一であるため説明を省略する。
【０１０８】
実施例３によれば、接続ノード１００は、システム１０からのノード１００の削除に伴って、ノードネットワークの構成を変更する。また、接続ノード１００は、ノードネットワークの構成の変更に伴って決定変数ｘｉの値を算出する。したがって、システム１０内のノード１００は、削除ノード１００の削除に伴うノードネットワークの構成の変化に応じてニューラルネットワークを更新し、当該変化に追従した制御の最適化を行うことができる。
【実施例４】
【０１０９】
実施例４では、ノード１００が接続ノード１００を動的に変更する場合に実行する処理について説明する。
【０１１０】
実施例４のシステム１０の構成は実施例１と同一である。実施例４のノード１００のハードウェア構成及びハードウェアは実施例１と同一である。
【０１１１】
図８は、実施例４のノード１００が実行する論理接続変更処理の概要を説明するフローチャートである。
【０１１２】
制御モジュール２１０は、候補ノードリスト生成処理を実行する（ステップＳ５０１）。当該処理によって候補ノードリスト９００が生成される。候補ノードリスト９００のデータ構造の詳細は図９を用いて説明する。また、候補ノードリスト生成処理の詳細は、図１０を用いて説明する。
【０１１３】
次に、制御モジュール２１０は、接続ノード選択処理を実行する（ステップＳ５０２）。接続ノード選択処理の詳細は図１１を用いて説明する。
【０１１４】
次に、制御モジュール２１０は、決定変数算出処理を実行する（ステップＳ５０３）。実施例３の決定変数算出処理は、実施例１と同一である。
【０１１５】
図９は、実施例４のノード１００が生成する候補ノードリスト９００のデータ構造の一例を示す図である。
【０１１６】
候補ノードリスト９００は、論理接続変更処理において生成される情報である。論理接続変更処理が終了した後、候補ノードリスト９００は削除される。
【０１１７】
候補ノードリスト９００は、ノードＩＤ９０１、アドレス９０２、階層９０３、及びフラグ９０４から構成されるエントリを格納する。接続ノード１００の候補となるノード１００に対して一つのエントリが存在する。
【０１１８】
ノードＩＤ９０１は、候補ノード１００として選択されたノード１００の識別情報を格納するフィールドである。
【０１１９】
アドレス９０２は、ノードＩＤ９０１に対応するノード１００と通信するためのアドレスを格納するフィールドである。
【０１２０】
階層９０３は、ノードネットワークにおいて、ノードＩＤ９０１に対応するノード１００に到達するまでに経由したノード１００の数を格納するフィールドである。
【０１２１】
フラグ９０４は、候補ノードリスト生成処理において処理済のエントリであるか否かを示すフラグを格納するフィールドである。フラグ９０４には、処理済であることを示す「１」及び未処理であることを示す「０」のいずれかが格納される。
【０１２２】
図１０は、実施例４のノード１００が実行する候補ノードリスト生成処理の一例を説明するフローチャートである。なお、ノードネットワーク内の探索範囲を示す階層変数Ｈの最大値としてＨｍａｘが設定されているものとする。
【０１２３】
制御モジュール２１０は、階層変数Ｈに初期値として「１」を設定する（ステップＳ６０１）。
【０１２４】
次に、制御モジュール２１０は、自ノード１００が保持するノード接続情報２２０に設定されたノード１００を候補ノードリスト９００に登録する（ステップＳ６０２）。具体的には、以下のような処理が実行される。
【０１２５】
制御モジュール２１０は、候補ノードリスト９００に、ノード接続情報２２０に格納されるエントリの数だけエントリを追加する。制御モジュール２１０は、追加された各エントリのノードＩＤ９０１及びアドレス９０２に、ノード接続情報２２０の各エントリのノードＩＤ３０１及びアドレス３０２の値を設定する。
【０１２６】
また、制御モジュール２１０は、追加された各エントリの階層９０３に階層変数Ｈの値を設定し、フラグ９０４に「０」を設定する。以上がステップＳ６０２の処理の説明である。
【０１２７】
次に、制御モジュール２１０は、候補ノードリスト９００を参照し、階層９０３の値が階層変数Ｈの値に一致し、かつ、フラグ９０４が「０」であるエントリの中からターゲットエントリ（ターゲットノード１００）を選択する（ステップＳ６０３）。
【０１２８】
次に、制御モジュール２１０は、ターゲットノード１００からノード接続情報２２０を取得する（ステップＳ６０４）。
【０１２９】
具体的には、制御モジュール２１０は、ターゲットエントリのアドレス９０２に基づいて、ターゲットノード１００にアクセスすることによってノード接続情報２２０を取得する。
【０１３０】
次に、制御モジュール２１０は、ターゲットノード１００から取得されたノード接続情報２２０に設定されたノード１００を候補ノードリスト９００に登録する（ステップＳ６０５）。具体的には、以下のような処理が実行される。
【０１３１】
制御モジュール２１０は、候補ノードリスト９００に、取得したノード接続情報２２０に格納されるエントリの数だけエントリを追加する。制御モジュール２１０は、追加された各エントリのノードＩＤ９０１及びアドレス９０２に、取得したノード接続情報２２０の各エントリのノードＩＤ３０１及びアドレス３０２の値を設定する。
【０１３２】
制御モジュール２１０は、追加された各エントリの階層９０３に階層変数Ｈの値を設定する。
【０１３３】
階層変数Ｈの値がＨｍａｘである場合、制御モジュール２１０は、フラグ９０４に「１」を設定する。階層変数Ｈの値がＨｍａｘでない場合、制御モジュール２１０は、フラグ９０４に「０」を設定する。以上がステップＳ６０５の処理の説明である。
【０１３４】
次に、制御モジュール２１０は、階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了したか否かを判定する（ステップＳ６０６）。
【０１３５】
具体的には、制御モジュール２１０は、階層９０３が階層変数Ｈの値に一致する全てのエントリのフラグ９０４が「１」であるか否かを判定する。前述の条件を満たす場合、制御モジュール２１０は、階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了したと判定する。
【０１３６】
階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了していないと判定された場合、制御モジュール２１０は、ステップＳ６０３に戻り、同様の処理を実行する。
【０１３７】
階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了したと判定された場合、制御モジュール２１０は、階層変数Ｈの値がＨｍａｘであるか否かを判定する（ステップＳ６０７）。
【０１３８】
階層変数Ｈの値がＨｍａｘでないと判定された場合、制御モジュール２１０は、現在の階層変数Ｈの値に１を加算した値を、階層変数Ｈに設定する（ステップＳ６０８）。その後、制御モジュール２１０は、ステップＳ６０３に戻り、同様の処理を実行する。
【０１３９】
階層変数Ｈの値がＨｍａｘであると判定された場合、制御モジュール２１０は、処理を終了する。
【０１４０】
図１１は、実施例４のノード１００が実行する接続ノード選択処理の一例を説明するフローチャートである。
【０１４１】
制御モジュール２１０は、階層変数Ｈに初期値として「２」を設定する（ステップＳ７０１）。このとき、制御モジュール２１０は、階層９０３の値が２以上であるエントリのフラグ９０４に「０」を設定する。
【０１４２】
次に、制御モジュール２１０は、候補ノードリスト９００を参照し、階層９０３の値が階層変数Ｈの値に一致し、かつ、フラグ９０４が「０」であるエントリの中からターゲットエントリ（ターゲットノード１００）を選択する（ステップＳ７０２）。
【０１４３】
次に、制御モジュール２１０は、ターゲットノード１００との間に論理接続を形成した場合の評価値を算出する（ステップＳ７０３）。例えば、制御モジュール２１０は関数ｇ（ｚ）の値を評価値として算出する。なお、本発明は評価値の種類に限定されない。
【０１４４】
次に、制御モジュール２１０は、評価値に基づいて、ターゲットノード１００との間に論理接続を形成するか否かを判定する（ステップＳ７０４）。
【０１４５】
例えば、評価値又は評価値の変化率が閾値より大きい場合、制御モジュール２１０は、ターゲットノード１００との間に論理接続を形成すると判定する。なお、本発明は評価値を用いた判定基準の内容に限定されない。
【０１４６】
ターゲットノード１００との間に論理接続を形成しないと判定された場合、制御モジュール２１０は、ステップＳ７０７に進む。
【０１４７】
ターゲットノード１００との間に論理接続を形成すると判定された場合、制御モジュール２１０は、ターゲットエントリのアドレス９０２に基づいて、ターゲットノード１００に接続要求を送信する（ステップＳ７０５）。接続要求には、自ノード１００の識別情報及びアドレスが含まれる。
【０１４８】
このとき、ターゲットノード１００は、ノード接続情報２２０に要求元のノード１００に対応するエントリを追加する。
【０１４９】
次に、制御モジュール２１０は、ターゲットノード１００から接続要求に対する応答を受信した場合、ノード接続情報２２０を更新し（ステップＳ７０６）、その後、ステップＳ７０７に進む。
【０１５０】
具体的には、制御モジュール２１０は、ノード接続情報２２０にエントリを追加し、追加されたエントリのノードＩＤ３０１及びアドレス３０２に、ターゲットエントリのノードＩＤ９０１及びアドレス９０２の値を設定する。
【０１５１】
ステップＳ７０７では、制御モジュール２１０は、階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了したか否かを判定する（ステップＳ７０７）。
【０１５２】
階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了していないと判定された場合、制御モジュール２１０は、ステップＳ７０２に戻り、同様の処理を実行する。
【０１５３】
階層９０３が階層変数Ｈの値に一致する全てのエントリについて処理が完了したと判定された場合、制御モジュール２１０は、階層変数Ｈの値がＨｍａｘであるか否かを判定する（ステップＳ７０８）。
【０１５４】
階層変数Ｈの値がＨｍａｘでないと判定された場合、制御モジュール２１０は、現在の階層変数Ｈの値に１を加算した値を、階層変数Ｈに設定する（ステップＳ７０９）。その後、制御モジュール２１０は、ステップＳ７０２に戻り、同様の処理を実行する。
【０１５５】
階層変数Ｈの値がＨｍａｘであると判定された場合、制御モジュール２１０は、処理を終了する。
【０１５６】
制御モジュール２１０は、ステップＳ７０７の処理の後に、終了条件を満たすか否かを判定してもよい。例えば、評価値が閾値より大きい場合、終了条件を満たすと判定する。終了条件と満たす場合、制御モジュール２１０は処理を終了する。終了条件を満たさない場合、制御モジュール２１０は、ステップＳ７０８に進む。
【０１５７】
図１１では、制御モジュール２１０は、階層ごとに、接続ノード１００を探索しているがこれに限定されたない。例えば、制御モジュール２１０は、候補ノードリスト９００からランダムにターゲットエントリを選択してもよい。
【０１５８】
また、ステップＳ７０８の判定結果がＹＥＳである場合、制御モジュール２１０は、現在、論理接続を形成している接続ノード１００を削除した場合の評価値を算出し、当該評価値に基づいて論理接続を削除するか否かを判定してもよい。論理接続を削除すると判定された場合、制御モジュール２１０は、ターゲットノード１００に削除要求を送信し、また、ノード接続情報２２０からターゲットノード１００に対応するエントリを削除する。このとき、ターゲットノード１００は、接続要求に基づいて、ノード接続情報２２０から要求元のノード１００に対応するエントリを削除する。
【０１５９】
制御モジュール２１０は、ノードネットワークの構成が変更された後の履歴データに基づいて、ニューラルネットワーク構築処理が実行する。これによって、更新後のノードネットワークに応じたニューラルネットワークが構築される。すなわち、ノードネットワークに応じた目的関数ｆｉ（ｘｉ）が自動的に設定される。
【０１６０】
このように、実施例４では、ノードネットワークの構成及びノード１００の制御の最適化を動的に行うことができる。
【０１６１】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０１６２】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０１６３】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｐｙｔｈｏｎ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０１６４】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０１６５】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０１６６】
１０  システム
１００  ノード
２００  プロセッサ
２０１  メモリ
２０２  ネットワークインタフェース
２１０  制御モジュール
２１１  学習モジュール
２１２  ＡＤＭＭ演算モジュール
２１３  目的関数値算出モジュール
２２０  ノード接続情報
２２１  履歴情報
【図１】
2020030691.tif 000008
【図２】
2020030691.tif 000009
【図３】
2020030691.tif 000010
【図４】
2020030691.tif 000011
【図５】
2020030691.tif 000012
【図６】
2020030691.tif 000013
【図７】
2020030691.tif 000014
【図８】
2020030691.tif 000015
【図９】
2020030691.tif 000016
【図１０】
2020030691.tif 000017
【図１１】
2020030691.tif 000018