(57)【要約】【課題】大規模な問題を少量のメモリを用いて演算可能にする。【解決手段】圧縮部１１が、計算対象の問題を変換したイジングモデルの各ビット間の結合の強さを示す結合係数を含む係数行列の対称性またはパターン性に基づいて、係数行列を圧縮した圧縮係数データを出力し、記憶部１２が、圧縮部１１が出力する圧縮係数データを記憶し、復号部１３が、記憶部１２が記憶する圧縮係数データから結合係数を復号し、焼き鈍し部１４が、復号部１３が復号した結合係数を用いて、擬似焼き鈍し動作を実行する。【選択図】図１
2019185602.tif 000002
【特許請求の範囲】
【請求項１】
計算対象の問題を変換したイジングモデルの各ビット間の結合の強さを示す結合係数を含む係数行列の対称性またはパターン性に基づいて、前記係数行列を圧縮した圧縮係数データを出力する圧縮部と、
前記圧縮部が出力する前記圧縮係数データを記憶する記憶部と、
前記記憶部が記憶する前記圧縮係数データから前記結合係数を復号する復号部と、
前記復号部が復号した前記結合係数を用いて、擬似焼き鈍し動作を実行する焼き鈍し部と、
を有する最適化装置。
【請求項２】
前記係数行列は対称行列であり、対角成分と第１の対称成分と第２の対称成分とを含み、
前記圧縮部は、前記係数行列のうち、前記第１の対称成分と前記第２の対称成分の何れか一方と、前記対角成分とを含む前記圧縮係数データを出力し、
前記復号部は、前記記憶部が記憶する前記圧縮係数データに含まれる前記第１の対称成分と前記第２の対称成分の何れか一方から、前記第１の対称成分と前記第２の対称成分の何れか他方を復号し、
前記焼き鈍し部は、前記対角成分と、前記圧縮係数データに含まれる前記第１の対称成分と前記第２の対称成分の何れか一方と、前記復号部が復号する前記第１の対称成分と前記第２の対称成分の何れか他方と、を用いて前記擬似焼き鈍し動作を実行する、
請求項１に記載の最適化装置。
【請求項３】
前記圧縮部は、前記対角成分と、前記圧縮係数データに含まれる前記第１の対称成分と前記第２の対称成分の何れか一方とに含まれる少なくとも一部の前記結合係数を、前記圧縮係数データに含まれない前記第１の対称成分と前記第２の対称成分の何れか他方に割り当てられた前記記憶部の記憶領域に記憶させる、
請求項２に記載の最適化装置。
【請求項４】
前記圧縮部は、前記係数行列の対称性に基づいて前記係数行列を圧縮する場合、前記係数行列の対称性の有無を判定し、前記係数行列に対称性がない場合、前記係数行列を圧縮せずに前記記憶部に記憶させる、請求項１乃至３の何れか一項に記載の最適化装置。
【請求項５】
前記圧縮部は、前記係数行列において、それぞれ同じ行列となる複数のサブブロックの種類が複数ある場合、各種類のサブブロックを表す情報と、前記複数のサブブロックの並び順を示す情報とを含む前記圧縮係数データを出力する、
請求項１乃至３の何れか一項に記載の最適化装置。
【請求項６】
前記圧縮部は、前記複数のサブブロックの種類が、所定の閾値よりも多い場合、前記係数行列を圧縮せずに、前記記憶部に記憶させる、請求項５に記載の最適化装置。
【請求項７】
前記圧縮部は、前記擬似焼き鈍し動作において前記各ビットに設定されるバイアス係数がとる値の種類が複数あり、前記バイアス係数がとる値の種類が閾値以下の場合に、前記バイアス係数を、前記バイアス係数がとる値の種類を示す情報で表した圧縮バイアス係数データを出力し、
前記記憶部は、前記圧縮部が出力する前記圧縮バイアス係数データを記憶し、
前記復号部は、前記記憶部が記憶する前記圧縮バイアス係数データから前記バイアス係数を復号し、
前記焼き鈍し部は、前記復号部が復号した前記バイアス係数を用いて、前記擬似焼き鈍し動作を実行する、
請求項１乃至６の何れか一項に記載の最適化装置。
【請求項８】
最適化装置が有する圧縮部が、計算対象の問題を変換したイジングモデルの各ビット間の結合の強さを示す結合係数を含む係数行列の対称性またはパターン性に基づいて、前記係数行列を圧縮した圧縮係数データを出力し、
前記最適化装置が有する記憶部が、前記圧縮部が出力する前記圧縮係数データを記憶し、
前記最適化装置が有する復号部が、前記記憶部が記憶する前記圧縮係数データから前記結合係数を復号し、
前記最適化装置が有する焼き鈍し部が、前記復号部が復号した前記結合係数を用いて、擬似焼き鈍し動作を実行する、
最適化装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化装置及び最適化装置の制御方法に関する。
【背景技術】
【０００２】
ノイマン型コンピュータが不得意とする多変数の最適化問題を解く方法として、イジング型のエネルギー関数を用いた最適化装置（イジングマシンまたはボルツマンマシンと呼ばれる場合もある）がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
【０００３】
最適化装置は、たとえば、ニューラルネットワークを用いてモデル化することもできる。その場合、最適化装置に含まれる複数のユニット（ビット）のそれぞれが、他のビットの状態と、他のビットと自身のビットとの結合の強さを示す結合係数（重み係数とも呼ばれる）とに応じて０または１を出力するニューロンとして機能する。最適化装置は、たとえば、擬似焼き鈍し（シミュレーテッド・アニーリング）を用いた確率的探索法により、上記のようなエネルギー関数（コスト関数、目的関数とも呼ばれる）の最小値が得られる各ビットの状態の組み合わせを、解として求める。従来、加算器や比較器などの論理回路を用いて、ハードウェアにより擬似焼き鈍しを行う最適化装置が提案されている（たとえば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−１３８７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、結合係数を記憶する方法として、上記のようなハードウェアで実現される最適化装置の外部のメモリに結合係数を記憶する方法があるが、メモリからの読み出しに時間がかかる。そのため、外部のメモリよりも高速アクセスが可能な最適化装置の内部メモリに結合係数を記憶する方法がある。
【０００６】
しかしながら、問題の規模の増大に応じて結合係数の数が増加し、最適化装置のハードウェアに搭載される内部メモリに記憶しきれないという問題がある。たとえば、イジングモデルのビット数が１０２４ビットであり、１つの結合係数が３２ビットである場合、全結合係数のビット数は、３３Ｍビット程度となる。現状のハードウェアのオンチップメモリの記憶容量は高々数十Ｍビット程度であり、結合係数以外にも記憶するデータが存在することを考慮すると、これ以上大規模な問題を扱うことは困難である。
【０００７】
１つの側面では、本発明は、大規模な問題を少量のメモリを用いて演算可能な最適化装置及び最適化装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの実施態様では、計算対象の問題を変換したイジングモデルの各ビット間の結合の強さを示す結合係数を含む係数行列の対称性またはパターン性に基づいて、前記係数行列を圧縮した圧縮係数データを出力する圧縮部と、前記圧縮部が出力する前記圧縮係数データを記憶する記憶部と、前記記憶部が記憶する前記圧縮係数データから前記結合係数を復号する復号部と、前記復号部が復号した前記結合係数を用いて、擬似焼き鈍し動作を実行する焼き鈍し部と、を有する最適化装置が提供される。
【０００９】
また、１つの実施態様では最適化装置の制御方法が提供される。
【発明の効果】
【００１０】
１つの側面では、本発明は、大規模な問題を少量のメモリを用いて演算できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態の最適化装置及びその制御方法の例を示す図である。
【図２】第２の実施の形態の最適化装置の一例を示す図である。
【図３】結合係数の記憶部での配置例を示す図である。
【図４】第２の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【図５】第３の実施の形態の最適化装置の一例を示す図である。
【図６】パターン性を有する係数行列の一例を示す図である。
【図７】圧縮係数データの記憶例を示す図である。
【図８】第３の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【図９】第４の実施の形態の最適化装置の一例を示す図である。
【図１０】第４の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
（第１の実施の形態）
以下に示す最適化装置は、イジングモデルの基底状態（イジング型のエネルギー関数が最小値となるときの各ビットの値）を探索することで、巡回セールスマン問題などの最適化問題を計算する。イジング型のエネルギー関数Ｅ（ｘ）は、たとえば、以下の式（１）で定義される。
【００１３】
【数１】
2019185602.tif 000003
【００１４】
右辺の１項目は、全ビット（全ニューロン）から選択可能な２つのビットの全組み合わせについて、漏れと重複なく、２つのビットの値（０または１）と結合係数との積を積算したものである。ｘｉは、ｉ番目のビットの値、ｘｊは、ｊ番目のビットの値であり、Ｗｉｊは、ｉ番目とｊ番目のビットの結合の強さを示す結合係数である。なお、Ｗｉｉ＝０である。また、Ｗｉｊ＝Ｗｊｉであることが多い（つまり、結合係数による係数行列は対称行列である場合が多い）。
【００１５】
右辺の２項目は、全ビットのそれぞれのバイアス係数とビットの値との積の総和を求めたものである。ｂｉは、ｉ番目のビットのバイアス係数を示している。
また、ｉ番目のビットのスピン反転（値の変化）に伴うエネルギー変化ΔＥｉは、以下の式（２）で表される。
【００１６】
【数２】
2019185602.tif 000004
【００１７】
式（２）において、ｉ番目のビットの値ｘｉが１のとき、２ｘｉ−１は１となり、値ｘｉが０のとき、２ｘｉ−１は−１となる。なお、以下の式（３）で表されるｈｉはローカルフィールド（局所場）と呼ばれ、値ｘｉに応じてローカルフィールドｈｉに符号（＋１または−１）を乗じたものがエネルギー変化ΔＥｉである。
【００１８】
【数３】
2019185602.tif 000005
【００１９】
図１は、第１の実施の形態の最適化装置及びその制御方法の例を示す図である。
第１の実施の形態の最適化装置１０は、圧縮部１１、記憶部１２、復号部１３、焼き鈍し部１４を有する。
【００２０】
圧縮部１１は、計算対象の問題を変換したイジングモデルの各ビット間の結合の強さを示す結合係数を含む係数行列の対称性またはパターン性に基づいて、係数行列を圧縮した圧縮係数データを出力する。たとえば、前述のように、Ｗｉｊ＝Ｗｊｉであり、係数行列が対称行列である場合、圧縮部１１は、その対称性に基づいて、係数行列を圧縮した圧縮行列データを出力する。
【００２１】
図１には、ｎ個のビットを有するイジングモデルにおける係数行列の圧縮例が示されている。対称行列である係数行列は、対角成分１５ａと対角成分１５ａを挟んだ対称成分１５ｂ，１５ｃを有する。Ｗｉｊ＝Ｗｊｉであるため、対称成分１５ｂ，１５ｃの何れか一方から、他方を再現できる。そこで、圧縮部１１は、対角成分１５ａと、対称成分１５ｂ，１５ｃのいずれか一方を含む圧縮係数データを出力する。図１の例では、圧縮部１１は、対角成分１５ａと対称成分１５ｂとを含む圧縮係数データを出力する。
【００２２】
係数行列のパターン性に基づいて係数行列を圧縮する例については後述する（第３の実施の形態参照）。
記憶部１２は、圧縮部１１が出力する圧縮係数データを記憶する。
【００２３】
なお、焼き鈍し部１４において、各ビットについて、式（３）で表されるローカルフィールドｈｉが算出される場合、係数行列の各行の結合係数が用いられる。
図１に示すような圧縮係数データに含まれる結合係数が１行ずつ（各ビットについての演算に用いられる分ずつ）、記憶部１２の１ライン分の記憶領域に記憶される場合、圧縮係数データに含まれない対称成分１５ｃに割り当てられた記憶領域が無駄になる。そこで、圧縮部１１は、所定のメモリ配置ルールにしたがって、対角成分１５ａまたは対称成分１５ｂに含まれる結合係数を、記憶部１２において、対称成分１５ｃに割り当てられた記憶領域に記憶する。これにより圧縮係数データを記憶する記憶領域を縮小できる。
【００２４】
復号部１３は、記憶部１２が記憶する圧縮係数データから結合係数を復号する。たとえば、図１のように、係数行列が対称性に基づいて圧縮された場合、復号部１３は、記憶部１２が記憶する圧縮係数データに含まれる対称成分１５ｂから、対称成分１５ｃを復号する。たとえば、焼き鈍し部１４による、結合係数Ｗｉ２を含む行の読み出し要求発生時、復号部１３は、圧縮係数データの結合係数Ｗ２ｉを含む列の結合係数を用いて、結合係数Ｗｉ２を含む行の圧縮係数データに含まれない結合係数を復号する。
【００２５】
また、対称成分１５ｃに割り当てられた記憶領域に配置された対角成分１５ａまたは対称成分１５ｂの結合係数に対する読み出し要求があった場合、復号部１３は、所定のメモリ配置ルールに基づいて、その結合係数を記憶部１２から読み出す。
【００２６】
係数行列がそのパターン性に基づいて圧縮された場合の復号例については後述する。
上記のような圧縮部１１や復号部１３は、たとえば、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路で実現できる。また、圧縮部１１や復号部１３は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサであってもよい。圧縮部１１や復号部１３がプロセッサである場合、プロセッサが、たとえば、記憶部１２に記憶されているプログラムを実行することで、上記の処理が実現される。
【００２７】
記憶部１２は、たとえば、ＳＲＡＭ（Static Random Access Memory）などの揮発性メモリ、または、フラッシュメモリやＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）などの不揮発性メモリである。
【００２８】
焼き鈍し部１４は、復号部１３が復号した結合係数を用いて、擬似焼き鈍し動作を実行し、イジングモデルの基底状態を探索する。焼き鈍し部１４は、焼き鈍しパラメータに基づいた擬似焼き鈍し動作を行う。
【００２９】
焼き鈍しパラメータには、擬似焼き鈍しにより温度を下げていく際の初期温度、最終温度、冷却スケジュール（冷却速度など）、演算処理の繰り返し回数、バイアス係数、ビットの初期値などがある。なお、擬似焼き鈍しでは、温度はノイズの幅で表される。温度が高いほどノイズの幅が広い。ノイズは乱数生成器（ＬＦＳＲ（Linear Feedback Shift Registers）など）によって生成できる。
【００３０】
たとえば、焼き鈍し部１４は、読み出しアドレスを指定して、式（３）で表されるローカルフィールドｈｉを演算するために用いる結合係数Ｗｉｊの読み出し要求を記憶部１２に対して行う。そして、焼き鈍し部１４は、復号部１３により復号されたその結合係数Ｗｉｊを焼き鈍し部１４の内部の図示しないメモリまたはレジスタに記憶する。そして、焼き鈍し部１４は、結合係数Ｗｉｊとバイアス係数ｂｉと値ｘｉに基づいて、ローカルフィールドｈｉを演算する。そして、焼き鈍し部１４は、ノイズ（乱数）をローカルフィールドｈｉに加え、閾値との比較によってｉ番目のビットの値の更新の可否を判定する。
【００３１】
焼き鈍し部１４は、このような演算処理を、各ビットに対して行う。そして、焼き鈍し部１４は、全ビットのうち、更新可であると判定されたビットが複数ある場合には、収束性の悪化を防ぐため、乱数に基づいて、更新可であると判定された複数のビットのうち、１つを選択してそのビットの値を更新する。なお、焼き鈍し部１４は、各ビットに関する処理を並列に行ってもよい。その場合、焼き鈍し部１４は、初めに全結合係数の読み出し要求を記憶部１２に対して行う。
【００３２】
焼き鈍し部１４は、このような演算処理を、たとえば、所定回数繰り返す。なお、焼き鈍し部１４は、冷却スケジュールに基づいて、たとえば、上記所定回数よりも少ないある回数の繰り返し処理ごとに、温度を下げていく（ノイズ幅を小さくする）。そして、上記所定回数の繰り返し処理後の各ビットの値を、問題に対する解（計算結果）として出力する。なお、焼き鈍し部１４は、各繰り返し処理後に式（１）に示したエネルギー関数Ｅ（ｘ）の値（以下、単にエネルギーという）を算出し、最低エネルギーと最低エネルギーを示したときの各ビットの値を保持してもよい。その場合、焼き鈍し部１４は、たとえば、所定回数の繰り返し処理後において、最低エネルギーを示したときの各ビットの値を計算結果として出力する。
【００３３】
なお、焼き鈍し部１４は、広い意味での擬似焼き鈍し手法である交換モンテカルロ法にしたがって演算を行ってもよい。その場合、焼き鈍し部１４には、たとえば、全ビットに関する演算を行うユニット（レプリカ）が複数設けられる。各ユニットにはそれぞれ異なる温度が割り当てられ、各ユニットのエネルギーや温度に基づいた所定の交換確率に基づいて、隣接する温度が割り当てられたユニット間で、温度または状態（各ビットの値）が交換される処理が繰り返される。たとえば、所定回数の繰り返し処理の終了後において、最低エネルギーを示すユニットの状態が解となる。
【００３４】
このような焼き鈍し部１４は、たとえば、結合係数とバイアス係数と各ビットの値を保持するレジスタやメモリ、積和演算回路、乱数生成器（ＬＦＳＲなど）、比較器、セレクタなどの論理回路、読み出しアドレスを指定する制御回路などを用いて実現できる。
【００３５】
なお、焼き鈍しパラメータや係数行列は、最適化装置１０の外部の装置（たとえば、コンピュータ）から供給される。計算対象の問題のイジングモデルへの変換などは、その外部の装置により行われる。また、計算結果は、外部の装置に供給され、たとえば、ディスプレイなどの表示装置に表示される。
【００３６】
以下、第１の実施の形態の最適化装置１０の動作例を説明する。
圧縮部１１は、たとえば、図示しないコンピュータのメモリから読み出される係数行列を受信した場合、係数行列の対称性またはパターン性に基づいて、係数行列を圧縮した圧縮係数データを出力する。記憶部１２は、圧縮部１１が出力する圧縮係数データを記憶する。
【００３７】
焼き鈍し部１４は、記憶部１２に対して、読み出しアドレスを指定して、たとえば、まず１番目のビットと他のビットの間の結合の強さを示す結合係数Ｗ１１〜Ｗ１ｎの読み出し要求を行う。これにより、記憶部１２からその読み出しアドレスに対応した圧縮係数データが復号部１３に読み出される。図１のように、係数行列が対称性に基づいて圧縮された場合、１番目のビットと他のビットの間の結合の強さを示す結合係数Ｗ１１〜Ｗ１ｎは、圧縮係数データに含まれているため、復号部１３は、結合係数Ｗ１１〜Ｗ１ｎを焼き鈍し部１４に供給する。
【００３８】
これによって、焼き鈍し部１４は、結合係数Ｗ１１〜Ｗ１ｎを用いて１番目のビットに対する前述の処理（ローカルフィールドの算出や値の更新可否の判定など）を実行する。
次に、焼き鈍し部１４が、読み出しアドレスを指定して、２番目のビットと他のビットの間の結合の強さを示す結合係数Ｗ２１〜Ｗ２ｎの読み出し要求を行う。これにより、記憶部１２からその読み出しアドレスに対応した圧縮係数データが復号部１３に読み出される。図１のように、係数行列が対称性に基づいて圧縮された場合、２番目のビットと１番目のビットの間の結合の強さを示す結合係数Ｗ２１は、圧縮係数データに含まれていない。そのため、復号部１３は、結合係数Ｗ２１と同じ値であり、記憶部１２に記憶されている圧縮係数データに含まれる結合係数Ｗ１２を読み出すことで、結合係数Ｗ２１を復号する。
【００３９】
これによって、焼き鈍し部１４は、結合係数Ｗ２１〜Ｗ２ｎを用いて２番目のビットに対する前述の処理を実行する。
同様の処理が各ビットに対して行われる。そして、焼き鈍し部１４は、全ビットのうち、更新可であると判定されたビットが複数ある場合には、乱数に基づいて、更新可であると判定された複数のビットのうち、１つを選択してそのビットの値を更新する。焼き鈍し部１４は、このような演算処理を、たとえば、所定回数繰り返す。なお、焼き鈍し部１４は、冷却スケジュールに基づいて、たとえば、上記所定回数よりも少ないある回数の繰り返し処理ごとに、温度を下げていく。そして、焼き鈍し部１４は、上記所定回数の繰り返し処理後の各ビットの値を、問題に対する解（計算結果）として出力する。
【００４０】
以上のような第１の実施の形態の最適化装置１０によれば、係数行列をその対称性またはパターン性に基づいて圧縮して記憶部１２に記憶することで、記憶部１２の記憶容量が問題の規模に比して少なくてよくなる。つまり、大規模な問題を少量のメモリを用いて演算可能になる。
【００４１】
なお、係数行列に対称性とパターン性の両方がある場合、後述のようにパターン性に基づいて圧縮したほうが対称性に基づいて圧縮する場合に比べて圧縮率が高いため、パターン性に基づいて圧縮するようにしてもよい。
【００４２】
（第２の実施の形態）
図２は、第２の実施の形態の最適化装置の一例を示す図である。
第２の実施の形態の最適化装置２０は、圧縮部２１、記憶部２２、復号部２３、焼き鈍し部２４を有する。
【００４３】
圧縮部２１は、行列解析部２１ａ、行列圧縮部２１ｂを有する。
行列解析部２１ａは、係数行列を受信し、受信した係数行列を解析し、係数行列が対称性を有するか否かを判定する。たとえば、行列解析部２１ａは、係数行列に含まれる全ての結合係数において、Ｗｉｊ＝Ｗｊｉの関係が満たされているか否かを判定し、Ｗｉｊ＝Ｗｊｉの関係が満たされている場合には、係数行列が対称性を有すると判定する。Ｗｉｊ＝Ｗｊｉの関係を満たさない結合係数がある場合には、行列解析部２１ａは、係数行列が対称性を有さないと判定する。
【００４４】
行列解析部２１ａは、係数行列が対称性を有すると判定した場合には、係数行列を、行列圧縮部２１ｂに入力し、係数行列が対称性を有さないと判定した場合には、係数行列を、記憶部２２に記憶する。また、行列解析部２１ａは、係数行列が対称性を有すると判定した場合には、圧縮を行うことを示す信号（たとえば、０か１の値をもつ信号（以下フラグという））を復号部２３に入力する。
【００４５】
行列圧縮部２１ｂは、係数行列の対称性に基づいて、係数行列を圧縮した圧縮係数データを出力する。たとえば、図１に示したように、行列圧縮部２１ｂは、対角成分１５ａと対称成分１５ｂとを含む圧縮係数データを出力する。また、行列圧縮部２１ｂは、所定のメモリ配置ルールにしたがって、対角成分１５ａまたは対称成分１５ｂに含まれる結合係数を、記憶部１２において、対称成分１５ｃに割り当てられた記憶領域に記憶する。これにより圧縮係数データを記憶する記憶領域を縮小できる。
【００４６】
図３は、結合係数の記憶部での配置例を示す図である。
圧縮係数データに含まれる結合係数が１行ずつ、記憶部２２のそれぞれ１ライン分の記憶領域Ｌ１〜Ｌｎの何れかに記憶される場合、圧縮係数データに含まれない対称成分１５ｃに割り当てられた記憶領域が無駄になる。たとえば、記憶領域Ｌ１に記憶される結合係数の数が、ｎ個であるのに対し、記憶領域Ｌｎに記憶される結合係数の数は、１個である。
【００４７】
そこで、行列圧縮部２１ｂは、所定のメモリ配置ルールにしたがって、対角成分１５ａまたは対称成分１５ｂに含まれる結合係数を、記憶部２２において、対称成分１５ｃに割り当てられた記憶領域に記憶する。図３の例では、結合係数Ｗｎｎは、記憶領域Ｌ２の先頭に記憶されている。これにより、記憶領域Ｌ１〜Ｌ（ｎ／２）のそれぞれにおいて記憶される結合係数の数をｎ個とすることができ、無駄をなくせ、さらにライン数をｎから（ｎ／２）＋１に減らせる。このため、圧縮係数データを記憶する記憶領域を縮小できる。
【００４８】
記憶部２２は、係数行列または圧縮係数データを記憶する。
復号部２３は、圧縮判別部２３ａ、行列復号部２３ｂを有する。
圧縮判別部２３ａは、行列解析部２１ａが出力するフラグが、圧縮を行うことを示す値である場合、記憶部２２に記憶されている圧縮係数データを、行列復号部２３ｂに入力する。圧縮判別部２３ａは、フラグが圧縮を行うことを示す値ではない場合、記憶部２２に記憶されている非圧縮の係数行列の結合係数を焼き鈍し部２４に入力する。
【００４９】
行列復号部２３ｂは、入力された圧縮係数データから結合係数を復号する。たとえば、焼き鈍し部２４による、結合係数Ｗｉ２を含む行の読み出し要求発生時、行列復号部２３ｂは、圧縮係数データの結合係数Ｗ２ｉを含む列の結合係数を用いて、結合係数Ｗｉ２を含む行の圧縮係数データに含まれない結合係数を復号する。
【００５０】
また、対称成分１５ｃに割り当てられた記憶領域に配置された対角成分１５ａまたは対称成分１５ｂの結合係数の読み出し要求があった場合、行列復号部２３ｂは、そのメモリ配置ルールに基づいて、その結合係数を記憶部２２から読み出す。
【００５１】
たとえば、結合係数Ｗｎｎを含む行の読み出し要求があった場合、行列復号部２３ｂは、図３の記憶領域Ｌ２から、結合係数Ｗｎｎを読み出す。
なお、行列復号部２３ｂは、図３に示したようにメモリ配置変更後の圧縮係数データを全て記憶部２２から読み出し、元のメモリ配置に戻した後に、対称成分１５ｃの結合係数を対称成分１５ｂの結合係数から復号してもよい。
【００５２】
第１の実施の形態の最適化装置１０の圧縮部１１や復号部１３と同様に、圧縮部２１や復号部２３は、たとえば、ＡＳＩＣやＦＰＧＡなどの特定用途の電子回路で実現できる。また、圧縮部２１や復号部２３は、ＣＰＵやＤＳＰなどのプロセッサであってもよい。圧縮部２１や復号部２３がプロセッサである場合、プロセッサが、たとえば、記憶部２２に記憶されているプログラムを実行することで、上記の処理が実現される。
【００５３】
第１の実施の形態の最適化装置１０の記憶部１２と同様に、記憶部２２は、たとえば、ＳＲＡＭなどの揮発性メモリ、または、フラッシュメモリやＥＥＰＲＯＭなどの不揮発性メモリである。
【００５４】
焼き鈍し部２４は、圧縮判別部２３ａから入力された非圧縮の係数行列の結合係数、または、行列復号部２３ｂから入力された復号後の係数行列の結合係数を用いて、擬似焼き鈍し動作を実行する。焼き鈍し部２４が行う擬似焼き鈍し動作については、第１の実施の形態の最適化装置１０の焼き鈍し部１４が行う前述の擬似焼き鈍し動作と同じであるので説明を省略する。
【００５５】
第１の実施の形態の焼き鈍し部１４と同様に焼き鈍し部２４は、たとえば、結合係数とバイアス係数と各ビットの値を保持するレジスタやメモリ、積和演算回路、乱数生成器、比較器、セレクタなどの論理回路、制御回路などを用いて実現できる。
【００５６】
以下、第２の実施の形態の最適化装置２０の動作例を説明する。
図４は、第２の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【００５７】
行列解析部２１ａは、係数行列を受信すると（ステップＳ１０）、受信した係数行列を解析し（ステップＳ１１）、係数行列が対称性を有するか否かを判定する（ステップＳ１２）。行列解析部２１ａは、係数行列が対称性を有すると判定した場合には、係数行列を、行列圧縮部２１ｂに入力し、行列圧縮部２１ｂは、係数行列の対称性に基づいて、係数行列を圧縮する（ステップＳ１３）。なお、行列解析部２１ａは、係数行列が対称性を有すると判定した場合には、圧縮を行うことを示すフラグを復号部２３に入力する。
【００５８】
そして、記憶部２２は、圧縮係数データを記憶する（ステップＳ１４）。
一方、行列解析部２１ａは、係数行列が対称性を有さないと判定した場合には、係数行列を、記憶部２２に記憶する（ステップＳ１５）。
【００５９】
ステップＳ１４またはステップＳ１５の処理後、焼き鈍し部２４は、焼き鈍し動作に用いる結合係数を取得するために、記憶部２２に対して読み出しアドレスの指定を行い、結合係数の読み出し要求を行う（ステップＳ１６）。これにより、記憶部２２から読み出しアドレスに対応する圧縮係数データまたは非圧縮の係数行列の結合係数が読み出される。
【００６０】
その後、圧縮判別部２３ａは、行列解析部２１ａが出力するフラグが、圧縮を行うことを示す値であるか否かに基づいて、係数行列が圧縮されているか否かを判定する（ステップＳ１７）。
【００６１】
圧縮判別部２３ａは、係数行列が圧縮されていると判定した場合、圧縮係数データを、行列復号部２３ｂに入力し、行列復号部２３ｂは、入力された圧縮係数データから結合係数を復号する（ステップＳ１８）。復号された結合係数は、焼き鈍し部２４に入力される。
【００６２】
そして、焼き鈍し部２４は、入力された結合係数を用いて、擬似焼き鈍し動作を実行する（ステップＳ１９）。なお、圧縮判別部２３ａは、係数行列が圧縮されていないと判定された場合、記憶部２２から読み出された非圧縮の結合行列の結合係数を焼き鈍し部２４に入力し、焼き鈍し部２４はその結合係数を用いて擬似焼き鈍し動作を実行する。
【００６３】
ステップＳ１９の処理後、たとえば、焼き鈍し部２４内の図示しない制御回路は、擬似焼き鈍し動作が終了したか否かを判定する（ステップＳ２０）。たとえば、上記所定回数の繰り返し処理後が終了した場合に、擬似焼き鈍し動作が終了したと判定される。
【００６４】
擬似焼き鈍し動作が終了していないと判定された場合、ステップＳ１６からの処理が繰り返され、擬似焼き鈍し動作が終了したと判定された場合、焼き鈍し部２４は、各ビットの値を、問題に対する解（計算結果）として出力する（ステップＳ２１）。
【００６５】
以上のような第２の実施の形態の最適化装置２０によれば、係数行列をその対称性に基づいて圧縮して記憶部２２に記憶することで、記憶部２２の記憶容量が問題の規模に比して少なくてよくなる。つまり、大規模な問題を少量のメモリを用いて演算可能になる。
【００６６】
たとえば、イジングモデルのビット数がｎ個である場合、非圧縮時の結合係数はｎ×ｎになるが、上記の圧縮手法によって、圧縮係数データに含まれる結合係数の数は、ｎ（（ｎ／２）＋１）に削減でき、非圧縮時のほぼ５０％程度に圧縮可能である。
【００６７】
また、行列解析部２１ａが係数行列を解析して、対称性を有さない係数行列を非圧縮とすることで、圧縮に適さない係数行列が圧縮されてしまうことを防げる。言い換えると、最適化装置２０は、様々な問題に対応した係数行列のうち、圧縮に適した係数行列（第２の実施の形態では対称性を有する係数行列）を選択して、圧縮を行うことができる。
【００６８】
なお、係数行列が対称行列であることが予めわかっている場合には、行列解析部２１ａや圧縮判別部２３ａはなくてもよい。また、その場合、図４に示したステップＳ１１，Ｓ１２，Ｓ１５，Ｓ１７の処理は、実行されなくてもよい。
【００６９】
（第３の実施の形態）
たとえば、巡回セールスマン問題で用いられる係数行列では、対角線上に同じパターンで結合係数が並ぶ。以下に示す第３の実施の形態の最適化装置は、係数行列のパターン性を利用して係数行列を圧縮するものである。
【００７０】
図５は、第３の実施の形態の最適化装置の一例を示す図である。図５において、図２に示した第２の実施の形態の最適化装置２０と同じ要素については同一符号が付されている。
【００７１】
第３の実施の形態の最適化装置３０は、第２の実施の形態の最適化装置２０と同様に、圧縮部３１と復号部３２を有する。ただし、圧縮部３１は、係数行列のパターン性に基づいて係数行列を圧縮した圧縮係数データを出力する機能を有し、復号部３２はその圧縮係数データから結合係数を復号する機能を有する。
【００７２】
図６は、パターン性を有する係数行列の一例を示す図である。
図６中で、“Ａ”、“Ｂ”、“Ｃ”と表記されているブロック（以下サブブロックＡ，Ｂ，Ｃという）は、それぞれｍ×ｍ個（たとえば、３２×３２個）の結合係数が配列された行列である。複数のサブブロックＡは、それぞれ同じ行列である。同様に、複数のサブブロックＢもそれぞれ同じ行列であり、複数のサブブロックＣもそれぞれ同じ行列である。図６の例では、全体の係数行列（たとえば、１０２４×１０２４個の結合係数からなる）は、３種類のサブブロックＡ〜Ｃからなっている。
【００７３】
圧縮部３１の行列解析部３１ａは、係数行列を受信し、受信した係数行列を解析し、係数行列がパターン性を有するか否かを判定する。
たとえば、行列解析部３１ａは、まず係数行列の左上のｍ×ｍ個の結合係数をサブブロックＡとし、係数行列全体から同じサブブロックＡを検出する。たとえば、行列解析部３１ａは、ラスタスキャンの順番で左上から右下までｍ×ｍ個の結合係数とサブブロックＡのｍ×ｍ個の結合係数とを比較し、全て一致していれば、そのｍ×ｍ個の結合係数をサブブロックＡと判定する。行列解析部３１ａは、同様の処理を、他のサブブロックについても行う。なお、係数行列全体を３種類のサブブロックＡ〜Ｃでは表せない場合には、行列解析部３１ａは、サブブロックの種類を増やして、同様の処理を行う。
【００７４】
そして、行列解析部３１ａは、たとえば、係数行列全体が、所定の閾値（たとえば、３）以下の種類のサブブロックで表される場合に、係数行列がパターン性を有すると判定する。係数行列に多数の種類のサブブロックが含まれる場合、以下に示す圧縮によるデータ量削減効果が低いため、行列解析部３１ａは、係数行列全体が所定の閾値より多くの種類のサブブロックで表される場合、パターン性を有さないと判定する。
【００７５】
行列解析部３１ａは、係数行列がパターン性を有すると判定した場合には、係数行列を、行列圧縮部３１ｂに入力し、係数行列がパターン性を有さないと判定した場合には、係数行列を、記憶部２２に記憶する。また、行列解析部３１ａは、係数行列がパターン性を有すると判定した場合には、圧縮を行うことを示すフラグを復号部３２に入力する。
【００７６】
行列圧縮部３１ｂは、係数行列のパターン性に基づいて、係数行列を圧縮した圧縮係数データを出力する。たとえば、行列圧縮部３１ｂは、サブブロックＡ〜Ｃのそれぞれに含まれる結合係数、係数行列の各行におけるサブブロックの並び順を示すビットパターンを含む圧縮係数データを出力し、記憶部２２に記憶する。
【００７７】
図７は、圧縮係数データの記憶例を示す図である。
記憶部２２の記憶領域Ｌ１には、係数行列サイズや、サブブロックの種類（図６の例では３）などが記憶される。記憶領域Ｌ２には、サブブロックＡの結合係数、記憶領域Ｌ３には、サブブロックＢの結合係数、記憶領域Ｌ４には、サブブロックＣの結合係数が記憶される。そして、記憶領域Ｌ５〜Ｌ１０２８には、係数行列の各行におけるサブブロックの並び順を示すビットパターンが記憶される。
【００７８】
たとえば、サブブロックの種類がサブブロックＡ〜Ｃの３つである場合、サブブロックＡ〜Ｃのそれぞれは、２ビットで表せる。サブブロックＡを００、サブブロックＢを０１、サブブロックＣを１０で表す場合、たとえば、サブブロックＡ，Ｂ，Ｃ，Ｃ，Ｃ，Ｃというサブブロックの並び順は、００，０１，１０，１０，１０，１０というビットパターンで表せる。
【００７９】
なお、たとえば、１０２４×１０２４個の結合係数による係数行列が、３２×３２のサブブロックで表せる場合、係数行列の１行目から、３２行分ずつのビットパターンは同じであるため、必ずしも図７に示すように１〜１０２４行目のビットパターンをそれぞれ記憶部２２に記憶しなくてもよい。
【００８０】
復号部３２は、圧縮判別部３２ａ、行列復号部３２ｂを有する。
圧縮判別部３２ａは、行列解析部３１ａが出力するフラグが、圧縮を行うことを示す値である場合、記憶部２２に記憶されている圧縮係数データを、行列復号部３２ｂに入力する。圧縮判別部３２ａは、フラグが圧縮を行うことを示す値ではない場合、記憶部２２に記憶されている非圧縮の係数行列の結合係数を焼き鈍し部２４に入力する。
【００８１】
行列復号部３２ｂは、入力された圧縮係数データから結合係数を復号する。たとえば、焼き鈍し部２４によるｉ番目のビットに関する結合係数の読み出し要求発生時、行列復号部３２ｂは、係数行列のｉ行目のビットパターンと、そのビットパターンで表される並び順で配列されたサブブロックの結合係数を用いて復号を行う。たとえば、行列復号部３２ｂは、ｉ行目のビットパターンがサブブロックＡ，Ｂ，Ｃ，Ｃという並び順を表す場合、サブブロックＡ〜Ｃにおいて係数行列のｉ行目に対応する行の結合係数を、サブブロックＡ，Ｂ，Ｃ，Ｃの順で復号結果として出力する。
【００８２】
第１の実施の形態の最適化装置１０の圧縮部１１や復号部１３と同様に、圧縮部３１や復号部３２は、たとえば、ＡＳＩＣやＦＰＧＡなどの特定用途の電子回路で実現できる。また、圧縮部３１や復号部３２は、ＣＰＵやＤＳＰなどのプロセッサであってもよい。圧縮部３１や復号部３２がプロセッサである場合、プロセッサが、たとえば、記憶部２２に記憶されているプログラムを実行することで、上記の処理が実現される。
【００８３】
以下、第３の実施の形態の最適化装置２０の動作例を説明する。
図８は、第３の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【００８４】
行列解析部３１ａは、係数行列を受信すると（ステップＳ３０）、受信した係数行列を解析し（ステップＳ３１）、係数行列がパターン性を有するか否かを判定する（ステップＳ３２）。行列解析部３１ａは、係数行列がパターン性を有すると判定した場合には、係数行列を、行列圧縮部３１ｂに入力し、行列圧縮部３１ｂは、係数行列のパターン性に基づいて、係数行列を圧縮する（ステップＳ３３）。なお、行列解析部３１ａは、係数行列がパターン性を有すると判定した場合には、圧縮を行うことを示すフラグを復号部３２に入力する。
【００８５】
ステップＳ３４〜Ｓ３７の処理は、図４に示したステップＳ１４〜Ｓ１７の処理と同じである。
圧縮判別部３２ａは、係数行列がパターン性に基づいて圧縮されていると判定した場合、圧縮係数データを、行列復号部３２ｂに入力する。そして、行列復号部３２ｂは、入力された圧縮係数データから結合係数を復号する（ステップＳ３８）。復号された結合係数は、焼き鈍し部２４に入力される。
【００８６】
以下のステップＳ３９〜４１の処理は、図４に示したステップＳ１９〜Ｓ２１の処理と同じである。
以上のような第３の実施の形態の最適化装置３０によれば、係数行列をそのパターン性に基づいて圧縮して記憶部２２に記憶することで、記憶部２２の記憶容量が問題の規模に比して少なくてよくなる。つまり、大規模な問題を少量のメモリを用いて演算可能になる。
【００８７】
たとえば、巡回セールスマン問題において、都市数を３２とすると、結合係数は、１０２４×１０２４個となる。係数行列全体が、図６に示したように３種類のサブブロックＡ〜Ｃ（それぞれ３２×３２個の結合係数を含む）の繰り返しで表せ、１つの結合係数が１６ビットであるとする。係数行列全体は３２×３２個のサブブロックで表せ、３種類のサブブロックは２ビットで表せるため、圧縮係数データ（３種類のサブブロックの結合係数とビットパターン）の情報量は、１６×３２×３２×３＋２×３２×３２＝５１２００ビットである。
【００８８】
一方、非圧縮時の結合係数の情報量は、１６×３２×３２×３２×３２＝１６７７７２１６ビットである。そのため、この例では、非圧縮時の０．３％程度に圧縮可能であり、第２の実施の形態の最適化装置２０よりも、圧縮効果が高い。
【００８９】
なお、実際にはサブブロックが３種類より多い場合もあるが、たとえば、サブブロックが１０種類の場合でも、圧縮係数データの情報量は、１６×３２×３２×１０＋４×３２×３２＝１６７９３６ビットとなり、非圧縮時の１％程度に圧縮可能である。
【００９０】
また、行列解析部３１ａが係数行列を解析して、パターン性を有さない係数行列を非圧縮とすることで、圧縮に適さない係数行列が圧縮されてしまうことを防げる。言い換えると、最適化装置３０は、様々な問題に対応した係数行列のうち、圧縮に適した係数行列（第３の実施の形態ではパターン性を有する係数行列）を選択して、圧縮を行うことができる。
【００９１】
（第４の実施の形態）
前述のように焼き鈍し部２４で用いられる焼き鈍しパラメータには、バイアス係数が含まれている。バイアス係数は、イジングモデルに含まれるビットごとに設定され、焼き鈍し部２４内の図示しないレジスタまたはメモリに記憶される。しかし、イジングモデルに含まれるビットの数が増え、バイアス係数の数も多くなる場合、レジスタまたはメモリの記憶容量を大きくしなければならなくなる。この問題を解決するために、第４の実施の形態の最適化装置４０は、係数行列以外に、バイアス係数についても圧縮する機能を有する。
【００９２】
図９は、第４の実施の形態の最適化装置の一例を示す図である。図９において、図２に示した第２の実施の形態の最適化装置２０と同じ要素については同一符号が付されている。
【００９３】
第４の実施の形態の最適化装置４０は、第２の実施の形態の最適化装置２０と同様に、圧縮部４１と復号部４２を有する。ただし、圧縮部４１は、係数行列の対称性またはパターン性に基づいて係数行列を圧縮した圧縮係数データを出力するとともに、バイアス係数を圧縮した圧縮バイアス係数データを出力する機能も有する。また、復号部４２は圧縮係数データから結合係数を復号する機能を有するとともに、圧縮バイアス係数データからバイアスを復号する機能を有する。
【００９４】
イジングモデルに含まれる各ビットのバイアス係数は、計算対象の問題に応じて変わるが、全て異なる値ではなく、その多くが同じ値となる場合が多い。圧縮部４１は、その性質を利用して、バイアス係数を圧縮する。
【００９５】
圧縮部４１の行列解析部４１ａは、係数行列を受信し、受信した係数行列を解析し、係数行列が対称性またはパターン性を有するか否かを判定する。さらに、行列解析部４１ａは、各ビットのバイアス係数を受信し、バイアス係数がとる値の種類の数が、所定の閾値以下の場合に、バイアス係数が、パターン性を有すると判定する。
【００９６】
たとえば、ｎ個のビットのバイアス係数ｂ１〜ｂｎが、１６３０１，６５２０，６５２０，１６３０１，１６３０１，６５２０，…，１６３０１となる場合、バイアス係数ｂ１〜ｂｎは２種類の値しかとらない。所定の閾値が２以上の場合、この例では、バイアス係数がパターン性を有すると判定される。
【００９７】
バイアス係数が多数の種類の値をとる場合、以下に示す圧縮によるデータ量削減効果が低いため、行列解析部４１ａは、バイアス係数がとる値の種類の数が所定の閾値より多い場合、パターン性を有さないと判定する。
【００９８】
行列解析部４１ａは、係数行列が対称性またはパターン性を有すると判定した場合には、係数行列を、行列圧縮部４１ｂに入力し、係数行列が対称性またはパターン性を有さないと判定した場合には、係数行列を、記憶部２２に記憶する。また、行列解析部４１ａは、係数行列がパターン性を有すると判定した場合には、係数行列に対する圧縮を行うことを示すフラグを復号部４２に入力する。
【００９９】
さらに、行列解析部４１ａは、バイアス係数がパターン性を有すると判定した場合には、バイアス係数を、行列圧縮部４１ｂに入力し、バイアス係数がパターン性を有さないと判定した場合には、バイアス係数を、記憶部２２に記憶する。また、行列解析部４１ａは、バイアス係数がパターン性を有すると判定した場合には、バイアス係数に対する圧縮を行うことを示すフラグを復号部４２に入力する。
【０１００】
行列圧縮部４１ｂは、係数行列の対称性またはパターン性に基づいて、係数行列を圧縮した圧縮係数データを出力し、記憶部２２に記憶する。さらに、行列圧縮部４１ｂは、バイアス係数のパターン性に基づいて、バイアス係数を圧縮した圧縮バイアス係数データを出力し、記憶部２２に記憶する。
【０１０１】
たとえば、バイアス係数が、上記の例のように２種類の値しかとらない場合、行列圧縮部４１ｂは、各値を１ビットで表したビットパターンである圧縮係数データを出力する。たとえば、上記のように、ｎ個のビットのバイアス係数ｂ１〜ｂｎが、１６３０１，６５２０，６５２０，１６３０１，１６３０１，６５２０，…，１６３０１である場合、ビットパターンは、０，１，０，０，１，…，０となる。なお、バイアス係数がとる値の種類が３か４の場合には、各バイアス係数の値は、２ビットで表される。
【０１０２】
復号部４２は、圧縮判別部４２ａ、行列復号部４２ｂを有する。
圧縮判別部４２ａは、係数行列に対する圧縮をするか否かを示すフラグが、圧縮を行うことを示す値である場合、記憶部２２に記憶されている圧縮係数データを、行列復号部４２ｂに入力する。圧縮判別部４２ａは、そのフラグが圧縮を行うことを示す値ではない場合、記憶部２２に記憶されている非圧縮の係数行列の結合係数を焼き鈍し部２４に入力する。
【０１０３】
さらに、圧縮判別部４２ａは、バイアス係数に対する圧縮をするか否かを示すフラグが、圧縮を行うことを示す値である場合、記憶部２２に記憶されている圧縮バイアス係数データを、行列復号部４２ｂに入力する。圧縮判別部４２ａは、そのフラグが圧縮を行うことを示す値ではない場合、記憶部２２に記憶されている非圧縮のバイアス係数を焼き鈍し部２４に入力する。
【０１０４】
行列復号部４２ｂは、入力された圧縮係数データから結合係数を復号する。さらに、行列復号部４２ｂは、入力された圧縮バイアス係数データからバイアス係数を復号する。たとえば、行列復号部４２ｂは、焼き鈍し部２４によるｉ番目のビットのバイアス係数ｂｉの読み出し要求時には、上記ビットパターンのｉ番目の値（上記の例では０か１）から、バイアス係数ｂｉを復号する。たとえば、ｉ番目の値が、０である場合、上記の例では、１６３０１が、復号されたバイアス係数ｂｉとなる。
【０１０５】
第１の実施の形態の最適化装置１０の圧縮部１１や復号部１３と同様に、圧縮部４１や復号部４２は、たとえば、ＡＳＩＣやＦＰＧＡなどの特定用途の電子回路で実現できる。また、圧縮部４１や復号部４２は、ＣＰＵやＤＳＰなどのプロセッサであってもよい。圧縮部４１や復号部４２がプロセッサである場合、プロセッサが、たとえば、記憶部２２に記憶されているプログラムを実行することで、上記の処理が実現される。
【０１０６】
以下、第４の実施の形態の最適化装置４０の動作例を説明する。
図１０は、第４の実施の形態の最適化装置の動作の一例の流れを示すフローチャートである。
【０１０７】
なお、係数行列を圧縮、復号する処理については、図４または図８に示した処理と同じであるので、説明を省略する。
行列解析部４１ａは、バイアス係数を受信すると（ステップＳ５０）、受信したバイアス係数を解析し（ステップＳ５１）、バイアス係数の種類が閾値以下であるか否かを判定する（ステップＳ５２）。行列解析部４１ａは、バイアス係数の種類が閾値以下であると判定した場合には、バイアス係数を、行列圧縮部４１ｂに入力する。そして、行列圧縮部４１ｂは、前述のようにバイアス係数を圧縮する（ステップＳ５３）。なお、行列解析部４１ａは、バイアス係数の種類が閾値以下であると判定した場合には、圧縮を行うことを示すフラグを復号部４２に入力する。
【０１０８】
そして、記憶部２２は、圧縮バイアス係数データを記憶する（ステップＳ５４）。
一方、行列解析部４１ａは、バイアス係数の種類が閾値より多いと判定した場合には、バイアス係数を、記憶部２２に記憶する（ステップＳ５５）。
【０１０９】
ステップＳ５４またはステップＳ５５の処理後、焼き鈍し部２４は、焼き鈍し動作に用いるバイアス係数を取得するために、記憶部２２に対して読み出しアドレスの指定を行い、バイアス係数の読み出し要求を行う（ステップＳ５６）。これにより、記憶部２２から読み出しアドレスに対応する圧縮バイアス係数データまたは非圧縮のバイアス係数が読み出される。
【０１１０】
その後、圧縮判別部４２ａは、行列解析部４１ａが出力するフラグが、バイアス係数に対する圧縮を行うことを示す値であるか否かに基づいて、バイアス係数が圧縮されているか否かを判定する（ステップＳ５７）。
【０１１１】
圧縮判別部４２ａは、バイアス係数が圧縮されていると判定した場合、圧縮バイアス係数データを、行列復号部４２ｂに入力する。そして、行列復号部４２ｂは、入力された圧縮バイアス係数データからバイアス係数を復号する（ステップＳ５８）。復号されたバイアス係数は、焼き鈍し部２４に入力される。
【０１１２】
そして、焼き鈍し部２４は、入力されたバイアス係数（及び図４または図８に示した処理により入力された結合係数）を用いて、擬似焼き鈍し動作を実行する（ステップＳ５９）。なお、圧縮判別部４２ａは、バイアス係数が圧縮されていないと判定された場合、記憶部２２から読み出された非圧縮のバイアス係数の結合係数を焼き鈍し部２４に入力し、焼き鈍し部２４はそのバイアス係数を用いて擬似焼き鈍し動作を実行する。
【０１１３】
ステップＳ５９の処理後、たとえば、焼き鈍し部２４内の図示しない制御回路は、擬似焼き鈍し動作が終了したか否かを判定する（ステップＳ６０）。たとえば、上記所定回数の繰り返し処理後が終了した場合に、擬似焼き鈍し動作が終了したと判定される。
【０１１４】
擬似焼き鈍し動作が終了していないと判定された場合、ステップＳ５６からの処理が繰り返され、擬似焼き鈍し動作が終了したと判定された場合、焼き鈍し部２４は、各ビットの値を、問題に対する解（計算結果）として出力する（ステップＳ６１）。
【０１１５】
以上のような第４の実施の形態の最適化装置４０によれば、係数行列を圧縮するとともに、バイアス係数についても圧縮して記憶部２２に記憶することで、最適化装置４０の焼き鈍し部２４の図示しないレジスタまたはメモリの記憶容量を小さくすることができる。
【０１１６】
以上、実施の形態に基づき、本発明の最適化装置及びその制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【０１１７】
１０  最適化装置
１１  圧縮部
１２  記憶部
１３  復号部
１４  焼き鈍し部
１５ａ  対角成分
１５ｂ，１５ｃ  対称成分
【図１】
2019185602.tif 000006
【図２】
2019185602.tif 000007
【図３】
2019185602.tif 000008
【図４】
2019185602.tif 000009
【図５】
2019185602.tif 000010
【図６】
2019185602.tif 000011
【図７】
2019185602.tif 000012
【図８】
2019185602.tif 000013
【図９】
2019185602.tif 000014
【図１０】
2019185602.tif 000015