特開2017-97484(P2017-97484A)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧 ▶ 国立大学法人北海道大学の特許一覧

<>
  • 特開2017097484-問題求解装置、方法、及びプログラム 図000010
  • 特開2017097484-問題求解装置、方法、及びプログラム 図000011
  • 特開2017097484-問題求解装置、方法、及びプログラム 図000012
  • 特開2017097484-問題求解装置、方法、及びプログラム 図000013
  • 特開2017097484-問題求解装置、方法、及びプログラム 図000014
  • 特開2017097484-問題求解装置、方法、及びプログラム 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2017-97484(P2017-97484A)
(43)【公開日】2017年6月1日
(54)【発明の名称】問題求解装置、方法、及びプログラム
(51)【国際特許分類】
   G06F 17/10 20060101AFI20170428BHJP
【FI】
   G06F17/10 Z
【審査請求】未請求
【請求項の数】5
【出願形態】OL
【全頁数】16
(21)【出願番号】特願2015-226727(P2015-226727)
(22)【出願日】2015年11月19日
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(71)【出願人】
【識別番号】504173471
【氏名又は名称】国立大学法人北海道大学
(74)【代理人】
【識別番号】110001519
【氏名又は名称】特許業務法人太陽国際特許事務所
(72)【発明者】
【氏名】西野 正彬
(72)【発明者】
【氏名】湊 真一
(72)【発明者】
【氏名】安田 宜仁
(72)【発明者】
【氏名】竹内 文登
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB91
(57)【要約】
【課題】制約が付加された0−1ナップサック問題の解を高速に求める。
【解決手段】グラフ変換処理部22により、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードがアイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAGに変換し、ヒューリスティック関数計算部24により、DAGのノードの各々に対して、ノードから終端ノードまでの辺のスコアの和が最大になるような経路のスコアの和である最大経路スコアを計算し、最適解計算部26により、入力された、論理関数によって表現されたアイテムの組み合わせに関する制約を表現する二分決定グラフであるBDDと、DAGと、計算されたDAGの各ノードの最大経路スコアとに基づいて、制約を満たすナップサック問題の解を計算する。
【選択図】図1
【特許請求の範囲】
【請求項1】
スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードが前記アイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAG(Directed acyclic graph)に変換するグラフ変換処理部と、
前記DAGのノードの各々に対して、前記ノードから終端ノードまでの辺のスコアの和が最大になるような経路のスコアの和である最大経路スコアを計算するヒューリスティック関数計算部と、
入力された、論理関数によって表現された前記アイテムの組み合わせに関する制約を表現する二分決定グラフであるBDD(Binary Decision Diagram)と、前記DAGと、前記ヒューリスティック関数計算部により計算されたDAGの各ノードの最大経路スコアとに基づいて、前記制約を満たす前記ナップサック問題の解を計算する最適解計算部と、
を含む、問題求解装置。
【請求項2】
前記DAGは、各辺eに、前記辺eのスコアに応じたラベルが付加されており、
前記最適解計算部は、前記DAGのノードnと前記BDDのノードmとの組み合わせ(n,m)についての評価関数f(n,m)の各々の値を格納するテーブルAを初期化し、
前記DAGの始点ノードsと前記BDDのルートノードrootとの組み合わせ(s,root)について、
前記DAGの始点ノードsについての前記最大経路スコアに基づいて前記組み合わせ(s,root)の評価関数f(s,root)の値を計算し、前記組み合わせ(s,root)と対応づけて優先度つきキューに格納すると共に、前記評価関数f(s,root)の値を前記テーブルAに格納し
前記優先度つきキューから前記評価関数f(n,m)の値が最大となる前記組み合わせ(n,m)を抽出し、
前記抽出された前記組み合わせ(n,m)の前記DAGのノードnが終端ノードでなく、又は前記組み合わせの前記BDDのノードmが偽でない場合には、前記抽出した組み合わせ(n,m)の前記DAGのノードnからの各辺eについて、
前記辺eに付加されているラベルと前記組み合わせ(n,m)の前記BDDのノードmとに基づいて、前記辺eにより遷移する前記DAGのノードn’と、前記BDDのノードmから遷移可能な前記BDDのノードm’との組み合わせ(n’,m’)を取得し、前記取得した組み合わせ(n’,m’)について、前記DAGのノードn’についての前記最大経路スコアと、前記組み合わせ(s,root)から前記抽出した組み合わせ(n,m)まで到達する経路における最大経路スコアと、前記辺eに付加されているスコアとに基づいて、前記取得した組み合わせ(n’,m’)の評価関数f(n’,m’)の値を計算し、前記取得した組み合わせ(n’,m’)の評価関数f(n’,m’)の値が、前記テーブルAに格納されている前記評価関数f(n’,m’)の値よりも大きい場合に、前記テーブルAに格納されている前記評価関数f(n’,m’)の値を更新し、かつ、前記優先度つきキューに格納されている評価関数f(n’,m’)の値を更新し、又は前記優先度つきキューに前記評価関数f(n’,m’)の値を格納し、
前記優先度つきキューから抽出された前記評価関数f(n,m)の値が最大となる組み合わせ(n,m)の前記DAGのノードnが終端ノードであり、かつ前記BDDのノードmが真となるまで、前記優先度つきキューから前記評価関数f(n,m)の値が最大となる組み合わせ(n,m)を抽出する処理と、前記テーブルAを更新し、かつ、前記優先度つきキューを更新し、又は前記優先度つきキューに前記評価関数f(n’,m’)の値を格納する処理とを繰り返し、
繰り返し処理の過程に基づいてバックトラッキング処理を行い、前記制約を満たす前記ナップサック問題の解を計算する請求項1記載の問題求解装置。
【請求項3】
グラフ変換処理部と、ヒューリスティック関数計算部と、最適解計算部とを含む、問題求解装置における問題求解方法であって、
前記グラフ変換処理部は、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードが前記アイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAG(Directed acyclic graph)に変換し、
前記ヒューリスティック関数計算部は、前記DAGのノードの各々に対して、前記ノードから終端ノードまでの辺のスコアの和が最大になるような経路のスコアの和である最大経路スコアを計算し、
前記最適解計算部は、入力された、論理関数によって表現された前記アイテムの組み合わせに関する制約を表現する二分決定グラフであるBDD(Binary Decision Diagram)と、前記DAGと、前記ヒューリスティック関数計算部により計算されたDAGの各ノードの最大経路スコアとに基づいて、前記制約を満たす前記ナップサック問題の解を計算する
問題求解方法。
【請求項4】
前記DAGは、各辺eに、前記辺eのスコアに応じたラベルが付加されており、
前記最適解計算部により計算することは、前記DAGのノードnと前記BDDのノードmとの組み合わせ(n,m)についての評価関数f(n,m)の各々の値を格納するテーブルAを初期化し、
前記DAGの始点ノードsと前記BDDのルートノードrootとの組み合わせ(s,root)について、
前記DAGの始点ノードsについての前記最大経路スコアに基づいて前記組み合わせ(s,root)の評価関数f(s,root)の値を計算し、前記組み合わせ(s,root)と対応づけて優先度つきキューに格納すると共に、前記評価関数f(s,root)の値を前記テーブルAに格納し
前記優先度つきキューから前記評価関数f(n,m)の値が最大となる前記組み合わせ(n,m)を抽出し、
前記抽出された前記組み合わせ(n,m)の前記DAGのノードnが終端ノードでなく、又は前記組み合わせの前記BDDのノードmが偽でない場合には、前記抽出した組み合わせ(n,m)の前記DAGのノードnからの各辺eについて、
前記辺eに付加されているラベルと前記組み合わせ(n,m)の前記BDDのノードmとに基づいて、前記辺eにより遷移する前記DAGのノードn’と、前記BDDのノードmから遷移可能な前記BDDのノードm’との組み合わせ(n’,m’)を取得し、前記取得した組み合わせ(n’,m’)について、前記DAGのノードn’についての前記最大経路スコアと、前記組み合わせ(s,root)から前記抽出した組み合わせ(n,m)まで到達する経路における最大経路スコアと、前記辺eに付加されているスコアとに基づいて、前記取得した組み合わせ(n’,m’)の評価関数f(n’,m’)の値を計算し、前記取得した組み合わせ(n’,m’)の評価関数f(n’,m’)の値が、前記テーブルAに格納されている前記評価関数f(n’,m’)の値よりも大きい場合に、前記テーブルAに格納されている前記評価関数f(n’,m’)の値を更新し、かつ、前記優先度つきキューに格納されている評価関数f(n’,m’)の値を更新し、又は前記優先度つきキューに前記評価関数f(n’,m’)の値を格納し、
前記優先度つきキューから抽出された前記評価関数f(n,m)の値が最大となる組み合わせ(n,m)の前記DAGのノードnが終端ノードであり、かつ前記BDDのノードmが真となるまで、前記優先度つきキューから前記評価関数f(n,m)の値が最大となる組み合わせ(n,m)を抽出する処理と、前記テーブルAを更新し、かつ、前記優先度つきキューを更新し、又は前記優先度つきキューに前記評価関数f(n’,m’)の値を格納する処理とを繰り返し、
繰り返し処理の過程に基づいてバックトラッキング処理を行い、前記制約を満たす前記ナップサック問題の解を計算する請求項3記載の問題求解方法。
【請求項5】
コンピュータを、請求項1又は請求項2に記載の問題求解装置の各部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、組み合わせ最適化問題のための問題求解装置、方法、及びプログラムに関するものである。
【背景技術】
【0002】
0−1ナップサック問題とは、N個のアイテムの集合{1,...,N}について、それぞれのコストcが非負整数、スコアw(i=1,2,...,N)が実数、そしてコストの合計の上限値Lが非負整数で与えられたときに、アイテムの集合{1,...,N}の可能な部分集合のうち、
【0003】
【数1】
【0004】
を満たしつつ、Σi∈Sを最大化するような解Sを見つける組合せ最適化問題である。
【0005】
ここで、アイテムの組合せに関する離散的な制約とは、たとえば「アイテム1を解Sに含む場合には、アイテム3は解に含んではならない」や、「アイテム1、3、5、及び7のうち少なくともひとつは解に含まなければならない」といった、論理式で表現可能な制約である。
【0006】
従来より、0−1ナップサック問題は行をアイテム番号とし、列をアイテムのコストとするような表にスコアを埋めていく操作として求解できることが知られている。
【0007】
また、この表に代えて有向非巡回グラフを用いて求解する方法も知られている。当該方法では、表を埋める操作に代わって有向非巡回グラフの最長路を探索によって見つける操作を行う。しかし、これらの従来法は高速に求解可能である一方、アイテムの組合せに関する制約を取り扱うことができなかった。
【0008】
さらに、アイテムの組合せに関する離散的な制約が与えられた0−1ナップサック問題の解を求める方法がある(非特許文献1)。当該手法では、前述の方法同様に有向非巡回グラフ上の探索を行うだけでなく、それに加えて、論理関数によって表現されたアイテムの組み合わせに関する制約を二分決定グラフ(Binary Decision Diagram:以後BDDとする)とよばれるデータ構造を用いて表現することによって、制約付きの0−1ナップサック問題を解くことができる。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】Masaaki Nishino et.al., “BDD-constrained search: a unified approach for constrained shortest path problems”, In Proc. of AAAI-15
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかし、上述した非特許文献1の方法では、BDDを用いた従来法制約付き0−1ナップサック問題を求解できる一方で、制約を表現するためのBDDが大きくなると処理に時間がかかるという問題がある。また、一般に、制約が複雑になるほどBDDは大きくなる傾向があるため、複雑な制約のもとで問題を解くのには不向きであるという問題がある。
【0011】
本発明では、上記問題点を解決するために成されたものであり、制約が付加された0−1ナップサック問題の解を高速に求めることができる問題求解装置、方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0012】
上記目的を達成するために、第1の発明に係る問題求解装置は、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードが前記アイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAG(Directed acyclic graph)に変換するグラフ変換処理部と、前記DAGのノードの各々に対して、前記ノードから終端ノードまでの辺のスコアの和が最大になるような経路のスコアの和である最大経路スコアを計算するヒューリスティック関数計算部と、入力された、論理関数によって表現された前記アイテムの組み合わせに関する制約を表現する二分決定グラフであるBDD(Binary Decision Diagram)と、前記DAGと、前記ヒューリスティック関数計算部により計算されたDAGの各ノードの最大経路スコアとに基づいて、前記制約を満たす前記ナップサック問題の解を計算する最適解計算部と、を含んで構成されている。
【0013】
第2の発明に係る問題求解方法は、グラフ変換処理部と、ヒューリスティック関数計算部と、最適解計算部とを含む、問題求解装置における問題求解方法であって、前記グラフ変換処理部は、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードが前記アイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAG(Directed acyclic graph)に変換し、前記ヒューリスティック関数計算部は、前記DAGのノードの各々に対して、前記ノードから終端ノードまでの辺のスコアの和が最大になるような経路のスコアの和である最大経路スコアを計算し、前記最適解計算部は、入力された、論理関数によって表現された前記アイテムの組み合わせに関する制約を表現する二分決定グラフであるBDD(Binary Decision Diagram)と、前記DAGと、前記ヒューリスティック関数計算部により計算されたDAGの各ノードの最大経路スコアとに基づいて、前記制約を満たす前記ナップサック問題の解を計算する。
【0014】
第1及び第2の発明によれば、グラフ変換処理部により、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードがアイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAG(Directed acyclic graph)に変換し、ヒューリスティック関数計算部により、DAGのノードの各々に対して、ノードから終端ノードまでの辺のスコアの和が最大になるような経路のスコアの和である最大経路スコアを計算し、最適解計算部により、入力された、論理関数によって表現されたアイテムの組み合わせに関する制約を表現する二分決定グラフであるBDD(Binary Decision Diagram)と、DAGと、ヒューリスティック関数計算部により計算されたDAGの各ノードの最大経路スコアとに基づいて、制約を満たすナップサック問題の解を計算する。
【0015】
このように、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードがアイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAGに変換し、DAGのノードの各々に対して、最大経路スコアを計算し、入力された、BDDと、DAGと、計算されたDAGの各ノードの最大経路スコアとに基づいて、制約を満たすナップサック問題の解を計算することにより、制約が付加された0−1ナップサック問題の解を高速に求めることができる。
【0016】
また、第1及び第2の発明において、前記DAGは、各辺eに、前記辺eのスコアに応じたラベルが付加されており、前記最適解計算部は、前記DAGのノードnと前記BDDのノードmとの組み合わせ(n,m)についての評価関数f(n,m)の各々の値を格納するテーブルAを初期化し、前記DAGの始点ノードsと前記BDDのルートノードrootとの組み合わせ(s,root)について、前記DAGの始点ノードsについての前記最大経路スコアに基づいて前記組み合わせ(s,root)の評価関数f(s,root)の値を計算し、前記組み合わせ(s,root)と対応づけて優先度つきキューに格納すると共に、前記評価関数f(s,root)の値を前記テーブルAに格納し前記優先度つきキューから前記評価関数f(n,m)の値が最大となる前記組み合わせ(n,m)を抽出し、前記抽出された前記組み合わせ(n,m)の前記DAGのノードnが終端ノードでなく、又は前記組み合わせの前記BDDのノードmが偽でない場合には、前記抽出した組み合わせ(n,m)の前記DAGのノードnからの各辺eについて、前記辺eに付加されているラベルと前記組み合わせ(n,m)の前記BDDのノードmとに基づいて、前記辺eにより遷移する前記DAGのノードn’と、前記BDDのノードmから遷移可能な前記BDDのノードm’との組み合わせ(n’,m’)を取得し、前記取得した組み合わせ(n’,m’)について、前記DAGのノードn’についての前記最大経路スコアと、前記組み合わせ(s,root)から前記抽出した組み合わせ(n,m)まで到達する経路における最大経路スコアと、前記辺eに付加されているスコアとに基づいて、前記取得した組み合わせ(n’,m’)の評価関数f(n’,m’)の値を計算し、前記取得した組み合わせ(n’,m’)の評価関数f(n’,m’)の値が、前記テーブルAに格納されている前記評価関数f(n’,m’)の値よりも大きい場合に、前記テーブルAに格納されている前記評価関数f(n’,m’)の値を更新し、かつ、前記優先度つきキューに格納されている評価関数f(n’,m’)の値を更新し、又は前記優先度つきキューに前記評価関数f(n’,m’)の値を格納し、前記優先度つきキューから抽出された前記評価関数f(n,m)の値が最大となる組み合わせ(n,m)の前記DAGのノードnが終端ノードであり、かつ前記BDDのノードmが真となるまで、前記優先度つきキューから前記評価関数f(n,m)の値が最大となる組み合わせ(n,m)を抽出する処理と、前記テーブルAを更新し、かつ、前記優先度つきキューを更新し、又は前記優先度つきキューに前記評価関数f(n’,m’)の値を格納する処理とを繰り返し、繰り返し処理の過程に基づいてバックトラッキング処理を行い、前記制約を満たす前記ナップサック問題の解を計算してもよい。
【0017】
また、本発明のプログラムは、コンピュータを、上記の問題求解装置を構成する各部として機能させるためのプログラムである。
【発明の効果】
【0018】
以上説明したように、本発明の問題求解装置、方法、及びプログラムによれば、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードがアイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAGに変換し、DAGのノードの各々に対して、最大経路スコアを計算し、入力された、BDDと、DAGと、計算されたDAGの各ノードの最大経路スコアとに基づいて、制約を満たすナップサック問題の解を計算することにより、制約が付加された0−1ナップサック問題の解を高速に求めることができる。
【図面の簡単な説明】
【0019】
図1】本実施形態に係る問題求解装置の機能的構成を示すブロック図である。
図2】論理関数及びBDDの一例を示す図である。
図3】インスタンス及びDAGの一例を示す図である。
図4】本実施形態に係る問題求解装置における問題求解処理ルーチンを示すフローチャートである。
図5】本実施形態に係る問題求解装置におけるDAG変換処理ルーチンを示すフローチャートである。
図6】本実施形態に係る問題求解装置におけるナップサック問題計算処理ルーチンを示すフローチャートである。
【発明を実施するための形態】
【0020】
以下、図面を参照して本発明の実施形態を詳細に説明する。
【0021】
<本発明の実施形態に係る問題求解装置の構成>
次に、本発明の実施形態に係る問題求解装置の構成について説明する。図1に示すように、本実施形態に係る問題求解装置100は、CPUと、RAMと、後述する各種処理ルーチンを実行するためのプログラムや各種データを記憶したROMと、を含むコンピュータで構成することが出来る。この問題求解装置100は、機能的には図1に示すように入力部10と、演算部20と、出力部90とを含んで構成されている。
【0022】
入力部10は、ナップサック問題のインスタンスを受け付ける。ここで、ナップサック問題のインスタンスとは、N個のアイテムiの各々についてのコストcとスコアwとの組、及び合計コストの上限値Lからなる。
【0023】
また、入力部10は、ナップサック問題の各アイテムiが入力変数に対応するような制約を表す論理関数f(x,...,x)を表現したBDDを受け付ける。ここで、BDDは論理関数を有向非巡回グラフとして表現する二分決定グラフのデータ構造であり、例えば図2(a)に示す論理関数は、図2(b)のようなBDDとして表現される。図2(b)中の丸いノードは分岐ノードとよばれ、ラベルが与えられ、実線、又は破線で指された二種類の子ノードを持つ。また、xがアイテム1に対応し、xがアイテム2に対応するということになる。
【0024】
分岐ノードのラベルは、論理関数のいずれかの入力変数に対応する。実線で指された子ノードは1−子ノードと呼び、破線で指された子ノードは0−子ノードとよぶ。図2(b)中の四角いノードは終端ノードとよばれ、1−終端ノード(図2(b)中Τ)と、0−終端ノード(図2(b)中⊥)の二種類の終端ノードが存在する。なお、計算機中では図2(c)のように、BDDの各ノードについて、ラベル、0−子ノードのアドレス、及び1−子ノードのアドレスを格納したテーブルによって表現される。また、図2(b)中のTを真の結果とし、図2(b)中の⊥を偽の結果とする。
【0025】
演算部20は、グラフ変換処理部22と、ヒューリスティック関数計算部24と、最適解計算部26とを含んで構成されている。
【0026】
グラフ変換処理部22は、入力部10において受け付けたナップサック問題のインスタンスに基づいて、当該ナップサック問題を、有向非巡回グラフ上での最長経路探索問題へと変換する。具体的には、入力部10において受け付けたナップサック問題のインスタンスが、図3(a)に示すような場合、図3(b)に示すような、辺にスコアを付加した有向非巡回グラフ(Directed acyclic graph:以後、DAGとする。)に変換する。
【0027】
ヒューリスティック関数計算部24は、グラフ変換処理部22において取得したDAGに基づいて、当該DAGに含まれるノードnの各々について、実数を返すようなヒューリスティック関数h(n)の値を計算する。ここで、関数h(n)は、ノードnからゴールである終端ノードtまで遷移する場合の、遷移する辺に付加されたスコアの総和が最大となる最大経路スコアの見積もりを与えるものである。
【0028】
最適解計算部26は、グラフ変換処理部22において取得したDAGと、ヒューリスティック関数計算部24において取得したDAGに含まれるノードnの各々のヒューリスティック関数h(n)の値と、入力部10において受け付けたBDDと、メモリ(図示省略)に記憶されている空の優先度つきキューQ、テーブルA、及びテーブルBとに基づいて、当該BDDにより制約が追加された、当該DAGが表すナップサック問題の最適解を計算し、出力部90から出力する。
【0029】
ここで、優先度つきキューQは、DAGに含まれるノードnとBDDに含まれるノードmとのペア(n,m)を受け取り、評価関数f(n,m)の値が大きなペア(n,m)から順に出力することができるものである。また、優先度つきキューQは、格納されているペア(n,m)に紐づく評価関数f(n,m)の値を更新できるものとする。
【0030】
また、テーブルAは、DAGに含まれるノードnとBDDに含まれるノードmとのペア(n,m)を受け取り、評価関数f(n,m)の値を返すテーブルである。また、テーブルBは、ノードの遷移に関する情報を格納するテーブルである。
【0031】
<本発明の実施形態に係る問題求解装置の作用>
次に、本発明の実施形態に係る問題求解装置100の作用について説明する。問題求解装置100は、入力部10によって、ナップサック問題のインスタンスと、BDDとを受け付けると、問題求解装置100によって、図4に示す問題求解処理ルーチンが実行される。
【0032】
まず、図4に示す問題求解処理のステップS10で、入力部10において受け付けたナップサック問題のインスタンスに基づいて、当該ナップサック問題に対応する辺スコア付き有向巡回グラフに変換する。当該ステップS10のDAG変換処理ルーチンを図5において詳述する。
【0033】
図5のDAG変換処理におけるステップS110では、入力部10において受け付けたナップサック問題のインスタンスに含まれる各アイテム番号i=1,...,Nの各々と、合計コストの上限値Lまでの各非負の整数j=0,...,Lの各々との全てのペアに対応したノード(i,j)を作成し、グラフを作成する。
【0034】
次に、ステップS120で、ステップS110において取得したグラフの始点に対応するノードsと、当該グラフの終点に対応するノードtとを作成し、当該グラフに追加する。
【0035】
次に、ステップS130で、ステップS120において取得したグラフのノードsからノード(1,c)へと結ぶ辺を追加し、当該辺のスコアをwに設定する。また、当該辺にラベルzを対応づける。
【0036】
次に、ステップS140で、ステップS130において取得したグラフのノードsからノード(1,0)へと結ぶ辺を追加し、当該辺のスコアを0に設定する。また、当該辺にラベルlを対応づける。
【0037】
次に、ステップS150で、ステップS140において取得したグラフの各jに対応するノード(N,j)の各々について、当該ノード(N,j)からノードtへと結ぶ辺を追加し、当該辺のスコアを0に設定する。
【0038】
次に、ステップS160で、ステップS150において取得したグラフの条件「
【0039】
【数2】
【0040】
、かつ
【0041】
【数3】
【0042】
」を満たすノード(i,j)の各々について、ノード(i−1,j−c)からノード(i,j)へと結ぶ辺を追加し、当該辺のスコアをwに設定し、当該辺にラベルzを対応づける。
【0043】
次に、ステップS170で、ステップS160において取得したグラフの条件「
【0044】
【数4】
【0045】
」を満たすノード(i,j)の各々について、ノード(i−1,j)からノード(i,j)へと結ぶ辺を追加し、当該辺のスコアを0に設定し、当該辺にラベルlを対応づける。
【0046】
次に、ステップS180で、ステップS170において取得したグラフのノードsから到達可能なノードの集合から導出される誘導グラフを作成する。ここで、誘導グラフとは、ノードsを始点とするノードの全てを含んだグラフのことをいう。
【0047】
次に、ステップS185で、ステップS180において取得した誘導グラフにノードtを含むか否かを判定する。誘導グラフにノードtを含む場合には、DAG変換処理は、ステップS190へ移行する。一方、誘導グラフにノードtを含まない場合には、DAG変換処理は、図4に示す問題求解処理へ移行し、問題求解処理ルーチンを終了する。
【0048】
次に、ステップS190で、ステップS180において取得した誘導グラフを出力して、DAG変換処理ルーチンを終了する。
【0049】
図4に示す問題求解処理のステップS20で、ステップS10において取得したDAGに基づいて、動的計画法に従って、当該DAGの各ノードnに対して、当該ノードnから終端ノードtまでの、辺スコアの和(経路長)が最大となるような経路の最大経路スコアを計算し、ヒューリスティック関数h(n)の値として取得する。なお、ノードnがノードtと一致する場合には、経路のスコアは0である。また、動的計画法を用いることにより、有向非巡回グラフの全ノードに対して最大経路スコアの計算を効率的に計算できる。
【0050】
次に、ステップS30で、入力部10において受け付けたBDDと、ステップS10において取得したDAGと、ステップS20において取得したヒューリスティック関数h(n)とに基づいて、当該BDDの制約を満たす0−1ナップサック問題の解を計算する。当該ステップS30のナップサック問題計算処理を図6において詳述する。
【0051】
図6に示すナップサック問題計算処理ルーチンのステップ210で、メモリ(図示省略)から、空の優先度つきキューQ、テーブルA、及びテーブルBを読み込む。
【0052】
次に、ステップS212で、ステップS210において取得したテーブルAを、DAGに含まれるノードnとBDDに含まれるノードmとの全てのペアに対して、十分に小さな値を返すように、各ペアの評価関数f(n,m)の値を初期化する。
【0053】
次に、ステップS214で、ステップS210において取得した優先度つきキューQに、ステップS10において取得したDAGの始点ノードsと入力部10において受け付けたBDDのルートノード(以後、ノードrооtとする)とのペアについて、当該ペアと、ステップS20において取得した当該ペアのヒューリスティック関数h(s)の値とを格納する。ここで、ヒューリスティック関数h(s)の値とは、始点ノードsにおける最大経路スコアの見積もりの値である。
【0054】
次に、ステップS216で、ステップS20において取得したノードsとノードrооtとのペアについての評価関数f(s,rооt)の値を、ステップS10において取得したDAGと、ステップS20において取得した当該ペアのヒューリスティック関数h(s)とに基づいて、下記(1)式に従って、計算し、当該計算した結果で、テーブルAを更新する。
【0055】
【数5】
【0056】
ここで、g(n,m)は、状態(s,rооt)から(n,m)に到達するまでのスコア最大の経路の合計スコアであり、g(s,roоt)=0である。
【0057】
次に、ステップS218で、テーブルAと、優先度つきキューQとに基づいて、優先度つきキューQから評価関数f(n,m)の値を最大とするペア(n,m)を1つ抽出する。
【0058】
次に、ステップS220で、ステップS218において抽出したペア(n,m)について、n=終点に対応するノードtかつ、m=終端ノードTである場合には、ナップサック問題計算処理はステップS246へ移行する。一方、ペア(n,m)について、n=ノードt以外であり、又はm=終端ノードT以外である場合には、ナップサック問題計算処理はステップS222へ移行する。
【0059】
次に、ステップS222では、ステップS10において取得したDAGにおいてステップS218において取得したペア(n,m)のノードnを特定し、ノードnを始点とする辺eの各々のうち、処理対象となる辺eを決定する。
【0060】
次に、ステップS224で、処理対象となる辺eについて、入力部10において取得したBDDと、ステップS10において取得したDAGとに基づいて、BDD上のノードmから遷移可能なノードm’を求める。ここで、m’は、下記(2)式に従って求められる。
【0061】
【数6】
【0062】
ここで、vは辺eのラベルを表す。そのため、vはz、又はlの何れかとなる。fоllwBDD(v,m)は、BDDの変数mとDAGにおける処理対処となる辺eのラベルvを受け取り、mから変数順序がxと等しいかそれ以上であるノードに辿り着くまで、mから「0−子」ノードに順に遷移する。なお、ノードm自体が、xと等しいかそれ以上である場合には、ノードは遷移しない。
【0063】
そして、BDD上の辿りついた変数順序がxと等しいかそれ以上であるノードのラベルがxであり、かつv=zで有る場合には、当該ノードの「1−子」に対応するノードをm’のノードとして抽出し、当該ノードのラベルがxであり、かつv=lで有る場合には、当該ノードの「0−子」に対応するノードをm’のノードとして抽出する。一方、BDD上の辿りついた変数順序がxでない場合には、当該ノードをm’のノードとして抽出する。
【0064】
次に、ステップS226で、処理対象の辺eの終点のノードn’と、ステップS218において取得したノードのペア(n,m)の評価関数f(n,m)の値と、ステップS20において取得したヒューリスティック関数h(n)の値と、ステップS20において取得したノードn’のヒューリスティック関数h(n’)の値と、ステップS10において取得したDAGから求まる処理対処となる辺eのスコアw(e)とに基づいて、f(n’,m’)を下記(3)式に従って計算する。なお、g(n,m)は、f(n,m)からh(n)の値を引いたものである。
【0065】
【数7】
【0066】
次に、ステップS228で、ステップS226において取得した評価関数f(n’,m’)の値が、テーブルAに格納されているA(n’,m’)の値よりも大きいか否かを判定する。評価関数f(n’,m’)の値が、テーブルAに格納されているA(n’,m’)の値よりも大きい場合には、ナップサック問題計算処理は、ステップS230へ移行する。一方、評価関数f(n’,m’)の値が、テーブルAに格納されているA(n’,m’)の値以下である場合には、ナップサック問題計算処理は、ステップS240へ移行する。
【0067】
次に、ステップS230で、ステップS226において取得した評価関数f(n’,m’)の値で、テーブルAに格納されているA(n’,m’)の値を更新する。
【0068】
次に、ステップS232で、ステップS218において取得したペア(n,m)と、ステップS224、及びステップS226において取得したノードm’、及びノードn’とに基づいて、テーブルBに、B(n’,m’)=(n,m)を格納する。
【0069】
次に、ステップS234で、優先度つきキューQにステップS224、及びステップS226において取得したノードm’、及びノードn’の組み合わせの((n’,m’),f(n’,m’))が含まれているか否かを判定する。((n’,m’),f(n’,m’))が含まれている場合には、ナップサック問題計算処理は、ステップS238へ移行する。((n’,m’),f(n’,m’))が含まれていない場合には、ナップサック問題計算処理は、ステップ236へ移行する。
【0070】
ステップS236で、優先度つきキューQに、ステップS224、及びステップS226において取得したノードm’、及びノードn’と、ステップS226において取得した評価関数f(n’,m’)の値とに基づいて、((n’,m’),f(n’,m’))を格納する。
【0071】
ステップS238で、優先度つきキューQに格納されている((n’,m’),f(n’,m’))について、評価関数f(n’,m’)の値を、ステップS226において取得した評価関数f(n’,m’)の値に更新する。
【0072】
次に、ステップS240で、ステップS222において特定したノードnを始点とする辺eの全てについて、ステップS224〜ステップS236、又はステップS238についての処理を終了したか否かを判定する。当該ノードnを始点とする全ての辺eについて、ステップS224〜ステップS236、又はステップS238についての処理を終了している場合には、ナップサック問題計算処理は、ステップ242へ移行する。一方、当該ノードnを始点とする全ての辺eについて、ステップS224〜ステップS236、又はステップS238までの処理を終了した場合には、ナップサック問題計算処理は、ステップ222へ移行し、処理対象となる辺eを変更し、ステップS224〜ステップS240までの処理を繰り返す。
【0073】
次に、ステップS242で、優先度つきキューQが空であるか否かを判定する。優先度つきキューQが空である場合には、最適解なしとして、ナップサック問題計算処理ルーチンを終了し、問題求解処理ルーチンを終了する。一方、優先度つきキューQが空でない場合には、ナップサック問題計算処理ルーチンは、ステップS218へ移行し、ステップS218からの処理を繰り返す。
【0074】
ステップS246で、テーブルBに基づいて、バックトラッキング処理を行う。具体的には、テーブルBを用いて(n,m)←B(n,m)を、(n,m)=(s,rооt)となるまで繰り返し計算し、出現した(n,m)の全てを記録することで、ノードsからノードtまでの制約を満たす最大経路スコアの経路を取得する。なお、ここで得られた最大経路スコアの経路が当該ナップサック問題の最適解となる。また、最適解を取得したらナップサック問題計算処理ルーチンを終了する。
【0075】
図4に示す問題計算処理ルーチンのステップS40では、ステップS30において取得した最適解を出力部90から出力して、問題求解処理ルーチンを終了する。
【0076】
以上説明したように、本実施形態に係る問題求解装置によれば、スコアとコストとを持つ複数のアイテムから、合計コストの上限値L以下でスコアを最大化するアイテムの組み合わせを選択するナップサック問題を、各ノードがアイテムを表し、かつ、各辺にスコアを付加した辺スコア付き有向非巡回グラフであるDAGに変換し、DAGのノードの各々に対して、最大経路スコアを計算し、入力された、BDDと、DAGと、計算されたDAGの各ノードの最大経路スコアとに基づいて、制約を満たすナップサック問題の解を計算することにより、制約が付加された0−1ナップサック問題の解を高速に求めることができる。
【0077】
また、0−1ナップサック問題に制約が追加された問題を、グラフの最長経路長を用いたヒューリスティック関数を用いて探索順序を工夫することによって、高速に制約が追加された0−1ナップサック問題の解を求めることができる。
【0078】
また、制約がない状態で、0−1ナップサック問題を解いた結果を、探索順序を決めるためのヒントとして用いることで、最適解が見つかるまでの探索ステップ数を減らして、高速な解の発見を実現することができる。
【0079】
なお、本発明は、上述した実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【0080】
また、本願明細書中において、プログラムが予めインストールされている実施形態として説明したが、当該プログラムを、コンピュータ読み取り可能な記録媒体に格納して提供することも可能であるし、ネットワークを介して提供することも可能である。
【符号の説明】
【0081】
10 入力部
20 演算部
22 グラフ変換処理部
24 ヒューリスティック関数計算部
26 最適解計算部
90 出力部
100 問題求解装置
図1
図2
図3
図4
図5
図6