(57)【要約】【課題】大規模な最適化問題を最適化装置にマッピングして解くことを可能とする。【解決手段】演算処理部１１ａ１〜１１ａｍは、複数のニューロンのうち所定数のニューロンが、自ニューロンが属する演算処理部に含まれる他の全てのニューロンとそれぞれ接続されたニューラルネットワークにおける、所定数のニューロンの値についての演算を、各々が行い、制御部１２は、複数のニューロンに対し、同一の演算処理部に含まれる何れか２つのニューロンに対しては評価関数の密結合部分に対応する密結合重み係数をそれぞれ与えて演算させるとともに、異なる演算処理部に含まれる何れか２つのニューロンに対しては評価関数の疎結合部分に対応する疎結合重み係数を用いてエネルギーの変化分を自身で計算した後、その変化分をそれぞれ与えて演算させる。【選択図】図１
2019159997.tif 000002
【特許請求の範囲】
【請求項１】
複数のニューロンを含み、エネルギーを表す評価関数の極小値を計算する最適化装置において、
前記複数のニューロンのうち所定数のニューロンが、自ニューロンが属する演算処理部に含まれる他の全てのニューロンとそれぞれ接続されたニューラルネットワークにおける、前記所定数のニューロンの値についての演算を、各々が行う複数の演算処理部と、
前記複数のニューロンに対し、同一の演算処理部に含まれる何れか２つのニューロンに対しては前記評価関数の密結合部分に対応する密結合重み係数をそれぞれ与えて演算させるとともに、異なる演算処理部に含まれる何れか２つのニューロンに対しては前記評価関数の疎結合部分に対応する疎結合重み係数を用いて前記エネルギーの変化分を自身で計算した後、計算した前記変化分をそれぞれ与えて演算させる制御部と、
を有する最適化装置。
【請求項２】
前記複数の演算処理部の各々は、前記制御部と１対１で接続される、請求項１に記載の最適化装置。
【請求項３】
前記複数の演算処理部は、バス状またはリング状に接続され、前記複数の演算処理部の何れかが、前記制御部と接続される、請求項１に記載の最適化装置。
【請求項４】
前記複数の演算処理部は、メッシュ状またはトーラス状の２次元接続により接続され、前記複数の演算処理部の何れかが、前記制御部と接続される、請求項１に記載の最適化装置。
【請求項５】
前記複数の演算処理部の各々は、前記密結合重み係数と前記変化分のそれぞれに付与されたインデックスに基づいて、第１の方向に隣接する第１の演算処理部または、第２の方向に隣接する第２の演算処理部のうち、前記密結合重み係数と前記変化分の通信経路が短くなる何れか一方に、前記密結合重み係数と前記変化分を送信する、請求項４に記載の最適化装置。
【請求項６】
複数のニューロンを含み、エネルギーを表す評価関数の極小値を計算する最適化装置の制御方法において、
複数の演算処理部の各々が、前記複数のニューロンのうち所定数のニューロンが、自ニューロンが属する演算処理部に含まれる他の全てのニューロンとそれぞれ接続されるニューラルネットワークにおける、前記所定数のニューロンの値についての演算を行い、
制御部が、前記複数のニューロンに対し、同一の演算処理部に含まれる何れか２つのニューロンに対しては前記評価関数の密結合部分に対応する密結合重み係数をそれぞれ与えて演算させるとともに、異なる演算処理部に含まれる何れか２つのニューロンに対しては前記評価関数の疎結合部分に対応する疎結合重み係数を用いて前記エネルギーの変化分を自身で計算した後、計算した前記変化分をそれぞれ与えて演算させる、
最適化装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化装置及び最適化装置の制御方法に関する。
【背景技術】
【０００２】
ノイマン型コンピュータが不得意とする多変数の最適化問題を解く方法として、イジング型のエネルギー関数を用いた最適化装置（イジングマシンまたはボルツマンマシンと呼ばれる場合もある）がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
【０００３】
最適化装置は、たとえば、ニューラルネットワークを用いてモデル化することもできる。その場合、最適化装置に含まれる複数のユニット（ビット）のそれぞれが、他のビットの状態と、他のビットと自身のビットとの結合の強さを示す重み係数（結合係数とも呼ばれる）とに応じて０または１を出力するニューロンとして機能する。最適化装置は、たとえば、シミュレーテッド・アニーリングを用いた確率的探索法により、上記のようなエネルギー関数（コスト関数、目的関数とも呼ばれる）の最小値が得られる各ビットの状態の組み合わせを、解として求める。
【０００４】
なお、従来、確率的探索法の１つであるマルコフ連鎖モンテカルロ法を、複数のハードウェアにより並列に行う手法があった（たとえば、特許文献１参照）。なお、この手法では、複数のハードウェアにそれぞれ同じ重み係数が与えられて演算が行われる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１３−５２１５４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の技術では、ハードウェア的な制約によって、確率的探索を行う単一の回路をもつ最適化装置に大規模な最適化問題をマッピングして解くことが困難であるという問題があった。たとえば、ニューロン数が１０２４（各ニューロンが他の全てのニューロンとの間で結合をもつ場合の重み係数の数は、１０２４×１０２４（約１００万個））程度が限度であった。
【０００７】
１つの側面では、本発明は、大規模な最適化問題を最適化装置にマッピングして解くことが可能な最適化装置及び最適化装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの実施態様では、複数のニューロンを含み、エネルギーを表す評価関数の極小値を計算する最適化装置において、前記複数のニューロンのうち所定数のニューロンが、自ニューロンが属する演算処理部に含まれる他の全てのニューロンとそれぞれ接続されたニューラルネットワークにおける、前記所定数のニューロンの値についての演算を、各々が行う複数の演算処理部と、前記複数のニューロンに対し、同一の演算処理部に含まれる何れか２つのニューロンに対しては前記評価関数の密結合部分に対応する密結合重み係数をそれぞれ与えて演算させるとともに、異なる演算処理部に含まれる何れか２つのニューロンに対しては前記評価関数の疎結合部分に対応する疎結合重み係数を用いて前記エネルギーの変化分を自身で計算した後、計算した前記変化分をそれぞれ与えて演算させる制御部と、を有する最適化装置が提供される。
【０００９】
また、１つの実施態様では、最適化装置の制御方法が提供される。
【発明の効果】
【００１０】
１つの側面では、本発明は、大規模な最適化問題を最適化装置にマッピングして解くことが可能になる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態の最適化装置の一例を示す図である。
【図２】第２の実施の形態の最適化装置の一例を示す図である。
【図３】確率的探索回路の一例を示す図である。
【図４】第２の実施の形態の最適化装置におけるインデックスコントローラの一例を示す図である。
【図５】重み係数インデックスコントローラの一例を示す図である。
【図６】最終状態インデックスコントローラの一例を示す図である。
【図７】第２の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【図８】第３の実施の形態の最適化装置の一例を示す図である。
【図９】第３の実施の形態の最適化装置におけるインデックスコントローラの一例を示す図である。
【図１０】重み係数インデックスコントローラの一例を示す図である。
【図１１】最終状態インデックスコントローラの一例を示す図である。
【図１２】第３の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【図１３】第４の実施の形態の最適化装置の一例を示す図である。
【図１４】第４の実施の形態の最適化装置におけるインデックスコントローラの一例を示す図である。
【図１５】重み係数インデックスコントローラの一例を示す図である。
【図１６】最終状態インデックスコントローラの一例を示す図である。
【図１７】第４の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
以下に示す最適化装置は、エネルギーを表す評価関数である、イジング型のエネルギー関数の極小値（極小値が複数ある場合には、なるべく小さい値）を計算することで、巡回セールスマン問題などの最適化問題を計算する。イジング型のエネルギー関数Ｅ（ｘ）は、たとえば、以下の式（１）で定義される。
【００１３】
【数１】
2019159997.tif 000003
【００１４】
右辺の１項目は、全ニューロン（全ビット）から選択可能な２つのニューロンの全組み合わせについて、漏れと重複なく、２つのニューロンの値（０または１）と重み係数との積を積算したものである。ｘｉは、ｉ番目のニューロンの値、ｘｊは、ｊ番目のニューロンの値であり、Ｗｉｊは、ｉ番目とｊ番目のニューロンの結合の強さを示す重み係数である。なお、Ｗｉｊ＝Ｗｊｉ、Ｗｉｉ＝０である。
【００１５】
右辺の２項目は、全ニューロンのそれぞれのバイアスとニューロンの値との積の総和を求めたものである。ｂｉは、ｉ番目のニューロンのバイアスを示している。
また、ｉ番目のニューロンのスピン反転（値の変化）に伴うエネルギー変化ΔＥｉは、以下の式（２）で表される。
【００１６】
【数２】
2019159997.tif 000004
【００１７】
式（２）において、ｉ番目のニューロンの値ｘｉが１のとき、２ｘｉ−１は１となり、値ｘｉが０のとき、２ｘｉ−１は−１となる。なお、以下の式（３）で表されるｈｉはローカルフィールド（局所場）と呼ばれ、値ｘｉに応じてローカルフィールドｈｉに符号（＋１または−１）を乗じたものがエネルギー変化ΔＥｉである。
【００１８】
【数３】
2019159997.tif 000005
【００１９】
（第１の実施の形態）
図１は、第１の実施の形態の最適化装置の一例を示す図である。
最適化装置１０は、演算処理部１１ａ１，１１ａ２，…，１１ａｋ，…，１１ａｍ、制御部１２を有する。
【００２０】
演算処理部１１ａ１〜１１ａｍのそれぞれには、全ニューロンのうち、所定数のニューロンが属する。つまり、演算処理部１１ａ１〜１１ａｍのそれぞれは、所定数のニューロンの値についての演算を行う。この所定数のニューロンに対して、自ニューロンが属する演算処理部に含まれる他の全てのニューロンとそれぞれ接続されるように（つまり全結合状態となるように）、重み係数が設定される。この重み係数は、前述のエネルギー関数の密結合部分（全結合しているニューロンについての積和演算を行う部分）に対応しているため、以下この重み係数を、密結合重み係数という。
【００２１】
図１には、ｍ個のニューロン群１５ａ１，１５ａ２，…，１５ａｋ，…，１５ａｍによるニューラルネットワークの例が示されている。ニューロン群１５ａ１〜１５ａｍは、それぞれ対応する演算処理部に属している。たとえば、ニューロン群１５ａ１は、演算処理部１１ａ１に属し、ニューロン群１５ａ２は、演算処理部１１ａ２に属し、ニューロン群１５ａｋは、演算処理部１１ａｋに属し、ニューロン群１５ａｍは、演算処理部１１ａｍに属する。ニューロン群１５ａ１〜１５ａｍは、それぞれ上記所定数のニューロンを含む。
【００２２】
ニューロン群１５ａ１〜１５ａｍのそれぞれに含まれるニューロン数をｎとすると、全ニューロン数Ｍは、Ｍ＝ｍ×ｎである。たとえば、ニューロン群１５ａ１は、ニューロン１５ｂ１，１５ｂ２，１５ｂ３，１５ｂ４，１５ｂ５，１５ｂ６，１５ｂ７，１５ｂ８を有する。ニューロン１５ｂ１〜１５ｂ８のそれぞれは、互いに結合している。つまり、ニューロン１５ｂ１〜１５ｂ８は、全結合状態にある。また、ニューロン１５ｂ１〜１５ｂ８のそれぞれは、ニューロン群１５ａ２〜１５ａｍに含まれる一部のニューロンに結合している。
【００２３】
最適化問題のマッピング時（重み係数の設定＝プログラミング）にニューロン群間の結合数が制約となる。しかし、たとえば、各ニューロン群に含まれるニューロン数をｎ＝１０２４とすると、ニューロン群間の結合数が、ニューロン群内での結合数の１／１０程度であれば、多くの場合問題なくプログラミングが可能である。
【００２４】
たとえば、ニューロン群間の結合数を１２８個、つまり各ニューロンが他のニューロン群の１２８個のニューロンと結合可能とすると、１つのニューロン群内で用意すべき重み係数の数は、１０２４２＋１０２４×１２８となる。ニューロン群の数が、たとえば、４のとき、１０２４×４個のニューロンを相互接続させる場合には、重み係数の数は、４．５２×１０６程度になるため、ニューロン群間の接続数を限定することで、用意すべき重み係数の数を減らすことができる。つまり、後述する制御部１２内の記憶部１２ａなどに記憶する重み係数の数を減らせることで、装置規模を縮小できる。
【００２５】
図１に示すように、重み係数行列のうち、対角部分にある重み係数群（Ｗｉｊ（１），Ｗｉｊ（２），…，Ｗｉｊ（ｋ），…，Ｗｉｊ（ｍ））のそれぞれは、ニューロン群１５ａ１〜１５ａｍのそれぞれに含まれるニューロン間の結合の強さを示す前述の密結合重み係数からなる。たとえば、重み係数群Ｗｉｊ（１）は、ニューロン群１５ａ１に含まれるニューロン１５ｂ１〜１５ｂ８から２つのニューロンを取り出す全組み合わせのそれぞれの結合の強さを示す密結合重み係数からなる。
【００２６】
一方、重み係数行列のうち、非対角部分にある重み係数群（たとえば、Ｗｉｊ（２１），…，Ｗｉｊ（ｋ１），…，Ｗｉｊ（ｍ１）など）のそれぞれは、異なるニューロン群に属する（異なる演算処理部に属する）ニューロン間の結合の強さを示す重み係数からなる。なお、異なるニューロン群に属するニューロン同士は、前述のように互いに結合していないものが多いため、非対角部分にある重み係数群に含まれる重み係数は、値が０であるものが多い。このような重み係数は、前述のエネルギー関数の疎結合部分（異なる演算処理部に属するニューロンについての積和演算を行う部分）に対応しているため、以下この重み係数を、疎結合重み係数という。
【００２７】
制御部１２は、全ニューロンに対し、同一の演算処理部に含まれる何れか２つのニューロンに対しては密結合重み係数をそれぞれ与えて演算させる。また、制御部１２は、異なる演算処理部に含まれる何れか２つのニューロンに対しては、疎結合重み係数を用いてエネルギーの変化分を自身で計算する。そして、制御部１２は、それら２つのニューロンに対して、その変化分をそれぞれ与えて（つまり、上記異なる演算処理部のそれぞれにその変化分を送信する）演算させる。
【００２８】
また、制御部１２は、記憶部１２ａを有する。記憶部１２ａは、たとえば、計算対象の最適化問題に応じて値が設定された疎結合重み係数を記憶する。記憶部１２ａは、密結合重み係数を記憶してもよい。これらの重み係数は、たとえば、図示しない制御装置（コンピュータなど）から供給される。
【００２９】
なお、演算処理部１１ａ１〜１１ａｍのそれぞれは、たとえば、１チップの半導体集積回路である。制御部１２は、たとえば、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含むコントローラである。なお、制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサであってもよい。また、記憶部１２ａとして、ＲＡＭ（Random Access Memory）などの揮発性メモリ、または、フラッシュメモリやＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）などの不揮発性メモリを用いることができる。
【００３０】
以下、第１の実施の形態の最適化装置１０の動作例を説明する。
制御部１２は、密結合重み係数を、演算処理部１１ａ１〜１１ａｍに送信する。
演算処理部１１ａ１〜１１ａｍのそれぞれでは、制御部１２が送信した密結合重み係数のうち、自身に属するニューロン群に対応する密結合重み係数を用いた演算（ニューロンの値を更新する演算処理）を行う。以下、演算処理部１１ａ１〜１１ａｍのそれぞれで行われる演算の例を説明する。
【００３１】
たとえば、ｋ番目のニューロン群１５ａｋに含まれる複数のニューロンのうちｉ番目のニューロンが変化するときのローカルフィールドｈｉ（ｋ）は、以下の式（４）で表される。
【００３２】
【数４】
2019159997.tif 000006
【００３３】
式（４）において、右辺の１項目の積和演算部分と２項目のバイアスとの和が、ｋ番目のニューロン群１５ａｋに含まれる他のニューロン（ｉ番目のニューロン以外のニューロン）の影響によるエネルギーの変化分を示す。また、右辺の３項目の積和演算部分は、ニューロン群１５ａｋに属さないニューロン（他のニューロン群に属するニューロン）の影響によるエネルギーの変化分を示す。以下、前者の変化分を内部ローカルフィールド、後者の変化分を外部ローカルフィールドという。
【００３４】
ｋ番目のニューロン群１５ａｋが属する演算処理部１１ａｋは、内部ローカルフィールドを、密結合重み係数とニューロン群１５ａｋの値を用いて計算し、外部ローカルフィールドについては計算しない。
【００３５】
演算処理部１１ａｋは、たとえば、制御部１２が計算した、ローカルフィールドｈｉ（ｋ）の初期値を受信する。そして、演算処理部１１ａｋは、内部ローカルフィールドの計算結果に基づいて、式（４）で示されるローカルフィールドｈｉ（ｋ）を更新する。なお、演算処理部１１ａｋは、たとえば、ノイズ値（乱数）をローカルフィールドｈｉ（ｋ）に加え、閾値との比較によってｉ番目のニューロンの値の更新の可否を判定し、その判定結果に基づいてｉ番目のニューロンの値を更新または維持する。演算処理部１１ａｋは、このような処理を、ニューロン群１５ａｋの各ニューロンについて、所定回数繰り返す。なお、シミュレーテッド・アニーリングを実現するために、ノイズ値のノイズ幅は所定回数の繰り返し処理ごとに、徐々に小さくなるように制御される。
【００３６】
以上の処理が、演算処理部１１ａ１〜１１ａｍのそれぞれにおいて行われる。そして、演算処理部１１ａ１〜１１ａｍは、所定回数の繰り返し処理の終了後に、各ニューロンの値を制御部１２に送信する。制御部１２は、各ニューロンの値と、記憶部１２ａに記憶されている疎結合重み係数に基づいて、外部ローカルフィールドを計算する。そして、制御部１２は、その外部ローカルフィールドを演算処理部１１ａ１〜１１ａｍに送信する。
【００３７】
たとえば、演算処理部１１ａｋでは、式（４）で示されるローカルフィールドｈｉ（ｋ）の右辺の３項目の外部ローカルフィールドを制御部１２より受信する。そして、演算処理部１１ａｋはその外部ローカルフィールドをローカルフィールドｈｉ（ｋ）の初期値として、再度前述の内部ローカルフィールドの計算結果に基づいて、ローカルフィールドｈｉ（ｋ）を更新する処理を、上記所定回数繰り返す。
【００３８】
このような演算処理部１１ａ１〜１１ａｍと制御部１２との間でのニューロンの値と、外部ローカルフィールドの送受信が、さらに所定回数繰り返されたのち、最終的に得られた各ニューロンの値が、最適化問題に対する解として制御部１２から出力される。
【００３９】
以上のような第１の実施の形態の最適化装置１０によれば、密結合状態（全結合状態）のニューロン群１５ａ１〜１５ａｍのそれぞれの演算を、対応する演算処理部が行う。つまり、最適化装置１０には複数の演算処理部１１ａ１〜１１ａｍが設けられている。そして、異なる演算処理部に属する疎結合状態のニューロンの演算を制御部１２が行い、その結果（外部ローカルフィールド）が演算処理部１１ａ１〜１１ａｍの演算に反映される。これにより、確率的探索を行う単一の回路をもつ最適化装置では計算が困難であった、大規模な最適化問題を最適化装置１０にマッピングして解くことが可能となる。
【００４０】
また、演算処理部１１ａ１〜１１ａｍのそれぞれは、疎結合重み係数を用いた計算を行わなくてよいため、演算処理部１１ａ１〜１１ａｍにおいて重み係数を保持するメモリを小さくできる。
【００４１】
また、演算処理部１１ａ１〜１１ａｍのそれぞれが、所定回数の繰り返し処理の終了後に、各ニューロンの値を制御部１２に送信する。制御部１２は、その値と疎結合重み係数に基づいて、外部ローカルフィールドを計算し、演算処理部１１ａ１〜１１ａｍに送信する。これにより、演算処理部１１ａ１〜１１ａｍと制御部１２との間での通信頻度や通信データ量を抑えることができ、最適化問題を計算する上でのオーバーヘッドとなる通信時間を短縮できるため、最適化問題の計算時間を短縮できる。
【００４２】
（第２の実施の形態）
図２は、第２の実施の形態の最適化装置の一例を示す図である。
最適化装置３０は、演算処理部３１ａ１，３１ａ２，…，３１ａＮ、コントローラ３２を有する。
【００４３】
演算処理部３１ａ１〜３１ａＮのそれぞれは、密結合重み係数メモリ、確率的探索回路、インデックスコントローラを有する。図２の例では、演算処理部３１ａ１に含まれる密結合重み係数メモリ３１ｂ１、確率的探索回路３１ｃ１、インデックスコントローラ３１ｄ１が示されている。また、演算処理部３１ａ２に含まれる密結合重み係数メモリ３１ｂ２、確率的探索回路３１ｃ２、インデックスコントローラ３１ｄ２が示されている。また、演算処理部３１ａＮに含まれる密結合重み係数メモリ３１ｂＮ、確率的探索回路３１ｃＮ、インデックスコントローラ３１ｄＮが示されている。
【００４４】
なお、演算処理部３１ａ１〜３１ａＮのそれぞれは、たとえば、１チップの半導体集積回路である。
以下、演算処理部３１ａ１の各要素についての説明を行うが、演算処理部３１ａ２〜３１ａＮについても同様である。
【００４５】
密結合重み係数メモリ３１ｂ１は、演算処理部３１ａ１に属するニューロン群に含まれるニューロン間の結合の強さを示す密結合重み係数を記憶する。密結合重み係数メモリ３１ｂ１として、ＲＡＭなどの揮発性メモリ、または、フラッシュメモリやＥＥＰＲＯＭなどの不揮発性メモリを用いることができる。
【００４６】
確率的探索回路３１ｃ１は、マルコフ連鎖モンテカルロ法による更新処理を行う回路である。確率的探索回路３１ｃ１は、演算処理部３１ａ１に属するニューロン群の各ニューロンにおけるローカルフィールドｈｉの初期値または外部ローカルフィールドを受信し、内部ローカルフィールドの計算結果に基づいて、ローカルフィールドｈｉを更新する。なお、確率的探索回路３１ｃ１は、たとえば、ノイズ値（乱数）をローカルフィールドｈｉに加え、閾値との比較によってｉ番目のニューロンの値の更新の可否を判定し、その判定結果に基づいてｉ番目のニューロンの値を更新または維持する。確率的探索回路３１ｃ１は、このような処理を、演算処理部３１ａ１に属するニューロン群の各ニューロンについて、所定回数繰り返す。
【００４７】
インデックスコントローラ３１ｄ１は、密結合重み係数と、その密結合重み係数がどのニューロン間の結合に関するものであるのかを示すインデックスとをコントローラ３２から受信する。そして、インデックスコントローラ３１ｄ１は、そのインデックスに応じた密結合重み係数メモリ３１ｂ１のアドレスに、密結合重み係数を書き込む。
【００４８】
また、インデックスコントローラ３１ｄ１は、ローカルフィールドｈｉの初期値または外部ローカルフィールドと、それらがどのニューロンに関するものであるのかを示すインデックスをコントローラ３２から受信する。そして、インデックスコントローラ３１ｄ１は、確率的探索回路３１ｃ１のうち、そのインデックスに対応するニューロンに関する演算を行う回路部に、ローカルフィールドｈｉの初期値または外部ローカルフィールドを供給する。
【００４９】
また、インデックスコントローラ３１ｄ１は、確率的探索回路３１ｃ１から各ニューロンの値（状態）を受け、その値に、どのニューロンの値かを示すインデックスを付与してコントローラ３２に供給する。
【００５０】
図３は、確率的探索回路の一例を示す図である。
図３の確率的探索回路３１ｃ１の例は、ニューラルネットワークのイジング型のエネルギー関数の演算を、ＤｅＧｌｏｒｉａアルゴリズムと呼ばれるアルゴリズムに基づく小規模なハードウェアで行うものである。
【００５１】
確率的探索回路３１ｃ１は、それぞれがニューロンの値を出力するニューロン回路４０ａ１，４０ａ２，…，４０ａｎ、選択信号生成回路４０ｂ、ノイズ発生回路４０ｃ、更新制御回路４０ｄを有する。
【００５２】
ニューロン回路４０ａ１〜４０ａｎが出力する値は、たとえば、図１に示したニューロン群１５ａ１〜１５ａｍのうちの１つのニューロン群の値に相当する。
図３では、ニューロン回路４０ａ１の一例が示されている。他のニューロン回路４０ａ２〜４０ａｎも同様の回路により実現できる。
【００５３】
ニューロン回路４０ａ１は、選択回路４１，４２、乗算回路４３、加算回路４４、選択回路４５、レジスタ４６、加算回路４７、比較回路４８、排他的論理和回路であるＸＯＲ回路４９、レジスタ５０を有する。
【００５４】
選択回路４１は、更新制御回路４０ｄが出力するインデックスに基づいて、密結合重み係数メモリ３１ｂ１に記憶されている密結合重み係数Ｗ１１，Ｗ１２，…，Ｗ１ｎのうち１つを選択して出力する。
【００５５】
たとえば、インデックス＝ｎが選択回路４１に入力されたとき、選択回路４１は、密結合重み係数Ｗ１ｎを選択する。
計算の収束性を考慮して一度に１つだけのニューロンの値の変化を許容する場合、値が更新されるニューロンの結合先では、元のローカルフィールドに対して、その更新による変化分を加算または減算すればよい。
【００５６】
たとえば、インデックス＝ｉのニューロンと結合するインデックス＝ｊのニューロンの値ｘｊ（０または１）が、１−ｘｊに変化したとき、インデックス＝ｉのニューロンのローカルフィールドの変化分Δｈｉは、以下の式（５）で表される。
【００５７】
【数５】
2019159997.tif 000007
【００５８】
式（５）において、１−２ｘｊは、値ｘｊが、０から１に変化したときには、＋１となり、値ｘｊが、１から０に変化したときには、−１となる。
選択回路４２は、式（５）の１−２ｘｊの演算を実現するものであり、更新制御回路４０ｄが選択したニューロン（値の更新が許容されたニューロン）の更新後の値に基づき、１または−１を選択して出力する。更新後の値が０のときには、選択回路４２は、−１を選択して出力し、更新後の値が１のときには、選択回路４２は、１を選択して出力する。
【００５９】
乗算回路４３は、選択回路４１が出力する重み係数と、選択回路４２が出力する値との積を出力する。
加算回路４４は、乗算回路４３が出力する値と、レジスタ４６に格納されている値とを加算して出力する。
【００６０】
選択回路４５は、選択信号生成回路４０ｂから供給される選択信号に基づいて、加算回路４４が出力する値、ローカルフィールドｈ１の初期値ｈ１（ｉｎｉｔ）、外部ローカルフィールドｈ１（ｅｘｔ）の何れか１つを選択して出力する。
【００６１】
レジスタ４６は、クロック信号ｃｌｋに同期して、選択回路４５が出力する値を取り込む。レジスタ４６は、たとえば、フリップフロップである。なお、クロック信号ｃｌｋは、たとえば、コントローラ３２から供給される。
【００６２】
加算回路４７は、レジスタ４６が出力するローカルフィールドｈ１に、ノイズ発生回路４０ｃが出力するノイズ値を加算して出力する。
比較回路４８は、加算回路４７が出力する値が、閾値（たとえば、０）以上のときには０を出力し、閾値より小さいときには１を出力する。
【００６３】
ＸＯＲ回路４９は、比較回路４８が出力する値と、レジスタ５０に格納されている値とに基づきインデックス＝１のニューロンの値の更新の可否を示す値を出力する。たとえば、ＸＯＲ回路４９は、比較回路４８が出力する値と、レジスタ５０に格納されている値が一致しているときは更新が否であることを示す０を出力し、異なるときは更新が可能であることを示す１を出力する。
【００６４】
レジスタ５０は、インデックス＝１のニューロンの値ｘ１を保持している。
選択信号生成回路４０ｂは、最適化装置３０の初期設定時に、選択回路４５に対して、ローカルフィールドｈ１の初期値ｈ１（ｉｎｉｔ）を選択させる選択信号を出力し、その後の繰り返し処理では、加算回路４４が出力する値を選択させる選択信号を出力する。選択信号生成回路４０ｂは、所定回数の繰り返し処理後には、選択回路４５に対して、外部ローカルフィールドｈ１（ｅｘｔ）を選択させる選択信号を出力する。その後の繰り返し処理では、選択信号生成回路４０ｂは、再び、選択回路４５に対して、加算回路４４が出力する値を選択させる選択信号を出力する。
【００６５】
ノイズ発生回路４０ｃは、シミュレーテッド・アニーリングを行うために、ノイズ値を生成する。ノイズ発生回路４０ｃとして、たとえば、ＬＦＳＲ（Linear Feedback Shift Registers）などを用いることができる。なお、シミュレーテッド・アニーリングの際、ノイズ発生回路４０ｃは、たとえば、コントローラ３２の制御のもと、ノイズ幅を徐々に小さくする。
【００６６】
更新制御回路４０ｄは、ニューロン回路４０ａ１〜４０ａｎが出力する、インデックス＝１〜ｎのそれぞれのニューロンの値ｘ１〜ｘｎと、各ニューロンの値の更新の可否を示す値とを受ける。そして、更新制御回路４０ｄは、各ニューロンの値の更新の可否を示す値に基づき、値が更新できると判定されたニューロンがある場合には、そのニューロンを１つ選択する。さらに更新制御回路４０ｄは、選択したニューロンのインデックスと更新後の値を、ニューロン回路４０ａ１〜４０ａｎに供給する。
【００６７】
たとえば、更新制御回路４０ｄは、複数のニューロンの値の更新が可能である場合、そのうち１つを、乱数値に基づきランダムに選択して、そのニューロンのインデックスと更新後の値とを出力する。図３では、インデックス＝ｊと、ニューロンの値ｘｊが更新制御回路４０ｄから出力される例が示されている。
【００６８】
図４は、第２の実施の形態の最適化装置におけるインデックスコントローラの一例を示す図である。
インデックスコントローラ３１ｄ１は、重み係数インデックスコントローラ５１、外部ローカルフィールドコントローラ５２、最終状態インデックスコントローラ５３を有する。
【００６９】
重み係数インデックスコントローラ５１は、密結合重み係数と、その密結合重み係数がどのニューロン間の結合に関するものであるのかを示すインデックスとをコントローラ３２から受信する。そして、重み係数インデックスコントローラ５１は、そのインデックスに応じた密結合重み係数メモリ３１ｂ１のアドレスに、密結合重み係数を書き込む。
【００７０】
外部ローカルフィールドコントローラ５２は、初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）と、それらがどのニューロンに関するものであるのかを示すインデックスをコントローラ３２から受信する。そして、外部ローカルフィールドコントローラ５２は、ニューロン回路４０ａ１〜４０ａｎのうち、そのインデックスに対応するニューロンに関する演算を行うニューロン回路に、初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）を供給する。
【００７１】
最終状態インデックスコントローラ５３は、ニューロン回路４０ａ１〜４０ａｎのそれぞれのレジスタ（たとえば、レジスタ５０）から各ニューロンの値ｘｉを取得する。そして、最終状態インデックスコントローラ５３は、その値ｘｉに、どのニューロンの値かを示すインデックスを付与してコントローラ３２に供給する。
【００７２】
図５は、重み係数インデックスコントローラの一例を示す図である。
重み係数インデックスコントローラ５１は、ＦＩＦＯ（First In, First Out）メモリ（以下単にＦＩＦＯという）５１ａ、比較回路５１ｂ、選択回路５１ｃ、レジスタ５１ｄを有する。
【００７３】
密結合重み係数とそのインデックスは、ＦＩＦＯ５１ａに入力された後、インデックスは比較回路５１ｂに供給され、密結合重み係数は選択回路５１ｃに供給される。
比較回路５１ｂは、供給されたインデックスが、予め図示しないレジスタなどに記憶されている演算処理部３１ａ１に属するニューロン間の重み係数のインデックス（対応インデックス）に一致する場合には１を出力し、一致しなければ０を出力する。
【００７４】
選択回路５１ｃは、比較回路５１ｂが出力する信号に応じて、ＦＩＦＯ５１ａが出力する密結合重み係数か、レジスタ５１ｄに記憶されている密結合重み係数の何れか一方を選択して出力する。選択回路５１ｃは、比較回路５１ｂが１を出力する場合には、ＦＩＦＯ５１ａが出力する密結合重み係数を選択して出力し、比較回路５１ｂが０を出力する場合には、レジスタ５１ｄに記憶されている密結合重み係数を選択して出力する。
【００７５】
レジスタ５１ｄは、クロック信号ｃｌｋに同期したタイミングで、選択回路５１ｃが出力する密結合重み係数を保持する。このレジスタ５１ｄに保持されている密結合重み係数が、重み係数インデックスコントローラ５１の出力となる。
【００７６】
図４に示した外部ローカルフィールドコントローラ５２も、図５に示した重み係数インデックスコントローラ５１と同様の回路にて実現できる。
図６は、最終状態インデックスコントローラの一例を示す図である。
【００７７】
最終状態インデックスコントローラ５３は、ＦＩＦＯ５３ａ、インデックス生成カウンタ５３ｂ、レジスタ５３ｃを有する。
ＦＩＦＯ５３ａは、ニューロン回路４０ａ１〜４０ａｎのそれぞれのレジスタから順番に各ニューロンの値ｘｉを取得して、その順番に各ニューロンの値ｘｉを出力する。インデックス生成カウンタ５３ｂはインデックスを出力するとともに、ＦＩＦＯ５３ａが値ｘｉを出力するタイミングに合わせて、出力するインデックスをインクリメントする。レジスタ５３ｃは、ＦＩＦＯ５３ａが出力する値ｘｉと、値ｘｉに対応するインデックスとをクロック信号ｃｌｋに同期したタイミングで保持する。このレジスタ５３ｃに保持されている値ｘｉと、値ｘｉに対応するインデックスとが、最終状態インデックスコントローラ５３の出力となる。
【００７８】
図２において、コントローラ３２は、疎結合重み係数メモリ３２ａ、密結合重み係数送信部３２ｂ、外部ローカルフィールド計算部３２ｃを有する。
疎結合重み係数メモリ３２ａは、ホストコンピュータ３５から供給される密結合重み係数と疎結合重み係数、及びそれらのインデックスのうち、疎結合重み係数とそのインデックスを記憶する。疎結合重み係数メモリ３２ａとして、ＲＡＭなどの揮発性メモリ、または、フラッシュメモリやＥＥＰＲＯＭなどの不揮発性メモリを用いることができる。なお、疎結合重み係数メモリ３２ａは密結合重み係数とそのインデックスを記憶してもよい。
【００７９】
密結合重み係数送信部３２ｂは、密結合重み係数とそのインデックスを、演算処理部３１ａ１〜３１ａＮに送信する（ブロードキャストする）。
外部ローカルフィールド計算部３２ｃは、演算処理部３１ａ１〜３１ａＮから、各ニューロンの値とそのインデックスを受ける。そして、外部ローカルフィールド計算部３２ｃは、各ニューロンの値とそのインデックスと、疎結合重み係数メモリ３２ａに記憶されている疎結合重み係数とそのインデックスとに基づいて、外部ローカルフィールドを計算する。外部ローカルフィールド計算部３２ｃは、計算した外部ローカルフィールドを、演算処理部３１ａ１〜３１ａＮに送信する（ブロードキャストする）。
【００８０】
以下、第２の実施の形態の最適化装置の全体の動作の流れを、フローチャートを用いて説明する。
図７は、第２の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【００８１】
コントローラ３２は、図示しないカウンタのカウント値ｎを１にセットし（ステップＳ１０）、ホストコンピュータ３５から供給される疎結合重み係数（及びそのインデックス）を疎結合重み係数メモリ３２ａに記憶する（ステップＳ１１）。また、コントローラ３２は、ホストコンピュータ３５から供給される密結合重み係数（及びそのインデックス）を演算処理部３１ａ１〜３１ａＮにブロードキャストする（ステップＳ１２）。
【００８２】
演算処理部３１ａ１〜３１ａＮのそれぞれは、対応するインデックスをもつ密結合重み係数を密結合重み係数メモリ３１ｂ１〜３１ｂＮに記憶し（ステップＳ１３）、ｉｍａｘ／Ｎ回の、更新処理を行う（ステップＳ１４）。ｉｍａｘ／Ｎは、たとえば、計算が収束したとみなす繰り返し回数ｉｍａｘを、演算処理部３１ａ１〜３１ａＮの数（＝Ｎ）で割った値である。
【００８３】
その後、演算処理部３１ａ１〜３１ａＮのそれぞれは、自身に属する各ニューロンの値（及びそのインデックス）を、最終状態として、コントローラ３２に送信する（ステップＳ１５）。
【００８４】
コントローラ３２は、カウント値ｎがＮに達したか否かを判定し（ステップＳ１６）、カウント値ｎがＮに達していない場合には、外部ローカルフィールドを計算する（ステップＳ１７）。そして、コントローラ３２は、計算した外部ローカルフィールドを、演算処理部３１ａ１〜３１ａＮにブロードキャストする（ステップＳ１８）。また、コントローラ３２は、カウント値ｎをインクリメントさせる（ステップＳ１９）。その後、ステップＳ１４からの処理が繰り返される。
【００８５】
カウント値ｎがＮに達した場合、最適化装置３０は、最適化問題の計算処理を終了する。なお、カウント値ｎがＮに達した場合、たとえば、コントローラ３２は、その時点での各ニューロンの値を、最適化問題の解としてホストコンピュータ３５に送信する。
【００８６】
以上のような第２の実施の形態の最適化装置３０によれば、第１の実施の形態の最適化装置１０と同様の効果が得られる。また、インデックスコントローラ３１ｄ１〜３１ｄＮは、それぞれ、コントローラ３２と一対一の通信を行えばよいため、比較的小さい回路で実現できる。
【００８７】
（第３の実施の形態）
図８は、第３の実施の形態の最適化装置の一例を示す図である。図８において、図２に示した第２の実施の形態の最適化装置３０と同じ要素については同一符号が付されている。
【００８８】
第３の実施の形態の最適化装置６０において、演算処理部６１ａ１，６１ａ２，…，６１ａＮは、インデックスコントローラ６１ｂ１，６１ｂ２，…，６１ｂＮによって、バス状に接続されている。そして、コントローラ６２は、演算処理部６１ａ１〜６１ａＮの何れかに接続されている。なお、接続トポロジは、バス状に限らず、演算処理部６１ａ１と演算処理部６１ａＮとが直接的に接続されたリング状（環状）であってもよい。
【００８９】
図８の例ではコントローラ６２は、演算処理部６１ａ１に接続されており、密結合重み係数送信部６２ａは、全ての密結合重み係数とそのインデックスを、演算処理部６１ａ１に送信する。また、外部ローカルフィールド計算部６２ｂは、全てのニューロンの値とそのインデックスを演算処理部６１ａ１から受信し、計算した全ての外部ローカルフィールドを、演算処理部６１ａ１に送信する。
【００９０】
インデックスコントローラ６１ｂ１〜６１ｂＮは、図８の左方向に隣接する演算処理部（インデックスコントローラ６１ｂ１の場合はコントローラ６２）から、密結合重み係数と外部ローカルフィールドと、それらのインデックスを受ける。そして、インデックスコントローラ６１ｂ１〜６１ｂＮは、インデックスに基づいて、自身に属するニューロン群についての密結合重み係数と外部ローカルフィールドを判別する。その後、インデックスコントローラ６１ｂ１〜６１ｂＮは、判別した密結合重み係数を密結合重み係数メモリ３１ｂ１〜３１ｂＮに記憶し、判別した外部ローカルフィールドを確率的探索回路３１ｃ１〜３１ｃＮに供給する。
【００９１】
また、インデックスコントローラ６１ｂ１〜６１ｂＮのうちインデックスコントローラ６１ｂＮ以外は、自身に属さないニューロン群についての密結合重み係数と外部ローカルフィールドとそれらのインデックスを、図８の右方向に隣接する演算処理部に送信する。
【００９２】
さらに、インデックスコントローラ６１ｂ２〜６１ｂＮは、確率的探索回路３１ｃ１〜３１ｃＮが出力するニューロン群の値とそのインデックスを、図８の左方向に隣接する演算処理部に送信する。
【００９３】
また、インデックスコントローラ６１ｂ１〜６１ｂＮのうちインデックスコントローラ６１ｂＮ以外は、図８の右方向に隣接する演算処理部とその演算処理部よりも右方向にある演算処理部に属するニューロン群の値とそのインデックスを受ける。そして、インデックスコントローラ６１ｂ１〜６１ｂＮのうちインデックスコントローラ６１ｂＮ以外は、それらを図８の左方向に隣接する演算処理部（インデックスコントローラ６１ｂ１の場合はコントローラ６２）に送信する。
【００９４】
図９は、第３の実施の形態の最適化装置におけるインデックスコントローラの一例を示す図である。以下では、インデックスコントローラ６１ｂ１の例を説明するが、インデックスコントローラ６１ｂ２〜６１ｂＮについても同様の回路構成にて実現できる。
【００９５】
インデックスコントローラ６１ｂ１は、重み係数インデックスコントローラ６３、外部ローカルフィールドコントローラ６４、最終状態インデックスコントローラ６５を有する。
【００９６】
重み係数インデックスコントローラ６３は、密結合重み係数と、その密結合重み係数がどのニューロン間の結合に関するものであるのかを示すインデックスとをコントローラ６２から受信する。そして、重み係数インデックスコントローラ６３は、インデックスに基づいて、自身に属するニューロン群についての密結合重み係数を判別する。その後、重み係数インデックスコントローラ６３は、判別した密結合重み係数を密結合重み係数メモリ３１ｂ１に記憶する。
【００９７】
また、重み係数インデックスコントローラ６３は、自身に属さないニューロン群についての密結合重み係数とそのインデックスを、図８の右方向に隣接する演算処理部６１ａ２に送信する。
【００９８】
外部ローカルフィールドコントローラ６４は、初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）と、それらがどのニューロンに関するものであるのかを示すインデックスをコントローラ６２から受信する。そして、外部ローカルフィールドコントローラ６４は、インデックスに基づいて、自身に属するニューロン群についての初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）を判別する。その後、外部ローカルフィールドコントローラ６４は、判別した初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）を確率的探索回路３１ｃ１に供給する。
【００９９】
また、外部ローカルフィールドコントローラ６４は、自身に属さないニューロン群についての初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）とそれらのインデックスを、図８の右方向に隣接する演算処理部６１ａ２に送信する。
【０１００】
最終状態インデックスコントローラ６５は、図３に示したニューロン回路４０ａ１〜４０ａｎのそれぞれのレジスタからニューロンの値を受け、その値にインデックスを付与して、コントローラ６２に送信する。また、最終状態インデックスコントローラ６５は、演算処理部６１ａ２から、演算処理部６１ａ２〜６２ａＮに属するニューロン群の値とそのインデックスを受ける。そして、最終状態インデックスコントローラ６５は、それらをコントローラ６２に送信する。
【０１０１】
図１０は、重み係数インデックスコントローラの一例を示す図である。
重み係数インデックスコントローラ６３は、ＦＩＦＯ６３ａ、比較回路６３ｂ、選択回路６３ｃ、インバータ回路６３ｄ、選択回路６３ｅ、レジスタ６３ｆ，６３ｇを有する。
【０１０２】
密結合重み係数とそのインデックスは、ＦＩＦＯ６３ａに入力された後、インデックスは比較回路６３ｂに供給され、密結合重み係数は選択回路６３ｃに供給される。また、密結合重み係数とインデックスの組は選択回路６３ｅに供給される。
【０１０３】
比較回路６３ｂは、供給されたインデックスが、予め図示しないレジスタなどに記憶されている演算処理部６１ａ１に属するニューロン間の重み係数のインデックス（対応インデックス）に一致する場合には１を出力し、一致しなければ０を出力する。
【０１０４】
選択回路６３ｃは、比較回路６３ｂが出力する信号に応じて、ＦＩＦＯ６３ａが出力する密結合重み係数か、レジスタ６３ｆに記憶されている密結合重み係数の何れか一方を選択して出力する。選択回路６３ｃは、比較回路６３ｂが１を出力する場合には、ＦＩＦＯ６３ａが出力する密結合重み係数を選択して出力し、比較回路６３ｂが０を出力する場合には、レジスタ６３ｆに記憶されている密結合重み係数を選択して出力する。
【０１０５】
インバータ回路６３ｄは、比較回路６３ｂが出力する信号を反転する。比較回路６３ｂが０を出力する場合、インバータ回路６３ｄは１を出力し、比較回路６３ｂが１を出力する場合、インバータ回路６３ｄは０を出力する。
【０１０６】
選択回路６３ｅは、インバータ回路６３ｄが出力する信号に応じて、ＦＩＦＯ６３ａが出力する密結合重み係数とインデックスの組か、レジスタ６３ｇに記憶されている密結合重み係数とインデックスの組の何れか一方の組を選択して出力する。選択回路６３ｅは、インバータ回路６３ｄが１を出力する場合には、ＦＩＦＯ６３ａが出力する密結合重み係数とインデックスの組を選択して出力する。選択回路６３ｅは、インバータ回路６３ｄが０を出力する場合には、レジスタ６３ｇに記憶されている密結合重み係数とインデックスの組を選択して出力する。
【０１０７】
レジスタ６３ｆは、クロック信号ｃｌｋに同期したタイミングで、選択回路６３ｃが出力する密結合重み係数を保持する。このレジスタ６３ｆに保持されている密結合重み係数が、密結合重み係数メモリ３１ｂ１に供給される。
【０１０８】
レジスタ６３ｇは、クロック信号ｃｌｋに同期したタイミングで、選択回路６３ｅが出力する密結合重み係数とインデックスの組を保持する。このレジスタ６３ｇに保持されている密結合重み係数とインデックスの組が、演算処理部６１ａ２に供給される。
【０１０９】
図９に示した外部ローカルフィールドコントローラ６４も、図１０に示した重み係数インデックスコントローラ６３と同様の回路にて実現できる。
図１１は、最終状態インデックスコントローラの一例を示す図である。
【０１１０】
最終状態インデックスコントローラ６５は、ＦＩＦＯ６５ａ，６５ｂ、インデックス生成カウンタ６５ｃ、選択回路６５ｄ、レジスタ６５ｅを有する。
ＦＩＦＯ６５ａは、図３に示したニューロン回路４０ａ１〜４０ａｎのそれぞれのレジスタから順番に各ニューロンの値ｘｉを取得して、その順番に各ニューロンの値ｘｉを出力する。
【０１１１】
ＦＩＦＯ６５ｂは、演算処理部６１ａ２から供給される、演算処理部６１ａ２〜６２ａＮに属するニューロンの値ｘｉとそのインデックスの組を取得し、供給順にそれらの組を出力する。
【０１１２】
インデックス生成カウンタ６５ｃはインデックスを出力するとともに、ＦＩＦＯ６５ａが値ｘｉを出力するタイミングに合わせて、出力するインデックスをインクリメントする。
【０１１３】
選択回路６５ｄは、図示しない選択信号生成回路から供給される選択信号ｓｅｌが１である場合、ＦＩＦＯ６５ａが出力する値ｘｉとインデックス生成カウンタ６５ｃが出力するインデックスの組を選択して出力する。選択回路６５ｄは、選択信号ｓｅｌが０である場合、ＦＩＦＯ６５ｂが出力するニューロンの値ｘｉとそのインデックスの組を選択して出力する。
【０１１４】
たとえば、図示しない選択信号生成回路は、インデックス生成カウンタ６５ｃが、ｎ個のニューロンの値のインデックスを生成するまでは、選択信号ｓｅｌを１とし、その後は、選択信号ｓｅｌを０とする。
【０１１５】
レジスタ６５ｅは、選択回路６５ｄが出力する値ｘｉとそのインデックスとをクロック信号ｃｌｋに同期したタイミングで保持する。このレジスタ６５ｅに保持されている値ｘｉとそのインデックスとが、コントローラ６２に供給される。
【０１１６】
以下、第３の実施の形態の最適化装置の全体の動作の流れを、フローチャートを用いて説明する。
図１２は、第３の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【０１１７】
ステップＳ２０，Ｓ２１の処理は、図７に示したステップＳ１０，Ｓ１１の処理と同じである。ステップＳ２２の処理では、コントローラ６２は、密結合重み係数（及びそのインデックス）を１つの演算処理部６１ａ１に送信する。そして、演算処理部６１ａ１は対応するインデックス以外のインデックスをもつ密結合重み係数を隣接する演算処理部６１ａ２に送信する（ステップＳ２３）。演算処理部６１ａ２〜６１ａＮのうち、演算処理部６１ａＮ以外も同一の処理を行う。
【０１１８】
そして、図７に示したステップＳ１３，Ｓ１４と同様のステップＳ２４，Ｓ２５の処理が行われる。
その後、演算処理部６１ａ１〜６１ａＮのそれぞれに属する各ニューロンの値（及びそのインデックス）が演算処理部６１ａ１に集められ、最終状態として、演算処理部６１ａ１からコントローラ６２に送信される（ステップＳ２６）。
【０１１９】
ステップＳ２７，Ｓ２８の処理は、図７に示したステップＳ１６，Ｓ１７の処理と同じである。
ステップＳ２８の処理後、コントローラ６２は、計算した外部ローカルフィールド（及びそのインデックス）を、１つの演算処理部６１ａ１に送信する（ステップＳ２９）。そして、演算処理部６１ａ１は対応するインデックス以外のインデックスをもつ外部ローカルフィールドを隣接する演算処理部６１ａ２に送信する（ステップＳ３０）。演算処理部６１ａ２〜６１ａＮのうち、演算処理部６１ａＮ以外も同一の処理を行う。また、コントローラ６２は、カウント値ｎをインクリメントさせる（ステップＳ３１）。その後、ステップＳ２５からの処理が繰り返される。
【０１２０】
カウント値ｎがＮに達した場合、最適化装置６０は、最適化問題の計算処理を終了する。なお、カウント値ｎがＮに達した場合、たとえば、コントローラ６２は、その時点での各ニューロンの値を、最適化問題の解としてホストコンピュータ３５に送信する。
【０１２１】
以上のような第３の実施の形態の最適化装置６０によれば、第１の実施の形態の最適化装置１０と同様に、大規模な最適化問題を最適化装置６０にマッピングして解くことが可能となる。また、１つの演算処理部６１ａ１のインデックスコントローラ６１ｂ１が、コントローラ６２と接続されているため、コントローラ６２と演算処理部６１ａ１〜６１ａＮを接続する配線の数を少なくできる。
【０１２２】
なお、図８の例では、左端の演算処理部６１ａ１がコントローラ６２に接続するものとしたがこれに限定されず、右端の演算処理部６１ａＮがコントローラ６２に接続されてもよいし、中央の演算処理部がコントローラ６２に接続されてもよい。その場合、密結合重み係数などのデータの転送方向を変えればよい。
【０１２３】
（第４の実施の形態）
図１３は、第４の実施の形態の最適化装置の一例を示す図である。図１３において、図８に示した第３の実施の形態の最適化装置６０と同じ要素については同一符号が付されている。
【０１２４】
第４の実施の形態の最適化装置７０において、Ｎ×Ｎ個の演算処理部７１ａ１１，７１ａ１２，…，７１ａ１Ｎ，７１ａ２１，７１ａ２２，…，７１ａ２Ｎ，…，７１ａＮ１，７１ａＮ２，…，７１ａＮＮは、メッシュ状の２次元接続により接続されている。そして、コントローラ６２は、演算処理部７１ａ１１〜７１ａＮＮの何れかに接続されている。なお、接続トポロジは、メッシュ状に限らず、演算処理部７１ａ１１と演算処理部７１ａ１Ｎ、演算処理部７１ａ２１と演算処理部７１ａ２Ｎ、…、演算処理部７１ａＮ１と演算処理部７１ａＮＮとがそれぞれ直接的に接続されたトーラス状（円環状）であってもよい。
【０１２５】
図１３の例ではコントローラ６２は、演算処理部７１ａＮＮに接続されており、密結合重み係数送信部６２ａは、全ての密結合重み係数とそのインデックスを、演算処理部７１ａＮＮに送信する。また、外部ローカルフィールド計算部６２ｂは、全てのニューロンの値とそのインデックスを演算処理部７１ａＮＮから受信し、計算した全ての外部ローカルフィールドを、演算処理部７１ａＮＮに送信する。
【０１２６】
演算処理部７１ａ１１〜７１ａＮＮのそれぞれには、インデックスコントローラ（たとえば、インデックスコントローラ７１ｄ）が含まれる。インデックスコントローラは、たとえば、図１３の右方向または下方向に隣接する演算処理部（演算処理部７１ａＮＮのインデックスコントローラの場合はコントローラ６２）から、密結合重み係数と外部ローカルフィールドと、それらのインデックスを受ける。そして、インデックスコントローラは、インデックスに基づいて、自身に属するニューロン群についての密結合重み係数と外部ローカルフィールドを判別する。その後、インデックスコントローラは、判別した密結合重み係数を密結合重み係数メモリ（たとえば、密結合重み係数メモリ７１ｂ）に記憶し、判別した外部ローカルフィールドを確率的探索回路（たとえば、確率的探索回路７１ｃ）に供給する。
【０１２７】
また、演算処理部７１ａ１２〜７１ａＮＮに含まれるインデックスコントローラは、自身に属さないニューロン群についての密結合重み係数と外部ローカルフィールドとそれらのインデックスを、図１３の左方向または上方向に隣接する演算処理部に送信する。
【０１２８】
さらに、各インデックスコントローラは、確率的探索回路が出力するニューロン群の値とそのインデックスを、図１３の右方向または下方向に隣接する演算処理部（演算処理部７１ａＮＮのインデックスコントローラの場合はコントローラ６２）に送信する。
【０１２９】
また、演算処理部７１ａ１２〜７１ａＮＮに含まれるインデックスコントローラは、図１３の左方向または上方向に隣接する演算処理部から送信された、ニューロン群の値とそのインデックスを、図１３の右方向または下方向に隣接する演算処理部に転送する。
【０１３０】
図１４は、第４の実施の形態の最適化装置におけるインデックスコントローラの一例を示す図である。以下では、演算処理部７１ａ２２に含まれるインデックスコントローラ７１ｄの例を説明するが、他の演算処理部に含まれるインデックスコントローラについても同様の回路構成にて実現できる。
【０１３１】
インデックスコントローラ７１ｄは、重み係数インデックスコントローラ７２、外部ローカルフィールドコントローラ７３、最終状態インデックスコントローラ７４を有する。
重み係数インデックスコントローラ７２は、密結合重み係数とそのインデックスとを、図１３の右方向または下方向に隣接する演算処理部から受信する。そして、重み係数インデックスコントローラ７２は、インデックスに基づいて、自身に属するニューロン群についての密結合重み係数を判別する。その後、重み係数インデックスコントローラ７２は、判別した密結合重み係数を密結合重み係数メモリ７１ｂに記憶する。
【０１３２】
また、重み係数インデックスコントローラ７２は、自身に属さないニューロン群についての密結合重み係数とそのインデックスを、図１３の左方向または上方向に隣接する演算処理部に送信する。
【０１３３】
外部ローカルフィールドコントローラ７３は、初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）と、それらがどのニューロンに関するものであるのかを示すインデックスを、図１３の右方向または下方向に隣接する演算処理部から受信する。そして、外部ローカルフィールドコントローラ７３は、インデックスに基づいて、自身に属するニューロン群についての初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）を判別する。その後、外部ローカルフィールドコントローラ７３は、判別した初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）を確率的探索回路７１ｃに供給する。
【０１３４】
また、外部ローカルフィールドコントローラ７３は、自身に属さないニューロン群についての初期値ｈｉ（ｉｎｉｔ）または外部ローカルフィールドｈｉ（ｅｘｔ）とそれらのインデックスを、図１３の左方向または上方向に隣接する演算処理部に送信する。
【０１３５】
最終状態インデックスコントローラ７４は、図３に示したニューロン回路４０ａ１〜４０ａｎのそれぞれのレジスタからニューロンの値を受け、その値にインデックスを付与して、図１３の右方向または下方向に隣接する演算処理部に送信する。
【０１３６】
また、最終状態インデックスコントローラ７４は、図１３の左方向または上方向に隣接する演算処理部から送信された、ニューロン群の値とそのインデックスを、図１３の右方向または下方向に隣接する演算処理部に転送する。
【０１３７】
図１５は、重み係数インデックスコントローラの一例を示す図である。
重み係数インデックスコントローラ７２は、ＦＩＦＯ７２ａ，７２ｂ、比較回路７２ｃ，７２ｄ、選択回路７２ｅ、インバータ回路７２ｆ、選択回路７２ｇ、レジスタ７２ｈ、制御回路７２ｉ、選択回路７２ｊ，７２ｋ、レジスタ７２ｌ，７２ｍを有する。
【０１３８】
右方向に隣接する演算処理部から供給される密結合重み係数ｗ１とそのインデックスｉ１は、ＦＩＦＯ７２ａに入力された後、インデックスｉ１は比較回路７２ｃに供給され、密結合重み係数ｗ１は選択回路７２ｅに供給される。また、密結合重み係数ｗ１とインデックスｉ１は選択回路７２ｊに供給される。
【０１３９】
下方向に隣接する演算処理部から供給される密結合重み係数ｗ２とそのインデックスｉ２は、ＦＩＦＯ７２ｂに入力された後、インデックスｉ２は比較回路７２ｄに供給され、密結合重み係数ｗ２は選択回路７２ｇに供給される。また、密結合重み係数ｗ２とインデックスｉ２は選択回路７２ｋに供給される。
【０１４０】
比較回路７２ｃは、供給されたインデックスｉ１が、予め図示しないレジスタなどに記憶されている演算処理部７１ａ２２に属するニューロン間の重み係数のインデックス（対応インデックス）に一致する場合には１を出力し、一致しなければ０を出力する。
【０１４１】
比較回路７２ｄは、供給されたインデックスｉ２が、上記対応インデックスに一致する場合には１を出力し、一致しなければ０を出力する。
選択回路７２ｅは、比較回路７２ｃが１を出力する場合には、ＦＩＦＯ７２ａが出力する密結合重み係数ｗ１を選択して出力し、比較回路７２ｃが０を出力する場合には、レジスタ７２ｈに記憶されている密結合重み係数を選択して出力する。
【０１４２】
インバータ回路７２ｆは、比較回路７２ｄが出力する信号を反転する。比較回路７２ｄが０を出力する場合、インバータ回路７２ｆは１を出力し、比較回路７２ｄが１を出力する場合、インバータ回路７２ｆは０を出力する。
【０１４３】
選択回路７２ｇは、インバータ回路７２ｆが１を出力する場合には、選択回路７２ｅが出力する密結合重み係数を選択して出力し、インバータ回路７２ｆが０を出力する場合には、ＦＩＦＯ７２ｂが出力する密結合重み係数ｗ２を選択して出力する。
【０１４４】
レジスタ７２ｈは、クロック信号ｃｌｋに同期したタイミングで、選択回路７２ｇが出力する密結合重み係数を保持する。このレジスタ７２ｈに保持されている密結合重み係数が、密結合重み係数メモリ７１ｂに供給される。
【０１４５】
制御回路７２ｉは、インデックスｉ１，ｉ２と、制御信号ｃｎｔ１，ｃｎｔ２に基づいて、選択回路７２ｊ，７２ｋに供給する選択信号を生成し、出力する。制御信号ｃｎｔ１は、右方向に隣接する演算処理部から供給され、右方向の通信経路が開放されていることを示す信号である。制御信号ｃｎｔ２は、下方向に隣接する演算処理部から供給され、下方向の通信経路が開放されていることを示す信号である。
【０１４６】
右方向の通信経路が開放されている場合、制御回路７２ｉは、インデックスｉ１に応じて、左方向と上方向のどちらの演算処理部へ密結合重み係数ｗ１とインデックスｉ１を送信すれば、より短い通信経路でそれらを対応する演算処理部に配給できるかを判定する。制御回路７２ｉは、上方向の演算処理部よりも左方向の演算処理部へ密結合重み係数ｗ１とインデックスｉ１を送信したほうが通信経路を短くできる場合には、１を出力し、その反対の場合には、０を出力する。
【０１４７】
下方向の通信経路が開放されている場合、制御回路７２ｉは、インデックスｉ２に応じて、左方向と上方向のどちらの演算処理部へ密結合重み係数ｗ２とインデックスｉ２を送信すれば、より短い通信経路でそれらを対応する演算処理部に配給できるかを判定する。制御回路７２ｉは、上方向の演算処理部よりも左方向の演算処理部へ密結合重み係数ｗ２とインデックスｉ２を送信したほうが通信経路を短くできる場合には、１を出力し、その反対の場合には、０を出力する。
【０１４８】
選択回路７２ｊは、制御回路７２ｉが出力する選択信号が１である場合、密結合重み係数ｗ１とインデックスｉ１の組を選択して出力し、選択信号が０である場合、密結合重み係数ｗ２とインデックスｉ２の組を選択して出力する。
【０１４９】
選択回路７２ｋは、制御回路７２ｉが出力する選択信号が１である場合、密結合重み係数ｗ２とインデックスｉ２の組を選択して出力し、選択信号が０である場合、密結合重み係数ｗ１とインデックスｉ１の組を選択して出力する。
【０１５０】
レジスタ７２ｌは、クロック信号ｃｌｋに同期したタイミングで、選択回路７２ｊが出力する密結合重み係数とインデックスの組を保持する。このレジスタ７２ｌに保持されている密結合重み係数とインデックスの組が、演算処理部７１ａ２２の左方向に隣接する演算処理部（図１３の例では演算処理部７１ａ２１）に供給される。
【０１５１】
レジスタ７２ｍは、クロック信号ｃｌｋに同期したタイミングで、選択回路７２ｋが出力する密結合重み係数とインデックスの組を保持する。このレジスタ７２ｍに保持されている密結合重み係数とインデックスの組が、演算処理部７１ａ２２の上方向に隣接する演算処理部（図１３の例では演算処理部７１ａ１２）に供給される。
【０１５２】
図１４に示した外部ローカルフィールドコントローラ７３も、図１５に示した重み係数インデックスコントローラ７２と同様の回路にて実現できる。
図１６は、最終状態インデックスコントローラの一例を示す図である。
【０１５３】
最終状態インデックスコントローラ７４は、ＦＩＦＯ７４ａ，７４ｂ，７４ｃ，７４ｄ、インデックス生成カウンタ７４ｅ，７４ｆ、選択回路７４ｇ，７４ｈ，７４ｉ，７４ｊ、インバータ回路７４ｋ，７４ｌ、レジスタ７４ｍ，７４ｎを有する。
【０１５４】
ＦＩＦＯ７４ａ，７４ｃは、図３に示したニューロン回路４０ａ１〜４０ａｎのそれぞれのレジスタから順番に各ニューロンの値ｘｉを取得して、その順番に各ニューロンの値ｘｉを出力する。
【０１５５】
ＦＩＦＯ７４ｂは、上方向に隣接する演算処理部から供給される、ニューロンの値ｘｉとそのインデックスの組を取得し、供給順にそれらの組を出力する。
ＦＩＦＯ７４ｄは、左方向に隣接する演算処理部から供給される、ニューロンの値ｘｉとそのインデックスの組を取得し、供給順にそれらの組を出力する。
【０１５６】
インデックス生成カウンタ７４ｅ，７４ｆはインデックスを出力するとともに、ＦＩＦＯ７４ａ，７４ｃが値ｘｉを出力するタイミングに合わせて、出力するインデックスをインクリメントする。
【０１５７】
選択回路７４ｇは、図示しない選択信号生成回路から供給される選択信号ｓｅｌ１が１である場合、ＦＩＦＯ７４ａが出力する値ｘｉとインデックス生成カウンタ７４ｅが出力するインデックスの組を選択して出力する。選択回路７４ｇは、選択信号ｓｅｌ１が０である場合、ＦＩＦＯ７４ｂが出力する値ｘｉとそのインデックスの組を選択して出力する。
【０１５８】
たとえば、図示しない選択信号生成回路は、インデックス生成カウンタ７４ｅが、ｎ個のニューロンの値のインデックスを生成するまでは、選択信号ｓｅｌ１を１とし、その後は、選択信号ｓｅｌ１を０とする。
【０１５９】
選択回路７４ｈは、選択信号ｓｅｌ１をインバータ回路７４ｋが反転した値を選択信号として受ける。そして選択回路７４ｈは、選択信号ｓｅｌ１が０である場合、ＦＩＦＯ７４ｃが出力する値ｘｉとインデックス生成カウンタ７４ｆが出力するインデックスの組を選択して出力する。選択回路７４ｈは、選択信号ｓｅｌ１が１である場合、ＦＩＦＯ７４ｄが出力する値ｘｉとそのインデックスの組を選択して出力する。
【０１６０】
選択回路７４ｉは、図示しない選択信号生成回路から供給される選択信号ｓｅｌ２が１である場合、選択回路７４ｇが出力する値ｘｉとインデックスの組を選択して出力する。選択回路７４ｉは、選択信号ｓｅｌ２が０である場合、選択回路７４ｈが出力する値ｘｉとそのインデックスの組を選択して出力する。
【０１６１】
選択回路７４ｊは、選択信号ｓｅｌ２をインバータ回路７４ｌが反転した値を選択信号として受ける。そして、選択回路７４ｊは、選択信号ｓｅｌ２が０である場合、選択回路７４ｇが出力する値ｘｉとインデックスの組を選択して出力する。選択回路７４ｊは、選択信号ｓｅｌ２が１である場合、選択回路７４ｈが出力する値ｘｉとそのインデックスの組を選択して出力する。
【０１６２】
たとえば、図示しない選択信号生成回路は、下方向の演算処理部よりも右方向の演算処理部へ値ｘｉとそのインデックスの組を送信したほうが通信経路を短くできる場合には、選択信号ｓｅｌ２を１とする。
【０１６３】
レジスタ７４ｍは、クロック信号ｃｌｋに同期したタイミングで、選択回路７４ｉが出力する値ｘｉとそのインデックスの組を保持する。このレジスタ７４ｍに保持されている値ｘｉとそのインデックスの組が、演算処理部７１ａ２２の右方向に隣接する演算処理部に供給される。
【０１６４】
レジスタ７４ｎは、クロック信号ｃｌｋに同期したタイミングで、選択回路７４ｊが出力する値ｘｉとそのインデックスの組を保持する。このレジスタ７４ｎに保持されている値ｘｉとそのインデックスの組が、演算処理部７１ａ２２の下方向に隣接する演算処理部に供給される。
【０１６５】
以下、第４の実施の形態の最適化装置の全体の動作の流れを、フローチャートを用いて説明する。
図１７は、第４の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【０１６６】
ステップＳ４０，Ｓ４１の処理は、図７のステップＳ１０，Ｓ１１の処理と同じである。ステップＳ４１の処理後、コントローラ６２は、密結合重み係数（及びそのインデックス）を演算処理部７１ａＮＮに送信する（ステップＳ４２）。
【０１６７】
送信された密結合重み係数が、前述した対応インデックスをもつ密結合重み係数ではない場合（ステップＳ４３：ＮＯ）、演算処理部７１ａＮＮに含まれるインデックスコントローラによって以下の処理が行われる。演算処理部７１ａＮＮの左方向の通信経路が最短パスである場合（ステップＳ４４：ＹＥＳ）、インデックスコントローラは、演算処理部７１ａＮＮの左方向に隣接する演算処理部に、密結合重み係数とそのインデックスを送信する（ステップＳ４５）。演算処理部７１ａＮＮの左方向の通信経路が最短パスではない場合（ステップＳ４４：ＮＯ）、インデックスコントローラは、演算処理部７１ａＮＮの上方向に隣接する演算処理部に、密結合重み係数とそのインデックスを送信する（ステップＳ４６）。ステップＳ４５，Ｓ４６の処理後、密結合重み係数が送信された演算処理部にて、ステップＳ４３からの処理が繰り返される。
【０１６８】
送信された密結合重み係数が、前述した対応インデックスをもつ密結合重み係数である場合（ステップＳ４３：ＹＥＳ）、図７に示したステップＳ１３，Ｓ１４と同様のステップＳ４７，Ｓ４８の処理が行われる。
【０１６９】
その後、前述の処理により、演算処理部７１ａ１１〜７１ａＮＮのそれぞれに属する各ニューロンの値（及びそのインデックス）が演算処理部７１ａＮＮに集められ、最終状態として、演算処理部７１ａＮＮからコントローラ６２に送信される（ステップＳ４９）。
【０１７０】
ステップＳ５０，Ｓ５１の処理は、図７に示したステップＳ１６，Ｓ１７の処理と同じである。
ステップＳ５１の処理後、コントローラ６２は、計算した外部ローカルフィールド（及びそのインデックス）を、１つの演算処理部７１ａＮＮに送信する（ステップＳ５２）。その後は、ステップＳ４３〜Ｓ４６と同様の処理によって、外部ローカルフィールド（及びそのインデックス）が、対応する演算処理部に最短パスで転送される（ステップＳ５３）。また、コントローラ６２は、カウント値ｎをインクリメントさせる（ステップＳ５４）。その後、ステップＳ４８からの処理が繰り返される。
【０１７１】
カウント値ｎがＮに達した場合、最適化装置７０は、最適化問題の計算処理を終了する。なお、カウント値ｎがＮに達した場合、たとえば、コントローラ６２は、その時点での各ニューロンの値を、最適化問題の解としてホストコンピュータ３５に送信する。
【０１７２】
以上のような第４の実施の形態の最適化装置７０によれば、第１の実施の形態の最適化装置１０と同様に、大規模な最適化問題を最適化装置７０にマッピングして解くことが可能となる。
【０１７３】
また、１つの演算処理部７１ａＮＮが、コントローラ６２と接続されているため、コントローラ６２と演算処理部７１ａ１１〜７１ａＮＮを接続する配線の数を少なくできる。また、演算処理部７１ａ１１〜７１ａＮＮが、メッシュ状に２次元接続されているため、演算処理部７１ａ１１〜７１ａＮＮの数を増やせ、より大規模な最適化問題を最適化装置７０にマッピングできる。また、演算処理部７１ａ１１〜７１ａＮＮのそれぞれは、密結合重み係数などのデータをより短い通信経路になるように転送する経路を選択するため、通信時間が短縮できる。
【０１７４】
なお、図１３の例では、右下の演算処理部７１ａＮＮがコントローラ６２に接続するものとしたがこれに限定されない。他の演算処理部がコントローラ６２に接続される場合、密結合重み係数などのデータの転送方向を変えればよい。
【０１７５】
以上、実施の形態に基づき、本発明の最適化装置及びその制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
たとえば、上記の説明では、全演算処理部を使用した動作例を説明したが、最適化問題の規模が、演算処理部の数に比べて小さい場合には、一部の演算処理部を使用せずともよい。ただその場合、第３の実施の形態の最適化装置６０では、使用しない演算処理部は、右端の演算処理部６１ａＮから優先的に選択される。
【符号の説明】
【０１７６】
１０  最適化装置
１１ａ１〜１１ａｍ  演算処理部
１２  制御部
１２ａ  記憶部
１５ａ１〜１５ａｍ  ニューロン群
１５ｂ１〜１５ｂ８  ニューロン
【図１】
2019159997.tif 000008
【図２】
2019159997.tif 000009
【図３】
2019159997.tif 000010
【図４】
2019159997.tif 000011
【図５】
2019159997.tif 000012
【図６】
2019159997.tif 000013
【図７】
2019159997.tif 000014
【図８】
2019159997.tif 000015
【図９】
2019159997.tif 000016
【図１０】
2019159997.tif 000017
【図１１】
2019159997.tif 000018
【図１２】
2019159997.tif 000019
【図１３】
2019159997.tif 000020
【図１４】
2019159997.tif 000021
【図１５】
2019159997.tif 000022
【図１６】
2019159997.tif 000023
【図１７】
2019159997.tif 000024