(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022165027
(43)【公開日】2022-10-31
(54)【発明の名称】最適化プログラム、最適化方法および最適化装置
(51)【国際特許分類】
G06F 17/10 20060101AFI20221024BHJP
【FI】
G06F17/10 Z
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2021070197
(22)【出願日】2021-04-19
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】印 芳
(72)【発明者】
【氏名】神田 浩一
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB91
(57)【要約】
【課題】順列のエネルギーの演算量を削減すること。
【解決手段】最適化装置100は、LOP(Linear Ordering Problem)行列の順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出する。最適化装置100は、第1差分値を記憶部に記憶する。最適化装置100は、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、第1差分値を再利用して、第2差分値を算出する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
線形順序付け問題における複数の要素の順列に対応する行列の順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出し、
前記第1差分値を記憶装置に格納し、
順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、前記記憶装置に格納された前記第1差分値を読み出して、前記第2差分値を算出する
処理をコンピュータに実行させることを特徴とする最適化プログラム。
【請求項2】
前記第2差分値を算出する処理は、選択した順列番号を前方または後方に移動させた個数と、前記第1差分値と、前記第1状態の一部の要素と、前記第2差分値との関係を示す情報を用いて、前記第2差分値を算出する処理を前記コンピュータに実行させることを特徴とする請求項1に記載の最適化プログラム。
【請求項3】
前記第2差分値によって、前記記憶装置に格納された第1差分値を更新し、順列の順列番号を一つ選択し、
算出された前記第2差分値を前記記憶装置に格納し、
選択した順列番号を前方または後方に移動させ、移動させる前の順列の第3状態のエネルギーと、移動させた後の順列の第4状態のエネルギーとの第3差分値を算出する場合に、前記記憶装置に格納された前記第2差分値を読み出して、前記第3差分値を算出する処理を更にコンピュータに実行させることを特徴とする請求項1または2に記載の最適化プログラム。
【請求項4】
前記選択する処理において前記コンピュータに、順列の順列番号において、隣接する複数の順列番号を選択し、選択した順列番号を前方または後方に移動させることで、順列の状態を変化させることを特徴とする請求項1に記載の最適化プログラム。
【請求項5】
コンピュータが実行する最適化方法であって、
線形順序付け問題における複数の要素の順列に対応する行列の順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出し、
前記第1差分値を記憶装置に格納し、
順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、前記記憶装置に格納された前記第1差分値を読み出して、前記第2差分値を算出する
処理を実行することを特徴とする最適化方法。
【請求項6】
線形順序付け問題における複数の要素の順列に対応する行列を取得する取得部と、
順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出し、前記第1差分値を記憶装置に格納し、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、前記記憶装置に格納された前記第1差分値を読み出して、前記第2差分値を算出する算出部と、
を有することを特徴とする最適化装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、最適化プログラム等に関する。
【背景技術】
【0002】
製造、金融、物流等の分野で、組み合わせ最適化問題が用いられている。組み合わせ最適化問題は、解が順序や割り当てのような組み合わせの構造を持つ最適化問題である。
【0003】
たとえば、組み合わせ最適化問題の適用対象として、線形順序付け問題(Linear Ordering Problem:LOP)がある。このLOPは、複数の要素、例えば複数の候補者の順位を与える場合、できるだけ多くの投票者の意志に合うように全ての候補者を順位付けする問題である。また、LOPは、候補者の順序に対応する正方行列について、上三角行列の要素の合計が最大になるように並べ替える順列を求める。LOPでは、問題の次元数nに対し、n!通りの組合せがあるため、高次元になるほど、解くのが困難になる。
【0004】
次の条件1~3の下で、LOPについて説明する。
(条件1):n名の候補者がいる。
(条件2):行列(投票数行列)の成分には、候補者のペアの各々に対して良い方を投票した人の数が指定されている。
(条件3):全てのペア候補に対して投票する。
【0005】
目的関数を式(1)に示し、順列πを式(2)に示す。また、制約条件を「行列の行と列とを同じ順列で並べる」とする。
【0006】
【0007】
投票数行列Aを式(3)に示す。投票数行列Aの要素(成分)「aij」は、候補者iが、候補者jよりも良いと投票した人の数を示す。
【0008】
【0009】
順列(候補者の並び順)は、複数のバイナリ値(ビット)で表すことができ、マトリックスXで表現できる。マトリックスXでは、要素の各行と列との和が全て1になる。マトリックスXは求める順列のバイナリ表現であり、ビット更新、反転を行う場合に使われる。たとえば、初期順列1234(候補者1、候補者2、候補者3、候補者4の並び順)の場合、マトリックスXは、式(4)に示すものとなる。順列3421の場合、マトリックスXは、式(5)に示すものとなる。
【0010】
【0011】
【0012】
図12は、LOPの並べ替えを説明するための図である。
図12に示すように、順列1234を順列3421に並び変える場合、
tXAXを計算する。行列
tXAXでは、行と列とが、3421の順に並んでいる。
図12に示すXは、上記の式(5)に対応するマトリックスXである。
【0013】
図13は、LOPのエネルギーを説明するための図である。LOPのエネルギーは、上三角行列の要素の合計(領域10に含まれる要素の合計)である。たとえば、
図13に示す行列
tXAXのエネルギーEは、式(6)に示すものとなる。
【0014】
【0015】
候補者1、2、3、4を、投票数の大きい順番に並べる場合に、エネルギーEが用いられる。エネルギーEが大きいほど、投票数の多い候補者が前方に位置することを意味する。たとえば、順列1234のエネルギーよりも、順列3421のエネルギーの方が大きい場合に、候補者の並び順1234よりも、候補者の並び順3421の方が、投票数の多い候補者が前方に位置している。
【0016】
たとえば、エネルギーEの最小値(または最大値)を探索する従来技術として、マルコフモンテカルロ法(Markov Chain Monte Carlo methods:MCMC)がある。
図14は、MCMCを説明するための図である。
図14の縦軸はエネルギーの値に対応し、横軸はある状態に対応する。
【0017】
MCMCでは、現在の状態から近傍状態に移動した場合のエネルギー変化量ΔEを計算し、条件を満たせば、次の状態に移行する。ΔEは、遷移前のエネルギーEから、遷移後のエネルギーE´を減算することで、算出される。MCMCでは、状態(ビット)を確率的に反転させることで、探索を行う。また、熱ノイズを付与することで、局所解にとどまらないようにする。
【0018】
LOPに関する従来技術について説明する。この従来技術では、Step1~4を実行する。
【0019】
従来技術が実行する「Step1」について説明する。従来技術では、n×n行列の行列について、順列番号j(j=1,2,・・・n-1)を挿入位置i(i=j+1)に挿入し、エネルギーを計算する。順列番号jを、挿入位置iに挿入することを(Pj、i)で示す。
【0020】
従来技術は、元の順列1234から、以下の順列を生成する。
(P1、2)→順列2134
(P2、3)→順列1324
(P3、4)→順列1243
【0021】
従来技術が実行する「Step2」について説明する。従来技術では、Step1で計算したエネルギーが最大となる順列を基に、順列番号j(j=1,2,・・・n)をi(i=1,2,・・・j-1,j+1,・・・m)の位置に挿入し、生成した順列についてエネルギーを計算する。
【0022】
たとえば、Step1の各順列のうち、順列1324のエネルギーが最大の場合には、以下の順列を生成する。
(P1、2)→順列3124
(P1、3)→順列3214
(P1、4)→順列3241
(P2、1)→順列3124
(P2、3)→順列1234
(P2、4)→順列1243
(P3、1)→順列2134
(P3、2)→順列1234
(P3、4)→順列1342
【0023】
従来技術が実行する「Step3」について説明する。従来技術では、Step2で計算したエネルギーが最大となる順列を求める。
【0024】
従来技術が実行する「Step4」について説明する。従来技術では、最適解を見つけるまで、Step1~3を繰り返し実行する。
【0025】
ここで、従来技術のエネルギーの計算方法について説明する。
図15は、従来技術のエネルギーの計算方法を説明するための図である。
【0026】
元の順列1234のエネルギーEは、領域10の要素の合計値となり、式(7)によって示される。
【0027】
【0028】
生成した順列が、順列2134の場合には、式(8)によって、エネルギーE1を算出する。すなわち、行列A´の上三角行列の要素の合計を算出する代わりに、既に算出した順列1234のエネルギーE、行列の要素a21,a12を基にして、エネルギーE1を算出する。
【0029】
【0030】
生成した順列が、順列3214の場合には、式(8)によって、エネルギーE2を算出する。すなわち、行列A´´の上三角行列の要素の合計を算出する代わりに、既に算出した順列2134のエネルギーE1、要素a21,a12,a21,a31を基にして、エネルギーE2を算出する。
【0031】
【先行技術文献】
【非特許文献】
【0032】
【非特許文献1】Manuel Laguna「Intensification and diversification with elite tabu search solutions for the linear ordering problem」Computers & Operations Research 26 (1999) 1217-1230
【発明の概要】
【発明が解決しようとする課題】
【0033】
しかしながら、上述した従来技術では、生成した順列のエネルギーの演算量が多いという問題がある。
【0034】
たとえば、対象となる行列において、順列番号jと挿入位置iとの差が増えると、加減算の回数が増加し、演算量が増加する。また、従来技術では、生成した順列のエネルギーのみで、更新するか否かを判定するため、局所解にはまると、脱出しにくく、最適解にたどり着くまで時間を要し、演算量が増加する。
【0035】
1つの側面では、本発明は、順列のエネルギーの演算量を削減することができる最適化プログラム、最適化方法および最適化装置を提供することを目的とする。
【課題を解決するための手段】
【0036】
第1の案では、コンピュータに次の処理を実行させる。コンピュータは、LOP(Linear Ordering Problem)行列の順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出する。コンピュータは、第1差分値を記憶装置に記憶する。コンピュータは、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、第1差分値を再利用して、第2差分値を算出する。
【発明の効果】
【0037】
順列のエネルギーの演算量を削減することができる。
【図面の簡単な説明】
【0038】
【
図1】
図1は、本実施例に係る最適化装置の構成を示す機能ブロック図である。
【
図2】
図2は、実施例に係る計算テーブルのデータ構造の一例を示す図である。
【
図3】
図3は、本実施例に係る算出部の処理を説明するための図(1)である。
【
図4】
図4は、本実施例に係る算出部の処理を説明するための図(2)である。
【
図5】
図5は、本実施例に係る算出部の処理を説明するための図(3)である。
【
図6】
図6は、本実施例に係る算出部の処理を説明するための図(4)である。
【
図7】
図7は、本実施例に係る最適化装置の処理手順を示すフローチャートである。
【
図8】
図8は、前方挿入処理の処理手順を示すフローチャートである。
【
図9】
図9は、後方挿入処理の処理手順を示すフローチャートである。
【
図10】
図10は、最適化装置のその他の処理を説明するための図である。
【
図11】
図11は、最適化装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【
図12】
図12は、LOPの並べ替えを説明するための図である。
【
図13】
図13は、LOPのエネルギーを説明するための図である。
【
図15】
図15は、従来技術のエネルギーの計算方法を説明するための図である。
【発明を実施するための形態】
【0039】
以下に、本願の開示する最適化プログラム、最適化方法および最適化装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例0040】
図1は、本実施例1に係る最適化装置の構成を示す機能ブロック図である。
図1に示すように、この最適化装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
【0041】
通信部110は、ネットワークを介して外部装置から各種のデータを受信する。通信部110は、通信装置の一例である。たとえば、通信部110は、後述する投票数行列情報141を、外部装置から受信してもよい。
【0042】
入力部120は、最適化装置100の制御部150に各種の情報を入力する入力装置である。入力部120は、キーボードやマウス、タッチパネル等に対応する。
【0043】
表示部130は、制御部150から出力される情報を表示する表示装置である。たとえば、表示部130は、順列の最適解の情報を表示する。
【0044】
記憶部140は、投票数行列情報141、差分値情報142、計算テーブル143を有する。記憶部140は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子や、HDD(Hard Disk Drive)などの記憶装置に対応する。
【0045】
投票数行列情報141は、aijを行列の要素(成分)とする投票数行列Aの情報である。たとえば、i=1~n、j=1~nとする(正方行列)。要素「aij」には、候補者iが候補者jよりも良いと投票した人の数が設定される。投票数行列Aは、式(3)によって示される。
【0046】
差分値情報142は、選択された順列の順列番号を前方または後方に移動させた場合において、移動させる前の順列の状態のエネルギーと、移動させた後の順列の状態のエネルギーとの差分値を示す情報である。後述するように、算出部152が算出する新たな差分値によって、差分値情報142の差分値は更新される。
【0047】
計算テーブル143は、n×nの行列の順列について、順列の順列番号を前方または後方に移動させた移動個数と、差分値との関係を定義するテーブルである。たとえば、元の順列1234の順列番号3を、前方に1つ移動させた場合の順列は順列1324となり、移動個数は「1」となる。元の順列1234の順列番号3を、前方に2つ移動させた場合の順列は順列3124となり、移動個数は「2」となる。
【0048】
元の順列1234の順列番号1を、後方に1つ移動させた場合の順列は順列2134となり、移動個数は「1」となる。元の順列1234の順列番号1を、後方に2つ移動させた場合の順列は順列2314となり、移動個数は「2」となる。
【0049】
図2は、実施例1に係る計算テーブルのデータ構造の一例を示す図である。
図2に示すように、計算テーブル143は、前方テーブル143aと、後方テーブル143bとを有する。なお、元の順列123、・・・i・・・nを、式(3)に示す投票数行列A(n×nの行列)の順列とする。
【0050】
前方テーブル143aは、前方移動個数と、ΔEの計算とを対応付ける。前方移動個数は、順列の順列番号iを選択し、かかる順列番号iを前方に何個移動させたのかを示す。順序番号iを、前方に1つ移動させた場合には、前方移動個数は「1」となる。ΔEは、移動前の順列の状態のエネルギーと、移動後の順列の状態のエネルギーとの差分値である。
【0051】
後方テーブル143bは、後方移動個数と、ΔEの計算とを対応付ける。後方移動個数は、順列の順列番号iを選択し、かかる順列番号iを後方に何個移動させたのかを示す。順序番号iを、後方に1つ移動させた場合には、後方移動個数は「1」となる。ΔEは、移動前の順列の状態のエネルギーと、移動後の順列の状態のエネルギーとの差分値である。
【0052】
図1の説明に戻る。制御部150は、取得部151と、算出部152とを有する。制御部150は、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などのハードワイヤードロジック等によって実現される。
【0053】
取得部151は、外部装置等から、ネットワークを介して、投票数行列情報141を取得する。取得部151は、投票数行列情報141を、記憶部140に登録する。取得部151は、投票数行列情報141を、入力部120を介して取得してもよい。
【0054】
算出部152は、投票数行列Aの順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の状態のエネルギーと、移動させた後の状態のエネルギーとの差分値を算出する。算出部152は、差分値を算出する場合には、計算テーブル143に定義されたΔEの計算に従い、差分値情報142に記録された前回の差分値を利用する。算出部152は、新たに算出した差分値によって、差分値情報142の差分値を更新する。
【0055】
図3~
図6は、本実施例に係る算出部の処理を説明するための図である。
図3について説明する。元の順列を、順列1234とする。元の順列1234のエネルギーEは、行列Aの上三角行列の合計値となり、式(7)によって、算出される。算出部152は、式(7)を基にして、元の順列のエネルギーEを算出しておく。
【0056】
図3では、元の順列1234の順列番号「3」を、前方に1つ移動させ、順列1324とする。順列1324の行列を、
図3に示す行列A
1とする。順列1324のエネルギーE
1は、行列A
1の上三角行列の合計値となり、式(10)によって示される。ここで、エネルギーEとエネルギーE
1との差分値ΔE
1は、式(11)によって示される。
【0057】
【0058】
【0059】
すなわち、算出部152は、式(11)に示すように、行列A1の要素a23,a32を用いて、エネルギーEとエネルギーE1との差分値ΔE1を算出する。なお、算出部152は、エネルギーEから差分値ΔE1を減算することで、エネルギーE1を算出する。算出部152は、差分値ΔE1を、差分値情報142に設定する。
【0060】
図4について説明する。
図4では、元の順列1234の順列番号「3」を、前方に2つ移動させ、順列3214とする。順列3214の行列を、
図4に示す行列A
2とする。順列3214のエネルギーE
2は、行列A
2の上三角行列の合計値となり、式(12)によって示される。ここで、エネルギーEとエネルギーE
2との差分値ΔE
2は、式(13)によって示される。
【0061】
【0062】
【0063】
なお、算出部152は、
図3で説明したように、差分値ΔE
1をすでに算出している場合には、式(14)によって、差分値ΔE
2を算出することができる。すなわち、算出部152は、式(14)に示すように、差分値ΔE
1(再利用のΔE)と、行列A
2の要素a
13,a
31の値を用いて、エネルギーEとエネルギーE
2との差分値ΔE
2を算出する。
【0064】
算出部152は、
図2で説明した前方テーブル143aを基にして、差分値ΔE
2を算出するための、行列A
2の要素a
13,a
31を特定する。たとえば、式(14)は、前方テーブル142aの前方移動個数「2」のΔEの計算に対応する。
【0065】
算出部152は、エネルギーEから差分値ΔE2を減算することで、エネルギーE2を算出する。算出部152は、差分値ΔE2によって、差分値情報142を更新する。
【0066】
【0067】
図5について説明する。
図5では、元の順列1234の順列番号「1」を、後方に1つ移動させ、順列2134とする。順列2134の行列を、
図5に示す行列A
3とする。順列2134のエネルギーE
3は、行列A
3の上三角行列の合計値となり、式(15)によって示される。ここで、エネルギーEとエネルギーE
3との差分値ΔE
3は、式(16)によって示される。
【0068】
【0069】
【0070】
すなわち、算出部152は、式(16)に示すように、行列A3の要素a12,a21を用いて、エネルギーEとエネルギーE3との差分値ΔE3を算出する。なお、算出部152は、エネルギーEから差分値ΔE3を減算することで、エネルギーE3を算出する。算出部152は、差分値ΔE3を、差分値情報142に設定する。
【0071】
図6について説明する。
図6では、元の順列1234の順列番号「1」を、後方に2つ移動させ、順列2314とする。順列2314の行列を、
図6に示す行列A
4とする。順列2314のエネルギーE
4は、行列A
4の上三角行列の合計値となり、式(17)によって示される。ここで、エネルギーEとエネルギーE
4との差分値ΔE
4は、式(18)によって示される。
【0072】
【0073】
【0074】
なお、算出部152は、
図5で説明したように、差分値ΔE
3をすでに算出している場合には、式(19)によって、差分値ΔE
4を算出することができる。すなわち、算出部152は、式(19)に示すように、差分値ΔE
3と、行列A
4の要素a
13,a
31を用いて、エネルギーEとエネルギーE
4との差分値ΔE
4を算出する。
【0075】
【0076】
算出部152は、
図2で説明した後方テーブル143bを基にして、差分値ΔE
4を算出するための、行列A
4の要素a
13,a
31を特定する。たとえば、式(19)は、後方テーブル142bの後方移動個数「2」のΔEの計算に対応する。
【0077】
算出部152は、エネルギーEから差分値ΔE4を減算することで、エネルギーE4を算出する。算出部152は、差分値ΔE4によって、差分値情報142を更新する。
【0078】
上記のように、算出部152は、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の状態のエネルギーと、移動させた後の状態のエネルギーとの差分値を算出する。また、算出部152は、各エネルギーを算出する過程において、エネルギーの最大値を保持する。
【0079】
算出部152は、複数回エネルギーを算出しても、エネルギーの最大値が変化しなくなるまで、上記処理を繰り返し実行する。算出部152は、エネルギーが最大値となる場合の順列を、最適解とする。算出部152は、最適解の情報を、表示部130に出力して表示する。または、算出部152は、最適解の情報を、外部装置に通知してもよい。たとえば、
図6で示したエネルギーE
4が、最大値となる場合には、最適解は、順列2314となる。
【0080】
次に、本実施例1に係る最適化装置100の処理手順の一例について説明する。
図7は、本実施例に係る最適化装置の処理手順を示すフローチャートである。
図7に示すように、最適化装置100の算出部152は、ステート(順列の初期値)を設定する(ステップS101)。算出部152は、順列番号iに1に設定する(ステップS102)。
【0081】
算出部152は、順列番号iに設定された値が1である場合には(ステップS103,Yes)、ステップS106に移行する。一方、算出部152は、順列番号iに設定された値が1でない場合には(ステップS103,No)、ステップS104に移行する。
【0082】
算出部152は、前方挿入処理を実行する(ステップS104)。算出部152は、順列番号iに設定された値が次元数Nと一致する場合には(ステップS105,Yes)、ステップS101に移行する。一方、算出部152は、順列番号iに設定された値が次元数Nと一致しない場合には(ステップS105,No)、ステップS106に移行する。
【0083】
算出部152は、後方挿入処理を実行する(ステップS106)。算出部152は、順列番号iに1を加算することで、順列番号iを更新し(ステップS107)、ステップS102に移行する。
【0084】
続いて、
図7のステップ104に示した前方挿入処理の一例について説明する。
図8は、前方挿入処理の処理手順を示すフローチャートである。
図8に示すように、算出部152は、前方挿入位置jに1を設定する(ステップS201)。算出部152は、行列の要素a
ijとa
jiを選択する(ステップS202)。
【0085】
算出部152は、保存したΔE(i-1)を用いて、ΔEjを算出する(ステップS203)。ステップS203において、算出部152は、前方テーブル143aに示されるΔEの計算を実行する。算出部152は、ΔEjを記憶部140に保存する(ステップS204)。
【0086】
算出部152は、MCMCビット反転を実行するか否かを判定する(ステップS205)。たとえば、算出部152は、ΔEjがプラスなら、MCMCビット反転を実行すると判定し(ステップS205,Yes)、ステップS206に移行する。一方、算出部152は、ΔEjが0以下の場合には、MCMCビット反転を実行しないと判定(ステップS205,No)し、ステップS210に移行する。
【0087】
算出部152は、MCMCビット反転を実行し、順列を更新する(ステップS206)。算出部152は、エネルギーEを算出する(ステップS207)。ステップS207において、算出部152は、ステップS101で設定した元行列のエネルギーから、ΔEを減算することで、エネルギーEを算出する。
【0088】
算出部152は、エネルギーEが、E_MAX(これまでのエネルギーEの最大値)より大きいか否かを判定する(ステップS208)。算出部152は、エネルギーEが、E_MAXよりも大きくない場合には(ステップS208,No)、ステップS210に移行する。
【0089】
一方、算出部152は、エネルギーEが、E_MAXよりも大きい場合には(ステップS208,Yes)、ステップS207で算出したエネルギーEによって、E_MAXを更新する(ステップS209)。
【0090】
算出部152は、j<(i-1)の条件を満たす場合には(ステップS210,Yes)、前方挿入位置jに1を加算することで、前方挿入位置を更新し(ステップS211)、ステップS203に移行する。
【0091】
一方、算出部152は、j<(i-1)の条件を満たさない場合には(ステップS210,No)、前方挿入処理を終了する。
【0092】
続いて、
図7のステップS106に示した後方挿入処理の一例について説明する。
図9は、後方挿入処理の処理手順を示すフローチャートである。
図9に示すように、算出部152は、前方挿入位置tに1を設定する(ステップS301)。算出部152は、行列の要素a
itとa
tiを選択する(ステップS302)。
【0093】
算出部152は、保存したΔE(t-1)を用いて、ΔEtを算出する(ステップS303)。ステップS303において、算出部152は、後方テーブル143bに示されるΔEの計算を実行する。算出部152は、ΔEtを記憶部140に保存する(ステップS304)。
【0094】
算出部152は、MCMCビット反転を実行するか否かを判定する(ステップS305)。たとえば、算出部152は、ΔEtがプラスなら、MCMCビット反転を実行すると判定し(ステップS305,Yes)、ステップS306に移行する。一方、算出部152は、ΔEtが0以下の場合には、MCMCビット反転を実行しないと判定し(ステップS305,No)、ステップS310に移行する。
【0095】
算出部152は、MCMCビット反転を実行し、順列を更新する(ステップS306)。算出部152は、エネルギーEを算出する(ステップS307)。ステップS307において、算出部152は、ステップS101で設定した元行列のエネルギーから、ΔEを減算することで、エネルギーEを算出する。
【0096】
算出部152は、エネルギーEが、E_MAX(これまでのエネルギーEの最大値)より大きいか否かを判定する(ステップS308)。算出部152は、エネルギーEが、E_MAXよりも大きくない場合には(ステップS308,No)、ステップS310に移行する。
【0097】
一方、算出部152は、エネルギーEが、E_MAXよりも大きい場合には(ステップS308,Yes)、ステップS307で算出したエネルギーEによって、E_MAXを更新する(ステップS309)。
【0098】
算出部152は、t≧(次元数N-1)の条件を満たす場合には(ステップS310,Yes)、後方挿入処理を終了する。
【0099】
一方、算出部152は、t≧(次元数N-1)の条件を満たさない場合には(ステップS310,No)、後方挿入位置tに1を加算することで、後方挿入位置を更新し(ステップS311)、ステップS303に移行する。
【0100】
次に、本実施例に係る最適化装置100の効果について説明する。最適化装置100は、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の状態のエネルギーと、移動させた後の状態のエネルギーとの差分値を算出する。最適化装置100は、差分値を算出する場合、計算テーブル143に定義されたΔEの計算に従い、記憶部140に記憶された前回の差分値を利用する。最適化装置100は、新たに算出した差分値によって、記憶部140の差分値を更新する。これによって、順列のエネルギーの演算量を削減することができる。
【0101】
たとえば、最適化装置100の処理により、重複する演算をなくし、投票数行列Aの一部の要素を選択してΔEを算出することで、従来技術と比較して、加減算回数を99%削減することが可能となる。
【0102】
従来技術では、100次元で1番目の順列番号を最後に挿入する場合には、エネルギーEの差分ΔEjは、式(20)によって算出される。従来技術による加減算回数は、加算回数99回と、減算回数100回を合計した199回となる。
【0103】
【0104】
一方、本実施例に係る最適化装置100によれば、LOPの次元数に関係なく、ΔEを再利用して順番に累積することにより、加減算回数は2回となる。たとえば、順列番号jを前方にt個移動させる場合には、エネルギーEの差分値ΔEjは、式(21)によって算出され、加減算回数は2回となる。
【0105】
【0106】
ところで、上述した最適化装置100の処理の内容は一例であり、最適化装置100は、その他の処理を実行してもよい。最適化装置100は、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の状態のエネルギーと、移動させた後の状態のエネルギーとの差分値を算出していたが、これに限定されない。最適化装置100は、隣接しあう複数の順列番号からなる順列番号のグループを前方または後方の順列に挿入することで、行列の状態を変化させ、状態変化前のエネルギーと状態変化後のエネルギーとの差分値ΔEを算出してもよい。
【0107】
最適化装置100は、選択したグループを、後方に移動させた際のΔEの計算、および、前方に移動させた際のΔEの計算を、計算テーブル143に登録しておく。
図10は、最適化装置のその他の処理を説明するための図である。
【0108】
たとえば、元の順列を12345とすると、元の順列の行列Aは、
図10に示すものとなる。計算テーブル143cを用いて説明を行う。計算テーブル143cに示す順列の例は一例であり、他の順列とΔEの計算方法との関係の説明を省略する。
【0109】
最適化装置100は、元の順列12345から、順列番号12を選択し、順列番号3と4との間に、順列番号12を挿入した場合には、順列は31245となる。この場合、最適化装置100は、計算テーブル143cの1行列で定義される算出方法により、順列12345のエネルギーと、順列31245のエネルギーとの差分値ΔEを算出する。
【0110】
最適化装置100は、元の順列12345から、順列番号12を選択し、順列番号4と5との間に、順列番号12を挿入した場合には、順列は34125となる。この場合、最適化装置100は、計算テーブル143cの2行列で定義される算出方法により、順列12345のエネルギーと、順列34125のエネルギーとの差分値ΔEを算出する。
【0111】
最適化装置100は、元の順列12345から、順列番号12を選択し、順列番号5の後方に、順列番号12を挿入した場合には、順列は34512となる。この場合、最適化装置100は、計算テーブル143cの3行列で定義される算出方法により、順列12345のエネルギーと、順列34125のエネルギーとの差分値ΔEを算出する。
【0112】
最適化装置100は、元の順列12345から、順列番号45を選択し、順列番号2と3との間に、順列番号45を挿入した場合には、順列は12453となる。この場合、最適化装置100は、計算テーブル143cの4行列で定義される算出方法により、順列12345のエネルギーと、順列12453のエネルギーとの差分値ΔEを算出する。
【0113】
最適化装置100は、元の順列12345から、順列番号45を選択し、順列番号1と2との間に、順列番号45を挿入した場合には、順列は14523となる。この場合、最適化装置100は、計算テーブル143cの5行列で定義される算出方法により、順列12345のエネルギーと、順列14523のエネルギーとの差分値ΔEを算出する。
【0114】
最適化装置100は、元の順列12345から、順列番号45を選択し、順列番号1の前に、順列番号45を挿入した場合には、順列は45123となる。この場合、最適化装置100は、計算テーブル143cの6行列で定義される算出方法により、順列12345のエネルギーと、順列45123のエネルギーとの差分値ΔEを算出する。
【0115】
続いて、MCMC反転に関する補足の説明を行う。高次元の最適問題を解く汎用的技術にMCMCを応用したシミュレーテッドアニーリング(Simulated Annealing:SA)がある。SAは、現在の状態の近傍を確率的に探索し、目的関数が現在より増加すれば高い確率(例えば確率1)で新たな状態を受け入れ、減少する場合にもある小さな確率で状態を受け入れる操作を繰り返す。SAは組合せ最適化問題に限定されず例えば連続変数の目的関数の最適化にも用いられる。
【0116】
ここで現在の状態から新しい状態に遷移した場合の目的関数(エネルギー)の増分をΔEとする。目的関数が増加した場合(ΔE<0)でも新しい状態を確率的に受け入れる操作は、環境から熱エネルギーをもらって目的関数の減少分を補填するという物理的アナロジーで理解することができる。SAでは温度に相当するパラメータを高い値から次第に低くすることで、局所的な最大値(local maximum)を避けて最適化を行うことができる。温度を下げていくので冶金分野の用語「アニール(焼き鈍し)」が使われる。ここで、状態をとる確率とその状態のエネルギーの関係が平衡状態でボルツマン分布になる場合を考える。この場合、MCMCのアルゴリズムでは近傍状態への遷移を受け入れる確率A(ΔE)を、式(22)とする。
【0117】
【0118】
式(22)において、Tは温度を示す。式(22)の遷移受け入れ確率は、統計物理でいう詳細平衡を満たしており、平衡状態では状態の分布はボルツマン分布となる。なお、詳細平衡を満たす遷移受け入れ確率は式(22)以外にも作ることができる。
【0119】
上記の最適化装置100は、ΔEがプラスである場合に、MCMCビット反転を実行すると判定していたが、一様乱数u[i](0<u[i]<1)を用いて、A(ΔEi)と比較することで、MCMCビット反転を実行するか否かを判定してもよい。最適化装置100は、u[i]<A(ΔEi)となる場合にMCMCビット反転を行い、それ以外の場合には、MCMCビット反転を行わない。
【0120】
次に、上記実施例に示した最適化装置100と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。
図11は、最適化装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【0121】
図11に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203とを有する。また、コンピュータ200は、外部装置からデータを受信する通信装置204と、各種の装置と接続するインタフェース装置205とを有する。コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207とを有する。そして、各装置201~207は、バス208に接続される。
【0122】
ハードディスク装置207は、取得プログラム207a、算出プログラム207bを有する。CPU201は、取得プログラム207a、算出プログラム207bを読み出してRAM206に展開する。
【0123】
取得プログラム207aは、取得プロセス206aとして機能する。算出プログラム207bは、算出プロセス306bとして機能する。
【0124】
取得プロセス206aの処理は、取得部151の処理に対応する。算出プロセス206bの処理は、算出部152の処理に対応する。
【0125】
なお、各プログラム207a,207bについては、必ずしも最初からハードディスク装置207に記憶させておかなくてもよい。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200が各プログラム207a,207bを読み出して実行するようにしてもよい。
【0126】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0127】
(付記1)線形順序付け問題における複数の要素の順列に対応する行列の順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出し、
前記第1差分値を記憶装置に格納し、
順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、前記記憶装置に格納された前記第1差分値を読み出して、前記第2差分値を算出する
処理をコンピュータに実行させることを特徴とする最適化プログラム。
【0128】
(付記2)前記第2差分値を算出する処理は、選択した順列番号を前方または後方に移動させた個数と、前記第1差分値と、前記第1状態の一部の要素と、前記第2差分値との関係を示す情報を用いて、前記第2差分値を算出する処理を前記コンピュータに実行させることを特徴とする付記1に記載の最適化プログラム。
【0129】
(付記3)前記第2差分値によって、前記記憶装置に格納された第1差分値を更新し、順列の順列番号を一つ選択し、
算出された前記第2差分値を前記記憶装置に格納し、
選択した順列番号を前方または後方に移動させ、移動させる前の順列の第3状態のエネルギーと、移動させた後の順列の第4状態のエネルギーとの第3差分値を算出する場合に、前記記憶装置に格納された前記第2差分値を読み出して、前記第3差分値を算出する処理を更にコンピュータに実行させることを特徴とする付記1または2に記載の最適化プログラム。
【0130】
(付記4)前記選択する処理において前記コンピュータに、順列の順列番号において、隣接する複数の順列番号を選択し、選択した順列番号を前方または後方に移動させることで、順列の状態を変化させることを特徴とする付記1に記載の最適化プログラム。
【0131】
(付記5)コンピュータが実行する最適化方法であって、
線形順序付け問題における複数の要素の順列に対応する行列の順列について、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出し、
前記第1差分値を記憶装置に格納し、
順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、前記記憶装置に格納された前記第1差分値を読み出して、前記第2差分値を算出する
処理を実行することを特徴とする最適化方法。
【0132】
(付記6)前記第2差分値を算出する処理は、選択した順列番号を前方または後方に移動させた個数と、前記第1差分値と、前記第1状態の一部の要素と、前記第2差分値との関係を示す情報を用いて、前記第2差分値を算出する処理を前記コンピュータが更に実行することを特徴とする付記5に記載の最適化方法。
【0133】
(付記7)前記第2差分値によって、前記記憶装置に格納された第1差分値を更新し、順列の順列番号を一つ選択し、算出された前記第2差分値を前記記憶装置に格納し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第3状態のエネルギーと、移動させた後の順列の第4状態のエネルギーとの第3差分値を算出する場合に、前記記憶装置に格納された前記第2差分値を読み出して、前記第3差分値を算出する処理を更に前記コンピュータが実行することを特徴とする付記5または6に記載の最適化方法。
【0134】
(付記8)前記選択する処理において前記コンピュータは、順列の順列番号において、隣接する複数の順列番号を選択し、選択した順列番号を前方または後方に移動させることで、順列の状態を変化させることを特徴とする付記5に記載の最適化方法。
【0135】
(付記9)線形順序付け問題における複数の要素の順列に対応する行列を取得する取得部と、
順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第1状態のエネルギーと、移動させた後の順列の第2状態のエネルギーとの第1差分値を算出し、前記第1差分値を記憶装置に格納し、順列の順列番号を一つ選択し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第2状態のエネルギーと、移動させた後の順列の第3状態のエネルギーとの第2差分値を算出する場合に、前記記憶装置に格納された前記第1差分値を読み出して、前記第2差分値を算出する算出部と、
を有することを特徴とする最適化装置。
【0136】
(付記10)前記算出部は、選択した順列番号を前方または後方に移動させた個数と、前記第1差分値と、前記第1状態の一部の要素と、前記第2差分値との関係を示す情報を用いて、前記第2差分値を算出する処理を実行することを特徴とする付記9に記載の最適化装置。
【0137】
(付記11)前記算出部は、前記第2差分値によって、前記記憶装置に格納された第1差分値を更新し、順列の順列番号を一つ選択し、算出された前記第2差分値を前記記憶装置に格納し、選択した順列番号を前方または後方に移動させ、移動させる前の順列の第3状態のエネルギーと、移動させた後の順列の第4状態のエネルギーとの第3差分値を算出する場合に、前記記憶装置に格納された前記第2差分値を読み出して、前記第3差分値を算出する処理を更に実行することを特徴とする付記9または10に記載の最適化装置。
【0138】
(付記12)前記算出部は、順列の順列番号において、隣接する複数の順列番号を選択し、選択した順列番号を前方または後方に移動させることで、順列の状態を変化させることを特徴とする付記9に記載の最適化装置。