(57)【要約】【課題】要素の不一致を抑制する。【解決手段】行列分解装置は、ランク数と複数の位置情報とに基づいてスピンを変化させる試行回数を決定する。行列分解装置は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、更新後の第１の行列と更新後の第２の行列とに基づき、更新後のエネルギー関数を計算する。行列分解装置は、選択列番号情報に対応する第１の行列のスピンと、選択行番号情報に対応する第２の行列のスピンとをそれぞれ変化させる。行列分解装置は、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算する。行列分解装置は、試行回数だけ、複数の位置情報に含まれる複数の列番号情報から、１つの選択列番号情報を選択するとともに、複数の位置情報に含まれる複数の行番号情報から、１つの選択行番号情報を選択することを繰り返す。【選択図】図２
2019028896.tif 000002
【特許請求の範囲】
【請求項１】
分解対象の行列を、第１の解行列と第２の解行列とに分解する行列分解装置において、
前記分解対象の行列に基づいて、エネルギー関数を生成する関数生成部と、
温度の初期値に基づいて、アニーリングを行う温度を決定する温度決定部と、
更新後の第１の行列と更新後の第２の行列との積を、前記分解対象の行列から引いた差分の絶対値を要素とする行列において、要素が１となる複数の位置情報を抽出するとともに、ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定する評価部と、
所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第１の行列と前記更新後の第２の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第１の行列のスピンと、選択行番号情報に対応する前記第２の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列にそれぞれ更新することを繰り返し、前記更新後の第１の行列と前記更新後の第２の行列の積が前記分解対象の行列と等しい場合、前記更新後の第１の行列を前記第１の解行列とし、前記更新後の第２の行列を前記第２の解行列とする計算部と、
前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す選択部と、
を有する行列分解装置。
【請求項２】
前記選択部は、乱数に基づいて前記選択列番号情報を選択するとともに、前記乱数に基づいて前記選択行番号情報を選択することを特徴とする請求項１に記載の行列分解装置。
【請求項３】
前記選択部において、
前記乱数は、一様乱数である請求項２に記載の行列分解装置。
【請求項４】
前記選択部において、
前記乱数は、重み付き乱数である請求項２に記載の行列分解装置。
【請求項５】
前記選択部は、前記第１の行列と前記第２の行列の積と、前記分解対象の行列との差に基づいて前記選択列番号情報として選択するとともに、前記第１の行列と前記第２の行列の積と、前記分解対象の行列との差に基づき、前記選択行番号情報として選択することを特徴とする請求項１に記載の行列分解装置。
【請求項６】
前記評価部において、
前記更新後の第１の行列と前記更新後の第２の行列との積は、ブール代数による積である請求項１〜５のいずれか１項に記載の行列分解装置。
【請求項７】
前記評価部において、
前記更新後の第１の行列と前記更新後の第２の行列との積は、２の剰余系による積である請求項１〜５のいずれか１項に記載の行列分解装置。
【請求項８】
前記評価部において、
前記更新後の第１の行列と前記更新後の第２の行列との積は、行列積である請求項１〜５のいずれか１項に記載の行列分解装置。
【請求項９】
前記関数生成部は、更新前の前記第１の行列と更新前の前記第２の行列との積における非ゼロ要素の比率が、前記分解対象の行列における非ゼロ要素の比率に近似するように、前記第１の行列の初期値及び前記第２の行列の初期値を設定することを特徴とする請求項１〜８のいずれか１項に記載の行列分解装置。
【請求項１０】
前記計算部は、前記変化後のエネルギー値が前記更新後のエネルギー値よりも大きい場合、前記温度決定部により決定された前記アニーリングを行う温度を用いて乱数を発生させ、前記乱数が所定の確率値以上である場合に、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列にそれぞれ更新することを特徴とする請求項１〜９のいずれか１項に記載の行列分解装置。
【請求項１１】
分解対象の行列を、第１の解行列と第２の解行列と第３の解行列とに分解する行列分解装置において、
前記分解対象の行列に基づいて、エネルギー関数を生成する関数生成部と、
温度の初期値に基づいて、アニーリングを行う温度を決定する温度決定部と、
更新後の第１の行列と更新後の第４の行列との積を、前記分解対象の行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出するとともに、ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定する評価部と、
所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第１の行列と前記更新後の第４の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第１の行列のスピンと、選択行番号情報に対応する前記第４の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第４の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第４の行列のスピンを含む第４の行列を前記更新後の第４の行列にそれぞれ更新することを繰り返し、前記更新後の第１の行列と前記更新後の第４の行列の積が前記分解対象の行列と等しい場合、前記更新後の第１の行列を前記第１の解行列とし、前記更新後の第４の行列を第４の解行列とする計算部と、
前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す選択部と、
を有し、
前記評価部は、更新後の第２の行列と更新後の第３の行列との積を、前記第４の解行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出するとともに、前記ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
前記計算部は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第２の行列と前記更新後の第３の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第２の行列のスピンと、選択行番号情報に対応する前記第３の行列のスピンとをそれぞれ変化させ、変化後の第２の行列のスピンと変化後の第３の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列、変化後の第３の行列のスピンを含む第３の行列を前記更新後の第３の行列にそれぞれ更新することを繰り返し、前記更新後の第２の行列と前記更新後の第３の行列の積が前記第４の解行列と等しい場合、前記更新後の第２の行列を前記第２の解行列とし、前記更新後の第３の行列を第３の解行列とし、
前記選択部は、前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返すことを特徴とする行列分解装置。
【請求項１２】
分解対象の行列を、第１の解行列と第２の解行列とに分解する行列分解方法において、
前記分解対象の行列に基づいて、エネルギー関数を生成し、
温度の初期値に基づいて、アニーリングを行う温度を決定し、
更新後の第１の行列と更新後の第２の行列との積を、前記分解対象の行列から引いた差分の絶対値を要素とする行列において、要素が１となる複数の位置情報を抽出するとともに、ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第１の行列と前記更新後の第２の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第１の行列のスピンと、選択行番号情報に対応する前記第２の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列にそれぞれ更新することを繰り返し、前記更新後の第１の行列と前記更新後の第２の行列の積が前記分解対象の行列と等しい場合、前記更新後の第１の行列を前記第１の解行列とし、前記更新後の第２の行列を前記第２の解行列とし、
前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す
処理をコンピュータが実行することを特徴とする行列分解方法。
【請求項１３】
分解対象の行列を、第１の解行列と第２の解行列とに分解する行列分解方法において、
前記分解対象の行列に基づいて、エネルギー関数を生成し、
温度の初期値に基づいて、アニーリングを行う温度を決定し、
更新後の第１の行列と更新後の第４の行列との積を、前記分解対象の行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出するとともに、ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第１の行列と前記更新後の第４の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第１の行列のスピンと、選択行番号情報に対応する前記第４の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第４の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第４の行列のスピンを含む第４の行列を前記更新後の第４の行列にそれぞれ更新することを繰り返し、前記更新後の第１の行列と前記更新後の第４の行列の積が前記分解対象の行列と等しい場合、前記更新後の第１の行列を前記第１の解行列とし、前記更新後の第４の行列を第４の解行列とし、
前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す
処理を含み、
前記試行回数を決定する処理は、更新後の第２の行列と更新後の第３の行列との積を、前記第４の解行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出するとともに、前記ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
前記計算する処理は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第２の行列と前記更新後の第３の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第２の行列のスピンと、選択行番号情報に対応する前記第３の行列のスピンとをそれぞれ変化させ、変化後の第２の行列のスピンと変化後の第３の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列、変化後の第３の行列のスピンを含む第３の行列を前記更新後の第３の行列にそれぞれ更新することを繰り返し、前記更新後の第２の行列と前記更新後の第３の行列の積が前記第４の解行列と等しい場合、前記更新後の第２の行列を前記第２の解行列とし、前記更新後の第３の行列を第３の解行列とし、
前記選択することを繰り返す処理は、前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す
処理をコンピュータが実行することを特徴とする行列分解方法。
【請求項１４】
分解対象の行列を、第１の解行列と第２の解行列とに分解する行列分解プログラムにおいて、
前記分解対象の行列に基づいて、エネルギー関数を生成し、
温度の初期値に基づいて、アニーリングを行う温度を決定し、
更新後の第１の行列と更新後の第２の行列との積を、前記分解対象の行列から引いた差分の絶対値を要素とする行列において、要素が１となる複数の位置情報を抽出するとともに、ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第１の行列と前記更新後の第２の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第１の行列のスピンと、選択行番号情報に対応する前記第２の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列にそれぞれ更新することを繰り返し、前記更新後の第１の行列と前記更新後の第２の行列の積が前記分解対象の行列と等しい場合、前記更新後の第１の行列を前記第１の解行列とし、前記更新後の第２の行列を前記第２の解行列とし、
前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す
処理をコンピュータに実行させることを特徴とする行列分解プログラム。
【請求項１５】
分解対象の行列を、第１の解行列と第２の解行列とに分解する行列分解プログラムにおいて、
前記分解対象の行列に基づいて、エネルギー関数を生成し、
温度の初期値に基づいて、アニーリングを行う温度を決定し、
更新後の第１の行列と更新後の第４の行列との積を、前記分解対象の行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出するとともに、ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第１の行列と前記更新後の第４の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第１の行列のスピンと、選択行番号情報に対応する前記第４の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第４の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を前記更新後の第１の行列、変化後の第４の行列のスピンを含む第４の行列を前記更新後の第４の行列にそれぞれ更新することを繰り返し、前記更新後の第１の行列と前記更新後の第４の行列の積が前記分解対象の行列と等しい場合、前記更新後の第１の行列を前記第１の解行列とし、前記更新後の第４の行列を第４の解行列とし、
前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す
処理を含み、
前記試行回数を決定する処理は、更新後の第２の行列と更新後の第３の行列との積を、前記第４の解行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出するとともに、前記ランク数と前記複数の位置情報とに基づいてスピンを変化させる試行回数を決定し、
前記計算する処理は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、前記更新後の第２の行列と前記更新後の第３の行列とに基づき、更新後のエネルギー関数を計算するとともに、選択列番号情報に対応する前記第２の行列のスピンと、選択行番号情報に対応する前記第３の行列のスピンとをそれぞれ変化させ、変化後の第２の行列のスピンと変化後の第３の行列のスピンとを用いて変化後のエネルギー値を計算し、前記変化後のエネルギー値が前記更新後のエネルギー値よりも小さい場合、前記更新後のエネルギー値を前記変化後のエネルギー値、変化後の第２の行列のスピンを含む第２の行列を前記更新後の第２の行列、変化後の第３の行列のスピンを含む第３の行列を前記更新後の第３の行列にそれぞれ更新することを繰り返し、前記更新後の第２の行列と前記更新後の第３の行列の積が前記第４の解行列と等しい場合、前記更新後の第２の行列を前記第２の解行列とし、前記更新後の第３の行列を第３の解行列とし、
前記選択することを繰り返す処理は、前記試行回数だけ、前記複数の位置情報に含まれる複数の列番号情報から、１つの前記選択列番号情報を選択するとともに、前記複数の位置情報に含まれる複数の行番号情報から、１つの前記選択行番号情報を選択することを繰り返す
処理をコンピュータに実行させることを特徴とする行列分解プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、行列分解装置、行列分解方法及び行列分解プログラムに関する。
【背景技術】
【０００２】
要素の値がブール代数などの系を満たす非負値行列を分解するための計算に関する技術が知られている。例えば、非負値行列を分解するための計算を、バイナリ行列の分解に拡張する技術が知られている。当該技術においては、バイナリ行列の各成分を一旦連続値に変換し、その後二値に再変換する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−２３１１９７号公報
【特許文献２】特開平８−２３５１５０号公報
【非特許文献】
【０００４】
【非特許文献１】Zhongyuan  Zhang,  Tao  Li,  Chris  Ding,  and  Xiangsun  Zhang.  “Binary  Matrix  Factorization  with  applications.”  Data  Mining,  2007.  ICDM  2007.  Seventh  IEEE  International  Conference.  2007.
【非特許文献２】Daniel  D.  Lee  and  H.  Sebastian  Seung.  “Algorithms  for  Non-negative  Matrix  Factorization.”  Advances  in  Neural  Information  Processing  Systems  13  (NIPS  2000).  2000.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記技術においては、バイナリ行列の各成分の連続値への変換及び二値への再変換を伴うため、分解対象の行列と、分解した行列の積との間で、要素の不一致が生じやすい。
【０００６】
一つの側面では、要素の不一致を抑制できる行列分解装置、行列分解方法及び行列分解プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
一つの態様において、行列分解装置は、分解対象の行列を、第１の解行列と第２の解行列とに分解する。行列分解装置は、分解対象の行列に基づいて、エネルギー関数を生成する。行列分解装置は、温度の初期値に基づいて、アニーリングを行う温度を決定する。行列分解装置は、更新後の第１の行列と更新後の第２の行列との積を、分解対象の行列から引いた差分の絶対値を要素とする行列において、要素が１となる複数の位置情報を抽出する。行列分解装置は、ランク数と複数の位置情報とに基づいてスピンを変化させる試行回数を決定する。行列分解装置は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、更新後の第１の行列と更新後の第２の行列とに基づき、更新後のエネルギー関数を計算する。行列分解装置は、選択列番号情報に対応する第１の行列のスピンと、選択行番号情報に対応する第２の行列のスピンとをそれぞれ変化させる。行列分解装置は、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算する。行列分解装置は、変化後のエネルギー値が更新後のエネルギー値よりも小さい場合、更新後のエネルギー値を変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を更新後の第２の行列にそれぞれ更新することを繰り返す。行列分解装置は、更新後の第１の行列と更新後の第２の行列の積が分解対象の行列と等しい場合、更新後の第１の行列を第１の解行列とし、更新後の第２の行列を第２の解行列とする。行列分解装置は、試行回数だけ、複数の位置情報に含まれる複数の列番号情報から、１つの選択列番号情報を選択するとともに、複数の位置情報に含まれる複数の行番号情報から、１つの選択行番号情報を選択することを繰り返す。
【発明の効果】
【０００８】
一つの態様によれば、第１の解行列と第２の解行列との行列積の結果の各要素と、分解対象の元行列の要素の不一致を抑制できる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１における入出力の一例を示す図である。
【図２】図２は、実施例１における行列分解装置の一例を示す図である。
【図３Ａ】図３Ａは、実施例１における行列分解処理の一例を示すフローチャートである。
【図３Ｂ】図３Ｂは、実施例１における行列分解処理の一例を示すフローチャートである。
【図４】図４は、実施例１における行列分解処理結果の一例を示す図である。
【図５】図５は、実施例２における変更対象のスピンの一例を示す図である。
【図６】図６は、実施例２における行列分解処理の経過の一例を示す図である。
【図７】図７は、実施例２における変更スピン選択処理の一例を示すフローチャートである。
【図８】図８は、行列分解処理速度の比較の一例を示す図である。
【図９】図９は、実施例３におけるエネルギー関数生成処理の一例を示す図である。
【図１０】図１０は、実施例３における行列分解処理の経過の一例を示す図である。
【図１１】図１１は、実施例４における公開鍵及び秘密鍵の一例を示す図である。
【図１２】図１２は、実施例４における暗号解読処理の一例を示すフローチャートである。
【図１３】図１３は、実施例５における変更スピン選択処理の一例を示すフローチャートである。
【図１４】図１４は、実施例５における乱数生成処理の一例を示すフローチャートである。
【図１５】図１５は、実施例５における乱数生成結果の一例を示す図である。
【図１６】図１６は、実施例５における温度算出処理の一例を示すフローチャートである。
【図１７】図１７は、行列分解装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する行列分解装置、行列分解方法及び行列分解プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、以下に示す各実施例は、矛盾を起こさない範囲で適宜組み合わせても良い。
【実施例１】
【００１１】
本実施例における行列分解装置１００は、図１に示すように、元行列であるｍ×n行列Ｖを、例えばシミュレーテッド・アニーリング処理により、ｍ×ｋ行列Ｗとｋ×ｎ行列Ｈとに分解する。図１は、実施例１における入出力の一例を示す図である。図１に示すように、本実施例における行列分解装置１００は、ｍ×n行列Ｖと、ランク数ｋとの入力１０００を受け付ける。行列分解装置１００は、入力されたｍ行ｎ列の行列Ｖを分解し、ｍ行ｋ列の行列Ｗ及びｋ行ｎ列の行列Ｈの２つの解行列２０００を出力する。なお、行列Ｖは分解対象の行列の一例であり、行列Ｗは第１の解行列の一例であり、行列Ｈは第２の解行列の一例である。また、第１の解行列及び第２の解行列を区別せずに表現する場合に、単に「解行列」と表記する場合がある。なお、本実施例における元行列及び解行列は、例えば要素の値がブール代数系を満たす非負行列である。
【００１２】
本実施例における行列分解装置１００は、行列Ｗ及び行列Ｈを出力するにあたり、仮の値である「スピン」を含む第１の行列及び第２の行列を設定する。なお、以下において、スピンを含む行列を「候補行列」と記載する場合がある。行列分解装置１００は、２つの行列の積を算出し、２つの行列の積と元行列である行列Ｖとの差分を算出する。行列分解装置１００は、２つの行列の積と元行列とが一致しない場合、２つの行列に含まれるスピンをそれぞれ変更して、２つの行列の積の算出と、元行列である行列Ｖとの比較とを繰り返す。つまり、行列分解装置は、解行列の積が元行列と一致しない要素の数に基づいて、行列であるスピンを変化させる試行回数を決定し、各スピンの変化を試行回数繰り返してエネルギー値を判定するので、要素の不一致を抑制できる。
【００１３】
次に、本実施例における行列分解装置の一例について、図２を用いて説明する。図２は、実施例１における行列分解装置の一例を示す図である。図２に示すように、本実施例における行列分解装置１００は、記憶部１２０と、制御部１３０とを有する。なお、本実施例における行列分解装置１００は、例えば図示しない通信部を通じて、図示しない端末装置から要求を受け付けて処理を行うサーバコンピュータ等のコンピュータであるが、これに限られない。行列分解装置１００は、例えばパーソナルコンピュータ等のスタンドアロン型コンピュータであってもよく、またスマートフォンやタブレット、ノート型コンピュータなどの携帯可能なコンピュータであってもよい。
【００１４】
記憶部１２０は、例えば制御部１３０が実行するプログラムなどの各種データなどを記憶する。また、記憶部１２０は、スピン記憶部１２１を有する。記憶部１２０は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリなどの半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）などの記憶装置に対応する。
【００１５】
スピン記憶部１２１は、スピンに関する情報を記憶する。スピン記憶部１２１は、例えば２つの候補行列に含まれるスピンを、行列の形式で記憶する。スピン記憶部１２１に記憶される情報は、後に説明する初期設定部１３２により設定され、後に説明するスピン変更部１３４により更新される。
【００１６】
次に、制御部１３０は、行列分解装置１００の全体的な処理を司る処理部である。制御部１３０は、例えば、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等によって、内部の記憶装置に記憶されているプログラムがＲＡＭを作業領域として実行されることにより実現される。また、制御部１３０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路により実現されるようにしてもよい。
【００１７】
制御部１３０は、入出力部１３１、初期設定部１３２、スピン抽出部１３３、スピン変更部１３４、温度制御部１３５、エネルギー算出部１３６及び判定部１３７を有する。なお、入出力部１３１、初期設定部１３２、スピン抽出部１３３、スピン変更部１３４、温度制御部１３５、エネルギー算出部１３６及び判定部１３７は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。
【００１８】
入出力部１３１は、元行列Ｖ等の入力を受け付けて、解行列Ｗ及びＨ等を出力する。例えば、入出力部１３１は、図示しない通信部又は入力装置等を通じて、元行列である行列Ｖ及びランク数ｋの入力を受け付け、初期設定部１３２に出力する。また、入出力部１３１は、判定部１３７から出力される解行列を、図示しない通信部又は入力装置等を通じて出力する。
【００１９】
初期設定部１３２は、行列分解処理を行うための各種情報の設定を行う。初期設定部１３２は、入出力部１３１から行列Ｖ及びスピン数ｋの入力を受けると、行列Ｖの大きさｍ及びｎを特定して、ｍ行ｋ列の行列Ｗ及びｋ行ｎ列の行列Ｈの要素となるスピンの初期値Ｗ０及びＨ０を設定し、スピン記憶部１２１に記憶する。また、初期設定部１３２は、シミュレーテッド・アニーリング処理に用いる温度の初期値Ｔ０、及びシミュレーテッド・アニーリング処理を繰り返すイテレーション回数の最大値である総イテレーション回数ｉｔｅｒｍａｘを設定する。さらに、初期設定部１３２は、エネルギー関数Ｅを生成する。なお、初期設定部１３２は、関数生成部の一例である。
【００２０】
初期設定部１３２は、行列Ｗの初期値Ｗ０として、例えば全てのスピンを「０」又は「１」に設定する。同様に、初期設定部１３２は、行列Ｈの初期値Ｈ０として、例えば全てのスピンを「０」又は「１」に設定する。
【００２１】
初期設定部１３２は、例えば温度の初期値Ｔ０として、１０＾９などの絶対温度を設定する。初期設定部１３２は、イテレーション回数の最大値ｉｔｅｒｍａｘとして、例えば１００万回〜１０億回などの回数を設定する。また、初期設定部１３２は、例えば以下の式（１）に示すようなエネルギー関数Ｅを設定する。
【００２２】
【数１】
2019028896.tif 000003
【００２３】
なお、式（１）において、「Ｖij」は行列Ｖのｉ行ｊ列の要素を示し、「°」はブール代数での行列の演算を示す。すなわち、「（Ｗ°Ｈ）ij」は、行列Ｗと行列Ｈとの行列積のｉ行ｊ列の要素を示す。
【００２４】
ところで、ブール代数系を満たす要素Ｖijの演算においては、Ｖij＾２＝Ｖijとなる。すなわち、要素を２乗した値が元の要素と等しいため、式（１）は以下の式（２）のように変形することができる。
【００２５】
【数２】
2019028896.tif 000004
【００２６】
なお、式（１）及び式（２）は、行列Ｗと行列Ｈとの積と、元行列Ｖとの差分の絶対値を要素とする行列を示す。すなわち、本実施例においては、エネルギー関数Ｅとして、行列Ｗと行列Ｈとの積と、元行列Ｖとの差分の絶対値を要素とする行列を用いる。
【００２７】
次に、スピン抽出部１３３は、行列分解処理において、変更対象とするスピンを選択するとともに、スピンの変更を繰り返す回数である試行回数を設定する。なお、スピン抽出部１３３は、選択部の一例である。
【００２８】
スピン抽出部１３３は、例えば候補行列の積「Ｗ°Ｈ」と元行列Ｖとの差分行列の要素「ｄｅｌｔａＶ」を検出する。スピン抽出部１３３は、ｄｅｌｔａＶが「１」となる要素の位置Ｎを抽出する。スピン抽出部１３３は、抽出したＮの行番号Ｎｗ及び列番号Ｎｈをスピン変更部１３４に出力する。
【００２９】
なお、スピン抽出部１３３は、候補抽出個数として、例えば任意の値「ｐ」を設定し、要素の位置Ｎがｐ個を超える場合、要素の位置Ｎのうちｐ個を選択して抽出する。また、スピン抽出部１３３は、要素の位置Ｎの数がｐ個以下である場合は、全ての要素の位置Ｎを選択して抽出する。
【００３０】
また、スピン抽出部１３３は、例えば設定した「ｐ」に基づいて、試行回数Ｎｄを設定し、スピン変更部１３４に出力する。試行回数Ｎｄは、「２×ｋ×ｐ」により算出される。
【００３１】
スピン抽出部１３３は、抽出したＮの行番号Ｎｗ及び列番号Ｎｈをスピン変更部１３４に出力する。例えば、スピン抽出部１３３は、抽出したＮの行番号Ｎｗ１乃至Ｎｗｐ、及びＮの列番号Ｎｈ１乃至Ｎｈｐをスピン変更部１３４に出力する。スピン抽出部１３３は、Ｎｗ及びＮｈを選択して出力する処理をＮｄ回繰り返す。
【００３２】
スピン変更部１３４は、変更対象とするスピンを特定して、スピンを変更する。スピン変更部１３４は、例えばスピン抽出部１３３からＮｗ１乃至Ｎｗｐ及びＮｈ１乃至Ｎｈｐの出力を受けると、いずれかの位置Ｎｗｘ及びＮｈｘを選択する。スピン変更部１３４は、例えば一様乱数を用いて、変更対象とするスピンの行及び列を選択する。スピン変更部１３４は、選択した位置の要素の値を変更する。スピン変更部１３４は、例えば選択した位置の要素の値が「０」である場合は「１」に変更し、また値が「１」である場合は「０」に変更する。そして、スピン変更部１３４は、変更後のスピンを含む候補行列Ｗ及びＨを、エネルギー算出部１３６に出力する。
【００３３】
温度制御部１３５は、シミュレーテッド・アニーリング処理に用いる温度を算出する。温度制御部１３５は、初期設定部１３２から出力を受けた温度の初期値Ｔ０を用いて、温度を算出して、判定部１３７に出力する。温度制御部１３５は、例えば以下の式（３）を用いて温度を算出する。なお、温度制御部１３５は、温度決定部の一例である。
【００３４】
【数３】
2019028896.tif 000005
【００３５】
エネルギー算出部１３６は、エネルギー関数Ｅを用いて、エネルギーを算出する。エネルギー算出部１３６は、初期設定部１３２から候補行列のスピンの初期値Ｗ０及びＨ０の出力を受けると、エネルギー初期値Ｅｐｒｅｖを算出する。エネルギー算出部１３６は、式（２）に示すようなエネルギー関数ＥにＷ０及びＨ０を代入することにより、エネルギー初期値Ｅｐｒｅｖを算出する。そして、エネルギー算出部１３６は、算出したＥｐｒｅｖを、判定部１３７に出力する。
【００３６】
また、エネルギー算出部１３６は、初期設定部１３２から更新後の候補行列のスピンの出力を受けると、エネルギーＥａｆｔｅｒを算出する。エネルギー算出部１３６は、式（２）に示すようなエネルギー関数Ｅに更新後の候補行列のスピンを代入することにより、エネルギーＥａｆｔｅｒを算出する。そして、エネルギー算出部１３６は、算出したＥａｆｔｅｒを、判定部１３７に出力する。
【００３７】
判定部１３７は、更新後の候補行列のスピンのエネルギーＥａｆｔｅｒと、更新前の候補行列のスピンのエネルギー初期値Ｅｐｒｅｖとを比較する。なお、スピン変更部１３４、エネルギー算出部１３６及び判定部１３７は、計算部の一例である。
【００３８】
判定部１３７は、ＥａｆｔｅｒがＥｐｒｅｖよりも小さいと判定した場合、ＥｐｒｅｖにＥａｆｔｅｒを代入する。一方、判定部１３７は、ＥａｆｔｅｒがＥｐｒｅｖ以上であると判定した場合、例えば以下の式（４）を用いて確率Ｐを算出する。
【００３９】
【数４】
2019028896.tif 000006
【００４０】
そして、判定部１３７は、０乃至１の間で一様乱数Ｍを発生させ、乱数Ｍと確率Ｐとを比較する。判定部１３７は、乱数Ｍが確率Ｐよりも大きい場合、ＥｐｒｅｖにＥａｆｔｅｒを代入する。一方、判定部１３７は、乱数Ｍが確率Ｐ以下である場合、スピンＷｍｉｎ及びＨｍｉｎの変更を棄却する。
【００４１】
次に、判定部１３７は、スピンＷｍｉｎとＨｍｉｎとの積ＷｍｉｎＨｍｉｎが、元行列Ｖと一致するか否かを判定する。例えば、判定部１３７は、ＷｍｉｎとＨｍｉｎとのブール代数による積Ｗｍｉｎ°Ｈｍｉｎと元行列Ｖとを比較する。判定部１３７は、ＶとＷｍｉｎ°Ｈｍｉｎとが一致する場合、ＷｍｉｎとＨｍｉｎとを解行列として入出力部１３１に出力する。
【００４２】
一方、判定部１３７は、ＶとＷｍｉｎ°Ｈｍｉｎとが一致しない場合、スピン選択回数が試行回数Ｎｄに到達したか否かを判定する。判定部１３７は、スピン選択回数が試行回数Ｎｄに満たないと判定した場合、スピン抽出部１３３にスピンを変更する処理を繰り返させる。
【００４３】
判定部１３７は、スピン選択回数が試行回数Ｎｄに到達した場合、イテレーション回数ｉｔｅｒをインクリメントし、ｉｔｅｒが総イテレーション回数ｉｔｅｒｍａｘに到達したか否かを判定する。判定部１３７は、ｉｔｅｒが総イテレーション回数ｉｔｅｒｍａｘに満たないと判定した場合、温度制御部１３５に温度Ｔを算出する処理を繰り返させる。一方、判定部１３７は、ｉｔｅｒが総イテレーション回数ｉｔｅｒｍａｘに到達したと判定した場合、処理を終了する。なお、処理を終了する際に、解行列Ｗ及びＨに近似する行列として、Ｗｍｉｎ及びＨｍｉｎを出力するような構成であってもよい。
【００４４】
［処理の流れ］
次に、本実施例における処理について、図３Ａ及び図３Ｂを用いて説明する。図３Ａは、実施例１における行列分解処理の一例を示すフローチャートである。図３Ａに示すように、行列分解装置１００の入出力部１３１は、例えば図示しない通信部又は入力装置等を通じて、行列Ｖの入力を受け付けるまで待機する（Ｓ１００：Ｎｏ）。
【００４５】
入出力部１３１は、行列Ｖの入力を受け付けたと判定した場合（Ｓ１００：Ｙｅｓ）、行列Ｖを初期設定部１３２に出力する。初期設定部１３２は、行列Ｖの大きさｍ及びｎを特定する（Ｓ１０１）。
【００４６】
次に、入出力部１３１は、ランク数ｋの入力を受け付け、初期設定部１３２に出力する（Ｓ１０２）。初期設定部１３２は、温度の初期値Ｔ０を設定し、温度制御部１３５に出力する（Ｓ１０３）。次に、初期設定部１３２は、総イテレーション回数ｉｔｅｒｍａｘを設定し、判定部１３７に出力する（Ｓ１０４）。
【００４７】
また、初期設定部１３２は、エネルギー関数Ｅを生成する（Ｓ１０５）。そして、初期設定部１３２は、スピンの初期値Ｗ０及びＨ０を設定し、エネルギー関数Ｅ及び行列Ｖとともにスピン抽出部１３３及びエネルギー算出部１３６に出力する（Ｓ１１０）。
【００４８】
エネルギー算出部１３６は、スピンの初期値Ｗ０及びＨ０と、行列Ｖと、エネルギー関数Ｅとを用いて、エネルギーの初期値Ｅｐｒｅｖを算出する（Ｓ１１１）。次に、温度制御部１３５は、Ｔ０とイテレーション回数ｉｔｅｒとを用いて、温度Ｔを算出する（Ｓ１１２）。
【００４９】
次に、スピン抽出部１３３は、候補抽出個数ｐを設定する（Ｓ１１３）。そして、スピン抽出部１３３は、候補行列の積「Ｗ°Ｈ」と元行列Ｖとの差分行列の要素「ｄｅｌｔａＶ」を検出する。スピン抽出部１３３は、ｄｅｌｔａＶが「１」となる要素の位置Ｎを抽出する（Ｓ１１４）。
【００５０】
そして、スピン抽出部１３３は、要素の位置Ｎの数がｐ個未満であるか否かを判定する（Ｓ１２０）。スピン抽出部１３３は、要素の位置Ｎの数がｐ個未満であると判定した場合（Ｓ１２０：Ｙｅｓ）、全てのＮを抽出し（Ｓ１２１）、Ｓ１３０に移行する。一方、スピン抽出部１３３は、要素の位置Ｎの数がｐ個以上であると判定した場合（Ｓ１２０：Ｎｏ）、要素の位置Ｎのうちｐ個を抽出し（Ｓ１２２）、Ｓ１３０に移行する。
【００５１】
そして、スピン抽出部１３３は、抽出したＮの行番号Ｎｗ及び列番号Ｎｈをスピン変更部１３４に出力する（Ｓ１３０）。また、スピン抽出部１３３は、例えば設定した候補抽出個数ｐに基づいて、試行回数Ｎｄを設定し、スピン変更部１３４に出力する（Ｓ１３１）。
【００５２】
次に、スピン変更部１３４は、変更対象とするスピンの行及び列を選択する（Ｓ１３２）。例えば、スピン変更部１３４は、一様乱数を用いて、変更対象とするスピンの行及び列を選択する。スピン変更部１３４は、選択した位置の要素の値を変更する（Ｓ１３３）。そして、エネルギー算出部１３６は、エネルギーＥａｆｔｅｒを算出し（Ｓ１３４）、端子Ａを通じてＳ１４０に移行する。
【００５３】
図３Ｂは、実施例１における行列分解処理の一例を示すフローチャートである。図３Ｂに示すように、判定部１３７は、ＥａｆｔｅｒがＥｐｒｅｖよりも小さいか否かを判定する（Ｓ１４０）。判定部１３７は、ＥａｆｔｅｒがＥｐｒｅｖよりも小さいと判定した場合（Ｓ１４０：Ｙｅｓ）、ＥｐｒｅｖにＥａｆｔｅｒを代入し（Ｓ１４１）、Ｓ１５０に移行する。
【００５４】
一方、判定部１３７は、ＥａｆｔｅｒがＥｐｒｅｖ以上であると判定した場合（Ｓ１４０：Ｎｏ）、確率Ｐを算出する（Ｓ１４２）。そして、判定部１３７は、乱数Ｍを発生させ（Ｓ１４３）、乱数Ｍが確率Ｐよりも大きいか否かを判定する（Ｓ１４４）。
【００５５】
判定部１３７は、乱数Ｍが確率Ｐよりも大きいと判定した場合（Ｓ１４４：Ｙｅｓ）、Ｓ１４１に移行する。一方、判定部１３７は、乱数Ｍが確率Ｐ以下であると判定した場合（Ｓ１４４：Ｎｏ）、スピンＷｍｉｎ及びＨｍｉｎの変更を棄却し（Ｓ１４５）、Ｓ１５０に移行する。
【００５６】
次に、判定部１３７は、スピンＷｍｉｎとＨｍｉｎとの積ＷｍｉｎＨｍｉｎが、元行列Ｖと一致するか否かを判定する（Ｓ１５０）。判定部１３７は、元行列Ｖと積ＷｍｉｎＨｍｉｎとが一致すると判定した場合（Ｓ１５０：Ｙｅｓ）、Ｗｍｉｎ及びＨｍｉｎを入出力部１３１に出力する。そして、入出力部１３１は、解行列としてＷｍｉｎ及びＨｍｉｎを出力し（Ｓ１５１）、処理を終了する。
【００５７】
一方、判定部１３７は、元行列Ｖと積ＷｍｉｎＨｍｉｎとが一致しないと判定した場合（Ｓ１５０：Ｎｏ）、スピン選択回数が試行回数Ｎｄに到達したか否かを判定する（Ｓ１６０）。判定部１３７は、スピン選択回数が試行回数Ｎｄに到達していないと判定した場合（Ｓ１６０：Ｎｏ）、端子Ｂを通じてＳ１１３に戻り、処理を繰り返す。
【００５８】
判定部１３７は、スピン選択回数が試行回数Ｎｄに到達したと判定した場合（Ｓ１６０：Ｙｅｓ）、イテレーション回数ｉｔｅｒを１インクリメントする（Ｓ１６１）。そして、判定部１３７は、イテレーション回数ｉｔｅｒが、総イテレーション回数ｉｔｅｒｍａｘに到達したか否かを判定する（Ｓ１７０）。
【００５９】
判定部１３７は、スピン選択回数が試行回数Ｎｄに到達していないと判定した場合（Ｓ１７０：Ｎｏ）、端子Ｃを通じてＳ１１２に戻り、処理を繰り返す。一方、判定部１３７は、スピン選択回数が試行回数Ｎｄに到達したと判定した場合（Ｓ１７０：Ｙｅｓ）、処理を終了する。
【００６０】
［効果］
以上説明したように、本実施例における行列分解装置は、分解対象の行列を、第１の解行列と第２の解行列とに分解する。行列分解装置は、分解対象の行列に基づいて、エネルギー関数を生成する。行列分解装置は、温度の初期値に基づいて、アニーリングを行う温度を決定する。行列分解装置は、更新後の第１の行列と更新後の第２の行列との積を、分解対象の行列から引いた差分の絶対値を要素とする行列において、要素が１となる複数の位置情報を抽出する。行列分解装置は、ランク数と複数の位置情報とに基づいてスピンを変化させる試行回数を決定する。行列分解装置は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、更新後の第１の行列と更新後の第２の行列とに基づき、更新後のエネルギー関数を計算する。行列分解装置は、選択列番号情報に対応する第１の行列のスピンと、選択行番号情報に対応する第２の行列のスピンとをそれぞれ変化させる。行列分解装置は、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算する。行列分解装置は、変化後のエネルギー値が更新後のエネルギー値よりも小さい場合、更新後のエネルギー値を変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を更新後の第２の行列にそれぞれ更新することを繰り返す。行列分解装置は、更新後の第１の行列と更新後の第２の行列の積が分解対象の行列と等しい場合、更新後の第１の行列を第１の解行列とし、更新後の第２の行列を第２の解行列とする。行列分解装置は、試行回数だけ、複数の位置情報に含まれる複数の列番号情報から、１つの選択列番号情報を選択するとともに、複数の位置情報に含まれる複数の行番号情報から、１つの選択行番号情報を選択することを繰り返す。これにより、要素の不一致を抑制できる。
【００６１】
また、本実施例における行列分解装置は、乱数に基づいて選択列番号情報を選択するとともに、乱数に基づいて選択行番号情報を選択する。さらに、本実施例における行列分解装置は、変化後のエネルギー値が更新後のエネルギー値よりも大きい場合、温度決定部により決定されたアニーリングを行う温度を用いて乱数を発生させる。行列分解装置は、乱数が所定の確率値以上である場合に、更新後のエネルギー値を変化後のエネルギー値に更新する。また、行列分解装置は、乱数が所定の確率値以上である場合に、変化後の第１の行列のスピンを含む第１の行列を更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を更新後の第２の行列にそれぞれ更新する。これにより、局所的最適解に陥ることなく、理論上は大域的最適解を算出できる。
【００６２】
本実施例における行列分解装置１００を用いる効果について、図４を用いて説明する。図４は、実施例１における行列分解処理結果の一例を示す図である。図４は、背景技術における行列分解処理結果４０００の一例と、本実施例における行列分解処理結果５０００の一例とを示す。図４において、行列Ｖ’は、候補行列Ｗと候補行列Ｈとの積を示す。行列Ｖ’の要素のうち、網掛けされた要素は、行列Ｖと行列Ｖ’との間で不一致が生じた要素を示す。
【００６３】
図４に示すように、背景技術における行列分解処理結果４０００においては、６つの要素において不一致が生じている。一方、本実施例における行列分解処理結果５０００においては、不一致が生じた要素は３つに留まる。このように、本実施例においては、行列分解処理における要素の不一致を抑制できる。
【実施例２】
【００６４】
実施例１に示すようなシミュレーテッド・アニーリング処理を用いた行列分解処理は、局所的最適解に陥ることなく、理論上は大域的最適解を算出できるという利点がある一方、計算量が膨大になる場合がある。そこで、本実施例においては、計算量を削減できる行列分解処理について説明する。
【００６５】
本実施例における行列分解装置２００は、変更対象とするスピンを、乱数に基づくのではなく、分解対象の行列と、分解した行列の積との差に基づいて決定する。なお、以下において、変更対象とするスピンを、単に「変更スピン」と表記する場合がある。また、行列分解装置２００は、図２に示す行列分解装置１００と同様の構成により実現できるため、詳細な図示は省略する。
【００６６】
本実施例における変更対象とするスピンの選択について、図５を用いて説明する。図５は、実施例２における変更対象のスピンの一例を示す図である。図５において、要素３００１は、候補行列の積「Ｗ°Ｈ」と元行列Ｖとの差分行列の要素「ｄｅｌｔａＶ」のうち、差が発生している要素、例えばｄｅｌｔａＶ＝１である要素（ｎＷ，ｎＨ）を示す。この場合において、本実施例における図示しない行列分解装置２００は、要素３００１におけるｄｅｌｔａＶを０とするために、当該要素に関係するスピンを変化させる。
【００６７】
例えば、本実施例における行列分解装置２００は、図５に示すように、要素３００１に関係する行（ｎＷ）に関する行番号３０１１を、選択行番号として特定する。同様に、本実施例における行列分解装置２００は、要素３００１に関係する列（ｎＨ）に関する列番号３０２１を、選択列番号として特定する。このように、本実施例における行列分解装置２００は、例えばｄｅｌｔａＶ＝１である要素に基づいて、選択行番号情報及び選択列番号情報を選択する。これにより、差が発生していない、例えばｄｅｌｔａＶ＝０である要素に関係するスピンの変化をさせなくなるため、計算回数を削減できる。
【００６８】
また、図５においては、例えばｄｅｌｔａＶ＝１である要素が１つである場合について説明したが、例えば複数の要素においてｄｅｌｔａＶ＝１である場合、ｄｅｌｔａＶ＝１である要素の個数に応じて、選択行番号情報及び選択列番号情報を選択してもよい。図６は、実施例２における行列分解処理の経過の一例を示す図である。図６は、各行及び各列における、例えばｄｅｌｔａＶ＝１である要素の数を、ヒストグラム化して示したものである。図６において、網掛けされた要素３１０１は、例えばｄｅｌｔａＶ＝１である要素を示す。また、数字３１１１は、各行におけるｄｅｌｔａＶ＝１である要素の数を示す。同様に、数字３１２１は、各列におけるｄｅｌｔａＶ＝１である要素の数を示す。
【００６９】
本実施例において、行列分解装置２００は、各行のうち、ｄｅｌｔａＶ＝１である要素の数が多い上位ｐ１個の行を選択する。図６においては、例えばｐ１＝１である場合において、ｄｅｌｔａＶ＝１である要素の数が最も多い行３１１２が選択されることを示す。同様に、本実施例において、行列分解装置２００は、各列のうち、ｄｅｌｔａＶ＝１である要素の数が多い上位ｐ２個の列を選択する。図６においては、例えばｐ２＝１である場合において、ｄｅｌｔａＶ＝１である要素の数が最も多い列３１２２が選択されることを示す。
【００７０】
このように、本実施例において、行列分解装置２００は、ｄｅｌｔａＶ＝１である要素が多い行及び列のスピンを変更対象として選択する。これにより、差が小さい、例えばｄｅｌｔａＶ＝１である要素が少ない行及び列に関係するスピンの変化をさせなくなるため、計算回数を削減できる。
【００７１】
［処理の流れ］
次に、本実施例における処理について、図７を用いて説明する。図７は、実施例２における変更スピン選択処理の一例を示すフローチャートである。なお、図７は、図３ＡのＳ１３２における処理の詳細を示すものである。
【００７２】
図７に示すように、本実施例における行列分解装置２００は、図６に示すような、各行におけるｄｅｌｔａＶ＝１である要素の数のヒストグラムを生成する（Ｓ２００）。次に、行列分解装置２００は、ｄｅｌｔａＶ＝１となる要素の数が多い順に、ｐ１個の行を選択する（Ｓ２０１）。
【００７３】
同様に、行列分解装置２００は、各列におけるｄｅｌｔａＶ＝１である要素の数のヒストグラムを生成する（Ｓ２０２）。次に、行列分解装置２００は、ｄｅｌｔａＶ＝１となる要素の数が多い順に、ｐ２個の列を選択する（Ｓ２０３）。
【００７４】
［効果］
以上説明したように、本実施例における行列分解装置は、第１の行列と第２の行列の積と、分解対象の行列との差に基づいて選択列番号情報として選択するとともに、第１の行列と第２の行列の積と、分解対象の行列との差に基づいて選択行番号情報として選択する。これにより、計算量を削減できる。
【００７５】
本実施例における行列分解処理の効果について、図８を用いて説明する。図８は、行列分解処理速度の比較の一例を示す図である。図８は、エネルギーを縦軸とし、イテレーション回数を横軸として、シミュレーテッド・アニーリング処理におけるエネルギーの変化をプロットしたグラフを示す。
【００７６】
図８において、グラフ３３０１は、変更するスピンを一様乱数を用いて選択した場合におけるエネルギーの変化を示し、グラフ３３０２は、変更するスピンを、ｄｅｌｔａＶ＝１となる要素に基づいて選択した場合におけるエネルギーの変化を示す。図８に示すように、ｄｅｌｔａＶ＝１となる要素に基づいて変更するスピンを選択する場合、一様乱数を用いる場合と比べて、少ない計算回数でエネルギーを低下させることができる。
【実施例３】
【００７７】
上記実施例においては、ブール代数による積である第１の行列と第２の行列との積を算出する構成について説明したが、行列分解装置の実施の形態はこれに限られず、例えば各行列の要素の値が２の剰余系などの有限体の系を満たす場合にも適用できる。また、行列分解装置は、各行列の要素の値が離散値であり、整数の系を満たす場合にも適用することができる。本実施例においては、行列分解装置３００が、ブール代数系を満たさないような行列を分解する構成について説明する。なお、行列分解装置３００は、図２に示す行列分解装置１００と同様の構成により実現できるため、詳細な図示は省略する。
【００７８】
行列の要素の値が異なる場合、例えば図３ＡのＳ１０５に示すエネルギー関数Ｅを生成する処理も、行列の要素の値に応じて異なる。図９は、実施例３におけるエネルギー関数生成処理の一例を示す図である。例えば、実施例１に示すように、行列の要素の値がブール代数系を満たす場合、Ｓ１０５ａに示すように、式（１）によりエネルギー関数Ｅが設定される。
【００７９】
一方、例えば行列の要素の値が２の剰余系を満たす場合、ブール代数系と同様に、Ｖij＾２＝Ｖijとなるとともに、Ｖij×２＝０となる。そこで、行列の要素の値が２の剰余系を満たす場合、Ｓ１０５ｂに示すような式によりエネルギー関数Ｅが設定される。
【００８０】
また、例えば行列の要素の値が離散値であり、整数の系を満たす場合、Ｖijの下限算及び乗算は整数となる。この場合、Ｓ１０５ｃに示すような式によりエネルギー関数Ｅが設定される。
【００８１】
また、行列の要素の値が２の剰余系を満たす場合や、整数の系を満たす場合においても、実施例２に示すように、第１の行列と第２の行列の積と、分解対象の行列との差に基づいて選択対象の行及び列を選択してもよい。図１０は、実施例３における行列分解処理の経過の一例を示す図である。図１０は、整数の系を満たす行列を分解した場合において、各行及び各列の要素のｄｅｌｔａＶの累計を、ヒストグラム化して示したものである。図１０においては、ｄｅｌｔａＶの値は０又は１だけではなく整数となるので、例えば要素３２０１に示すように、ｄｅｌｔａＶの値を各要素に示す。
【００８２】
本実施例においても、行列分解装置３００は、各行のうち、ｄｅｌｔａＶの値の累計が多い上位ｐ１個の行を選択する。図１０においては、例えばｐ１＝１である場合において、ｄｅｌｔａＶの値の累計が「１４」と最も多い行３２１２が選択されることを示す。同様に、本実施例において、行列分解装置３００は、各列のうち、ｄｅｌｔａＶの値の累計が多い上位ｐ２個の列を選択する。図１０においては、例えばｐ２＝１である場合において、ｄｅｌｔａＶの値の累計が「１８」と最も多い列３２２２が選択されることを示す。
【００８３】
なお、要素の値がブール代数系を満たす場合、又は２の剰余系を満たす場合においては、スピンＷ又はＨを変更する際、元の値が「１」であれば「０」に変更し、元の値が「０」であれば「１」に変更する。一方、要素の値が整数の系を満たす場合は、スピンＷを変更する際、Ｗが取りうる値の一様乱数を発生させ、変更前のスピンＷｐｒｅｖとは一致しない値を採用するようにしてもよい。同様に、要素の値が整数の系を満たす場合、スピンＨを変更する際、Ｈが取りうる値の一様乱数を発生させ、変更前のスピンＨｐｒｅｖとは一致しない値を採用するようにしてもよい。
【００８４】
［効果］
以上説明したように、本実施例において、更新後の第１の行列と更新後の第２の行列との積は、例えばブール代数による積であるが、これに限られず、２の剰余系による積としてもよく、また行列積としてもよい。これにより、要素の値がブール代数系を満たさないような行列を分解する際においても、要素の不一致を抑制できる。
【実施例４】
【００８５】
ところで、要素の値が有限体の系を満たす離散値の行列の分解が困難であることに着目して、例えばマクエリス暗号のように、分解元の行列を公開鍵、分解後の行列を秘密鍵とする暗号技術が用いられている。上記の行列分解装置を、分解元の行列を公開鍵、分解後の行列を秘密鍵とする暗号の解読に用いてもよい。
【００８６】
本実施例における行列分解装置６００は、図１１に示すような公開鍵の行列を分解することにより、秘密鍵の行列を特定する。なお、行列分解装置６００は、図２に示す行列分解装置１００と同様の構成により実現できるため、詳細な図示は省略する。図１１は、実施例４における公開鍵及び秘密鍵の一例を示す図である。図１１において、公開鍵であるｋ行ｎ列行列Ｇ’は、秘密鍵であるｋ行ｋ列行列Ｓとｋ行ｎ列行列Ｇとを乗じて、さらに秘密鍵であるｎ行ｎ列行列Ｐを乗じた行列である。本実施例における図示しない行列分解装置６００は、公開鍵Ｇ’から秘密鍵Ｇ、Ｓ及びＰを算出する。
【００８７】
まず、行列分解装置６００は、分解対象の行列Ｇ’を、行列Ｓと、行列Ｇ及び行列Ｐの積である行列Ｚとに分解する。次に、行列分解装置６００は、行列Ｚを、行列Ｇと行列Ｐとに分解する。なお、行列Ｓは第１の解行列の一例であり、行列Ｇは第２の解行列の一例であり、行列Ｐは第３の解行列の一例である。また、行列Ｚは、第４の解行列の一例である。
【００８８】
［処理の流れ］
次に、本実施例における処理について、図１２を用いて説明する。図１２は、実施例４における暗号解読処理の一例を示すフローチャートである。図１２に示すように、本実施例における行列分解装置６００は、例えば図示しない通信部又は入力装置等を通じて、ｋ行ｎ列の行列Ｇ’の入力を受け付けるまで待機する（Ｓ４００：Ｎｏ）。
【００８９】
行列分解装置６００は、行列Ｇ’の入力を受け付けたと判定した場合（Ｓ４００：Ｙｅｓ）、行列Ｇ’を、Ｇ’＝ＳＺを満たすｋ行ｋ列行列Ｓと、ｋ行ｎ列行列Ｚとに分解する（Ｓ４１０）。この際、行列分解装置６００は、図３Ａ及び図３Ｂに示すＳ１０３乃至Ｓ１７０の処理を繰り返すことにより、解行列Ｓ及びＺを出力する。
【００９０】
次に、行列分解装置６００は、行列Ｚを、Ｚ＝ＧＰを満たすｋ行ｎ列行列Ｇと、ｎ行ｎ列行列Ｐとに分解する（Ｓ４２０）。この際、行列分解装置６００は、図３Ａ及び図３Ｂに示すＳ１０３乃至Ｓ１７０の処理を繰り返すことにより、解行列Ｇ及びＰを出力する。
【００９１】
［効果］
以上説明したように、本実施例において、行列分解装置は、分解対象の行列を、第１の解行列と第２の解行列と第３の解行列とに分解する。行列分解装置は、分解対象の行列に基づいて、エネルギー関数を生成する。行列分解装置は、温度の初期値に基づいて、アニーリングを行う温度を決定する。行列分解装置は、更新後の第１の行列と更新後の第４の行列との積を、分解対象の行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出する。行列分解装置は、第１のランク数と複数の位置情報とに基づいてスピンを変化させる試行回数を決定する。行列分解装置は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、更新後の第１の行列と更新後の第２の行列とに基づき、更新後のエネルギー関数を計算する。行列分解装置は、選択列番号情報に対応する第１の行列のスピンと、選択行番号情報に対応する第２の行列のスピンとをそれぞれ変化させ、変化後の第１の行列のスピンと変化後の第２の行列のスピンとを用いて変化後のエネルギー値を計算する。行列分解装置は、変化後のエネルギー値が更新後のエネルギー値よりも小さい場合、更新後のエネルギー値を変化後のエネルギー値、変化後の第１の行列のスピンを含む第１の行列を更新後の第１の行列、変化後の第２の行列のスピンを含む第２の行列を更新後の第２の行列にそれぞれ更新することを繰り返す。行列分解装置は、更新後の第１の行列と更新後の第２の行列の積が分解対象の行列と等しい場合、更新後の第１の行列を第１の解行列とし、更新後の第２の行列を第４の行列とする。行列分解装置は、試行回数だけ、複数の位置情報に含まれる複数の列番号情報から、１つの選択列番号情報を選択するとともに、複数の位置情報に含まれる複数の行番号情報から、１つの選択行番号情報を選択することを繰り返す。行列分解装置は、更新後の第４の行列と更新後の第３の行列との積を、分解対象の行列から引いた差分の絶対値を要素とする行列において、非ゼロ要素となる要素の複数の位置情報を抽出する。行列分解装置は、第２のランク数と複数の位置情報とに基づいてスピンを変化させる試行回数を決定する。行列分解装置は、所定の繰り返し回数だけ、生成されたエネルギー関数に従い、更新後の第４の行列と更新後の第３の行列とに基づき、更新後のエネルギー関数を計算する。行列分解装置は、選択列番号情報に対応する第４の行列のスピンと、選択行番号情報に対応する第３の行列のスピンとをそれぞれ変化させ、変化後の第４の行列のスピンと変化後の第３の行列のスピンとを用いて変化後のエネルギー値を計算する。行列分解装置は、変化後のエネルギー値が更新後のエネルギー値よりも小さい場合、更新後のエネルギー値を変化後のエネルギー値、変化後の第４の行列のスピンを含む第４の行列を更新後の第４の行列、変化後の第３の行列のスピンを含む第３の行列を更新後の第３の行列にそれぞれ更新することを繰り返す。行列分解装置は、更新後の第４の行列と更新後の第３の行列の積が分解対象の行列と等しい場合、更新後の第４の行列を第２の解行列とし、更新後の第３の行列を第３の解行列とする。行列分解装置は、試行回数だけ、複数の位置情報に含まれる複数の列番号情報から、１つの選択列番号情報を選択するとともに、複数の位置情報に含まれる複数の行番号情報から、１つの選択行番号情報を選択することを繰り返す。これにより、例えばマクエリス暗号などの離散値の行列分解に基づく暗号の秘密鍵を、公開鍵から容易に解読することができる。
【実施例５】
【００９２】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００９３】
例えば、図３ＡのＳ１１０において、スピンの初期値Ｗ０又はＨ０は、全て「０」に設定され、又は全て「１」に設定されるが、これに限られない。本実施例における行列分解装置７００は、例えば分解後の行列の積に含まれる非ゼロ要素の比率が、分解対象の行列Ｖに含まれる非ゼロ要素の比率に近似するように、スピンの初期値Ｗ０又はＨ０を設定してもよい。例えば、スピンの初期値Ｗ０及びＨ０に、分解対象の行列Ｖに含まれる非ゼロ要素の比率により重み付けされた０又は１の乱数を割り当ててもよい。これにより、初期段階での行列の積と分解対象の行列との差を小さくすることができる。なお、本実施例における行列分解装置７００は、図２に示す行列分解装置１００と同様の構成により実現できるため、詳細な図示は省略する。
【００９４】
なお、行列Ｖの非ゼロ要素の比率をＹとする場合において、Ｙに係数ｒを乗じ、さらにランク数ｋを乗じた比率を用いて重み付け乱数を発生させてもよい。この場合において、係数ｒは、例えば乱数により発生した要素が、乗算及び加算により１となる平均確率である。係数ｒは、例えば要素がブール代数系を満たす場合には、乗算により１が発生する確率１／４と、加算により１が発生する確率３／４とを乗算した３／１６となる。一方、例えば要素が２の剰余系を満たす場合には、乗算により１が発生する確率１／４と、加算により１が発生する確率２／４とを乗算した２／１６となる。
【００９５】
また、スピンの初期値Ｗ０及びＨ０に、０又は１の一様乱数を割り当ててもよい。また、スピンの初期値Ｗ０及びＨ０には、０から１までの連続値を割り当ててもよい。なお、スピンの初期値Ｗ０及びＨ０を全て「０」又は「１」に設定する場合においても、例えば分解対象の行列Ｖに含まれる全要素に示す非ゼロ要素の割合が半数以上であれば「１」を設定し、半数未満であれば「０」を設定するような構成であってもよい。
【００９６】
例えば、本実施例における行列分解装置は、選択列番号情報及び選択行番号情報を選択する際に、乱数として、一様乱数を用いてもよく、重み付き乱数を用いてもよい。これにより、シミュレーテッド・アニーリング処理を最適化できる。
【００９７】
［処理の流れ］
本実施例における、図３ＡのＳ１３２において乱数を用いて変更スピンを選択する処理について、図１３乃至図１５を用いて説明する。図１３は、実施例５における変更スピン選択処理の一例を示すフローチャートである。図１３に示すように、本実施例における行列分解装置７００は、ＷのＮｗ１行目〜Ｎｗｐ行目を、スピンの候補として選択する。また、行列分解装置７００は、ＨのＮｈ１列目〜Ｎｈｐ列目を、スピンの候補として選択する。この場合において、行列分解装置７００は、各行における重みをＤｗ１〜Ｄｗｐとし、各列における重みをＤｈ１〜Ｄｈｐとする（Ｓ５０１）。
【００９８】
次に、行列分解装置７００は、乱数の生成に際し、重み付けを利用するか否かを判定する（Ｓ５０２）。行列分解装置７００は、重み付けを利用しないと判断した場合（Ｓ５０２：Ｎｏ）、一様乱数を発生させて、Ｎｗ１乃至Ｎｗｐのうち、いずれかの行を選択し（Ｓ５０３）、図３ＡのＳ１３３に移行する。
【００９９】
一方、行列分解装置７００は、重み付けを利用すると判定した場合（Ｓ５０２：Ｙｅｓ）、重みＤｗ１乃至Ｄｗｐ及びＤｈ１乃至Ｄｈｐを用いて、重み付き乱数ｒｎｄを発生させる（Ｓ５１１）。ｒｎｄを発生させる処理については、後に図１４を用いて説明する。
【０１００】
行列分解装置７００は、発生させたｒｎｄに基づき、Ｎｗ１乃至Ｎｗｐのうち、いずれかの行を選択する（Ｓ５１２）。同様に、行列分解装置７００は、発生させたｒｎｄに基づき、Ｎｈ１乃至Ｎｈｐのうち、いずれかの列を選択する（Ｓ５１３）。
【０１０１】
次に、行列分解装置７００は、選択した行に含まれるいずれかの要素Ｗｓを、一様乱数を用いて１つ選択する（Ｓ５１４）。同様に、行列分解装置７００は、選択した列に含まれるいずれかの要素Ｈｓを、一様乱数を用いて１つ選択し（Ｓ５１５）、図３ＡのＳ１３３に移行する。
【０１０２】
次に、Ｓ５１１における乱数ｒｎｄを生成する処理の詳細について、図１４を用いて説明する。図１４は、実施例５における乱数生成処理の一例を示すフローチャートである。図１４に示すように、行列分解装置７００は、重みＤｗ１乃至Ｄｗｐが格納されたベクトルＤｗを取得する（Ｓ６００）。次に、行列分解装置７００は、重みＤｗ１乃至Ｄｗｐのそれぞれの大きさに合わせた区間を表すｗｐ×２の配列ｗを取得する（Ｓ６０１）。配列ｗは、例えば重みＤｗ１乃至Ｄｗｐがそれぞれ「３、３、５」である場合、ｃ「１，１」＝１となる。同様に、ｃ［１，２］＝３、ｃ［２，１］＝４、ｃ［２，２］＝６、ｃ［３，１］＝７、ｃ［３，２］＝１１となる。
【０１０３】
次に、行列分解装置７００は、ｃ［０，２］＝０とし（Ｓ６０２）、１乃至ｐについて、ｃ［ｎ，１］＝ｃ［ｎ−１，２］＋１とする（Ｓ６０３）。同様に、行列分解装置７００は、ｃ［ｎ，２］＝ｃ［ｎ，１］＋Ｄｗ［ｎ］−１とする（Ｓ６０４）。
【０１０４】
そして、行列分解装置７００は、区間１乃至ΣｐＤｗｐの間で、一様乱数ｒｎｄ２を生成する（Ｓ６０５）。行列分解装置７００は、ｃ［ｋ，１］≦ｒｎｄ２≦ｃ［ｋ，２］となるｋを特定し（Ｓ６０６）、ｋを乱数ｒｎｄとして出力する（Ｓ６０７）。
【０１０５】
図１５は、実施例５における乱数生成結果の一例を示す図である。図１５において、例えばｒｎｄ２が「５」である場合、ｒｎｄ２はｃ［２，１］以上であり、かつｃ［２，２］以下である。この場合、行列分解装置７００は、ｋ＝２を、乱数ｒｎｄとして発生させる。これにより、図６又は図１０に示すような重みを反映させた乱数を発生させることができる。
【０１０６】
［温度算出処理］
また、上記の実施例においては、図３ＡのＳ１１２に示す温度Ｔを算出する処理において、式（３）に示すように、イテレーション回数の対数の逆数を温度Ｔとして算出しているが、実施の形態はこれに限られない。例えば、温度をイテレーション回数の逆数とすることにより、温度の低下が緩やかになるような構成であってもよい。また、温度をイテレーション回数の指数の逆数とすることにより、温度が急激に低下するような構成であってもよい。
【０１０７】
図３ＡのＳ１１２における処理の詳細について、図１６を用いて説明する。図１６は、実施例５における温度算出処理の一例を示すフローチャートである。図１６に示すように、温度制御部１３５は、温度の初期値Ｔ０と、イテレーション回数ｉｔｅｒとを取得する（Ｓ７０１）。次に、温度制御部１３５は、例えば式（３）に示すようなイテレーション回数の対数の逆数を温度Ｔとして算出する（Ｓ７１１）。一方、温度制御部１３５は、イテレーション回数の指数の逆数を温度Ｔとして算出してもよい（Ｓ７１２）。また、温度制御部１３５は、イテレーション回数の逆数を温度Ｔとして算出してもよい（Ｓ７１３）。
【０１０８】
［スピンｓの値］
なお、上記の実施例においては、スピンｓの値が｛０，１｝である例について説明したが、実施の形態はこれに限られない。例えば、｛−１，１｝であるような値をとるδをスピンの値とするような構成であってもよい。かかるスピンδの値とスピンｓの値との関係は、例えばｓ＝（δ＋１）／２のような数式により示される。
【０１０９】
［システム］
次に、上記実施例に示した行列分解プログラムを実行するコンピュータの一例について説明する。図１７は、行列分解装置のハードウェア構成の一例を示す図である。図１７に示すように、コンピュータ４００は、各種演算処理を実行するＣＰＵ４０１と、ユーザからのデータ入力を受け付ける入力装置４０２と、モニタ４０３とを有する。また、コンピュータ４００は、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）４０４と、ハードディスク装置４０５とを有する。また、各装置４０１〜４０５は、バス４０６に接続される。
【０１１０】
ハードディスク装置４０５には、例えば、図２に示した各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置４０５には、情報処理プログラムを実現するための各種データが記憶される。
【０１１１】
ＣＰＵ４０１は、ハードディスク装置４０５に記憶された各プログラムを読み出して、ＲＡＭ４０４に展開して実行することで、各種の処理を行う。これらのプログラムは、コンピュータ４００を図２に示した各処理部として機能させることができる。
【０１１２】
なお、上記の情報処理プログラムは、必ずしもハードディスク装置４０５に記憶されている必要はない。例えば、コンピュータ４００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ４００が読み出して実行するようにしてもよい。コンピュータ４００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）等に接続された装置にこのプログラムを記憶させておき、コンピュータ４００がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０１１３】
１００  行列分解装置
１２０  記憶部
１２１  スピン記憶部
１３０  制御部
１３１  入出力部
１３２  初期設定部
１３３  スピン抽出部
１３４  スピン変更部
１３５  温度制御部
１３６  エネルギー算出部
１３７  判定部
【図１】
2019028896.tif 000007
【図２】
2019028896.tif 000008
【図３Ａ】
2019028896.tif 000009
【図３Ｂ】
2019028896.tif 000010
【図４】
2019028896.tif 000011
【図５】
2019028896.tif 000012
【図６】
2019028896.tif 000013
【図７】
2019028896.tif 000014
【図８】
2019028896.tif 000015
【図９】
2019028896.tif 000016
【図１０】
2019028896.tif 000017
【図１１】
2019028896.tif 000018
【図１２】
2019028896.tif 000019
【図１３】
2019028896.tif 000020
【図１４】
2019028896.tif 000021
【図１５】
2019028896.tif 000022
【図１６】
2019028896.tif 000023
【図１７】
2019028896.tif 000024