JP2018112784A - 厳密敷き詰め計算装置、方法、及びプログラム - Google Patents

厳密敷き詰め計算装置、方法、及びプログラム Download PDF

Info

Publication number
JP2018112784A
JP2018112784A JP2017001284A JP2017001284A JP2018112784A JP 2018112784 A JP2018112784 A JP 2018112784A JP 2017001284 A JP2017001284 A JP 2017001284A JP 2017001284 A JP2017001284 A JP 2017001284A JP 2018112784 A JP2018112784 A JP 2018112784A
Authority
JP
Japan
Prior art keywords
node
strict
subproblem
branch
zdd
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017001284A
Other languages
English (en)
Other versions
JP6709740B2 (ja
Inventor
正彬 西野
Masaaki Nishino
正彬 西野
宜仁 安田
Yoshihito Yasuda
宜仁 安田
真一 湊
Shinichi Minato
真一 湊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hokkaido University NUC
Nippon Telegraph and Telephone Corp
Original Assignee
Hokkaido University NUC
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hokkaido University NUC, Nippon Telegraph and Telephone Corp filed Critical Hokkaido University NUC
Priority to JP2017001284A priority Critical patent/JP6709740B2/ja
Publication of JP2018112784A publication Critical patent/JP2018112784A/ja
Application granted granted Critical
Publication of JP6709740B2 publication Critical patent/JP6709740B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

【課題】厳密敷き詰め問題又は一般化厳密敷き詰め問題を高速に解くことができる厳密敷き詰め計算装置、方法、及びプログラムを提供する。【解決手段】厳密敷き詰め計算装置10は、キャッシュテーブル18Aと、ユニークテーブル18Bと、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、3つ組データに対応するノードの情報をユニークテーブル18Bに格納するZDD構築演算部16と、厳密敷き詰め問題を表す二値行列の入力を受け付ける問題入力部12と、入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、キャッシュテーブル18A及びユニークテーブル18Bを用いて、行番号を解に含めたときに得られる部分問題を求め、求められた部分問題を再帰的に解く再帰計算部14と、を備える。【選択図】図4

Description

本発明は、厳密敷き詰め計算装置、方法、及びプログラムに係り、特に、厳密敷き詰め問題の全ての解を列挙するための厳密敷き詰め計算装置、方法、及びプログラムに関する。
ポリオミノや数独などのパズルの解を発見する問題は、厳密敷き詰め問題と呼ばれる組合せ数学の問題を解くことに相当する。厳密敷き詰め問題とは、全体集合Uの部分集合からなる集合族Sが与えられたときに、

に対して

を満たすようなS⊆Sを見つける問題である。
また、パズルの一種であるNクイーン問題を解くことは、厳密敷き詰め問題を拡張した、一般化厳密敷き詰め問題を解くことに相当する。一般化厳密敷き詰め問題は、

であるような集合U,U’に対して、U∪U’の部分集合からなる集合族Sの部分集合のうち、

を満たすようなS⊆Sを見つける問題である。
厳密敷き詰め問題と一般化厳密敷き詰め問題のすべての解を見つけるための手法として、アルゴリズムDLX(以下、DLXという。)が知られている(例えば、非特許文献1を参照)。DLXは、バックトラックを行いながら再帰的に深さ優先探索を実行し、元の敷き詰め問題を部分問題に分割しながら、部分問題を逐次的に解くことによって、厳密敷き詰め問題,一般化厳密敷き詰め問題の解を全て発見する手法である。
一方、組み合わせ問題の解を得るためにゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagrams:ZDD)を構築する手法が知られている(例えば、非特許文献2を参照)。
Donald E. Knuth, "Dancing Links", Millennial Perspectives in Computer Science, 2000, 187-214. Shin-ichi Minato, "Zero-suppressed BDDs for Set Manipulation in Combinatorial Problems", DAC'93:Proceedings of the 30th international conference on Design automation, 1993.
ところで、DLXの深さ優先探索では、同じ部分問題が複数回出現する可能性がある。同じ部分問題の解は等しいため、何度も同じ問題を解かなければならないのは計算時間の増加につながる。この課題に対する素朴な解決策として、部分問題とその解のペアをキャッシュテーブルに格納することが考えられる。同じ部分問題が複数回出現したならば、その問題を再度解くことはせずに、キャッシュテーブルに格納されている解を用いることで繰り返し計算を避けることができる
しかしながら、部分問題の解の数は膨大な数になることがある。そのような場合はキャッシュテーブルに解を格納するために必要な記憶容量が増大し、また部分問題の解をもとに主問題の解を構成する課程に多大な計算時間を要することになる。そのため、素朴なキャッシュテーブルの使用はDLXの高速化に寄与しない。
本発明は、上記の事情に鑑みてなされたもので、厳密敷き詰め問題又は一般化厳密敷き詰め問題を高速に解くことができる厳密敷き詰め計算装置、方法、及びプログラムを提供することを目的とする。
上記目的を達成するために、第1の発明に係る厳密敷き詰め計算装置は、二値行列により表される厳密敷き詰め問題又は一般化厳密敷き詰め問題の部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記部分問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagram)の根ノードを示すエントリのペアを保持するキャッシュテーブルと、前記厳密敷き詰め問題又は一般化厳密敷き詰め問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフに関する各ノードの情報を保持するユニークテーブルと、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、前記3つ組データに対応するノードの情報を前記ユニークテーブルに格納するZDD構築演算部と、厳密敷き詰め問題又は一般化厳密敷き詰め問題を表す二値行列の入力を受け付ける問題入力部と、前記問題入力部により入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を再帰的に解く再帰計算部であって、前記求められた部分問題を解くときに、前記部分問題を表す部分行列中に存在する列番号の集合に対応するキーを用いて、前記キャッシュテーブルから検索し、前記キーに対応する前記ペアが検索された場合、前記ペアのエントリを、前記部分問題の解を表すゼロサプレス型二分決定グラフの根ノードとし、前記キーに対応する前記ペアが検索されなかった場合、前記部分問題を表す部分行列に基づいて、選択される列番号を1とする行番号の各々に対し、前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を解き、前記解に含めた前記行番号をラベルとし、前記部分問題の解を表す前記ゼロサプレス型二分決定グラフの根ノードをhi枝の指すノードとし、

又は直前の前記行番号に対する部分問題を解いたときに前記ZDD構築演算部により格納された前記ノードをlo枝の指すノードとした前記3つ組データを、前記ZDD構築演算部に入力し、前記部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記ZDD構築演算部により格納された前記ノードを示すエントリのペアを、前記キャッシュテーブルに格納する再帰計算部と、を備える。
第2の発明に係る厳密敷き詰め計算方法は、二値行列により表される厳密敷き詰め問題又は一般化厳密敷き詰め問題の部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記部分問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagram)の根ノードを示すエントリのペアを保持するキャッシュテーブルと、前記厳密敷き詰め問題又は一般化厳密敷き詰め問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフに関する各ノードの情報を保持するユニークテーブルと、を備えた厳密敷き詰め計算装置における厳密敷き詰め計算方法であって、ZDD構築演算部が、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、前記3つ組データに対応するノードの情報を前記ユニークテーブルに格納するステップと、問題入力部が、厳密敷き詰め問題又は一般化厳密敷き詰め問題を表す二値行列の入力を受け付けるステップと、再帰計算部が、前記問題入力部により入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を再帰的に解く場合において、前記求められた部分問題を解くときに、前記部分問題を表す部分行列中に存在する列番号の集合に対応するキーを用いて、前記キャッシュテーブルから検索し、前記キーに対応する前記ペアが検索された場合、前記ペアのエントリを、前記部分問題の解を表すゼロサプレス型二分決定グラフの根ノードとし、前記キーに対応する前記ペアが検索されなかった場合、前記部分問題を表す部分行列に基づいて、選択される列番号を1とする行番号の各々に対し、前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を解き、前記解に含めた前記行番号をラベルとし、前記部分問題の解を表す前記ゼロサプレス型二分決定グラフの根ノードをhi枝の指すノードとし、

又は直前の前記行番号に対する部分問題を解いたときに前記ZDD構築演算部により格納された前記ノードをlo枝の指すノードとした前記3つ組データを、前記ZDD構築演算部に入力し、前記部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び前記ZDD構築演算部により格納された前記ノードを示すエントリのペアを、前記キャッシュテーブルに格納するステップと、を含む。
第1及び第2の発明によれば、キャッシュテーブルは、二値行列により表される厳密敷き詰め問題又は一般化厳密敷き詰め問題の部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、部分問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフの根ノードを示すエントリのペアを保持する。ユニークテーブルは、厳密敷き詰め問題又は一般化厳密敷き詰め問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフに関する各ノードの情報を保持する。ZDD構築演算部は、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、3つ組データに対応するノードの情報をユニークテーブルに格納する。問題入力部は、厳密敷き詰め問題又は一般化厳密敷き詰め問題を表す二値行列の入力を受け付ける。再帰計算部は、問題入力部により入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、行番号を解に含めたときに得られる部分問題を求め、求められた部分問題を再帰的に解く場合において、求められた部分問題を解くときに、部分問題を表す部分行列中に存在する列番号の集合に対応するキーを用いて、キャッシュテーブルから検索し、キーに対応するペアが検索された場合、ペアのエントリを、部分問題の解を表すゼロサプレス型二分決定グラフの根ノードとし、キーに対応するペアが検索されなかった場合、部分問題を表す部分行列に基づいて、選択される列番号を1とする行番号の各々に対し、行番号を解に含めたときに得られる部分問題を求め、求められた部分問題を解き、解に含めた行番号をラベルとし、部分問題の解を表すゼロサプレス型二分決定グラフの根ノードをhi枝の指すノードとし、

又は直前の行番号に対する部分問題を解いたときにZDD構築演算部により格納されたノードをlo枝の指すノードとした3つ組データを、ZDD構築演算部に入力し、部分問題を表す部分行列中に存在する列番号の集合を示すキー、及びZDD構築演算部により格納されたノードを示すエントリのペアを、キャッシュテーブルに格納する。
このように、厳密敷き詰め問題又は一般化厳密敷き詰め問題を高速に解くことができる。また、ZDDの根ノードを記憶しておけばよいため、キャッシュテーブルの記憶容量の増大を抑制することができる。
また、第1の発明に係る厳密敷き詰め計算装置は、前記ユニークテーブルが、前記ノードの情報として、ノードID、ラベル、hi枝の指すノード、及びlo枝の指すノードの4つの項目を1組とする4つ組データを保持し、前記ZDD構築演算部が、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、前記3つ組データに対応するノードの情報を前記ユニークテーブルから検索し、前記3つ組データに対応する前記ノードの情報が検索されなかった場合、前記3つ組データに対応するノードを作成して、前記ノードの情報を、前記ユニークテーブルに格納してもよい。
また、第1の発明に係る厳密敷き詰め計算装置は、前記再帰計算部が、前記キャッシュテーブルに保持されている複数のペアの個数が上限に達している状態において新しいペアを追加する場合、前記複数のペアの1つに代えて、前記新しいペアを追加してもよい。
本発明に係る厳密敷き詰め計算プログラムは、コンピュータを、第1の発明に係る厳密敷き詰め計算装置の各部として機能させるためのプログラムである。
以上説明したように、本発明に係る厳密敷き詰め計算装置、方法、及びプログラムによれば、厳密敷き詰め問題又は一般化厳密敷き詰め問題を高速に解くことができる。
実施形態に係る厳密敷き詰め問題を表す行列の一例を示す図である。 実施形態に係るDLXのアルゴリズムの一例を示す図である。 実施形態に係るZDDの一例を示す模式図である。 第1の実施形態に係る厳密敷き詰め計算装置の機能的な構成の一例を示すブロック図である。 第1の実施形態に係る厳密敷き詰め計算プログラムによる処理の流れの一例を示すフローチャートである。 第1の実施形態に係る厳密敷き詰め計算アルゴリズムの一例を示す図である。 第1の実施形態に係る厳密敷き詰め計算アルゴリズムのサブルーチンの一例を示す図である。
以下、図面を参照して、本発明を実施するための形態の一例について詳細に説明する。
[本発明の実施形態の概要]
本実施形態においては、DLXを実行しながら、キャッシュテーブルを用いて、厳密敷き詰め問題、もしくは、一般化厳密敷き詰め問題の解の集合を表現するZDDを構築する。構築されたZDDは、全ての解集合を有向非巡回グラフとして表現する。このZDDは、DLXの実行中に出現する部分問題の全ての解の集合を部分グラフとして含んでいる。そのため、部分問題の解を格納するキャッシュテーブルは、部分問題の解集合を表す部分グラフの根ノードを記憶しておけばよく、キャッシュテーブルの記憶容量の増大を抑制することができる。また、ZDDを用いることで部分問題の部分解の集合から主問題の解を求めることも定数時間で実行できるため、DLXを高速化することが可能となる。
以下、本実施形態に係る厳密敷き詰め問題、DLX、及びZDDについて説明する。
図1は、本実施形態に係る厳密敷き詰め問題を表す行列の一例を示す図である。
図1に示すように、厳密敷き詰め問題は、二値行列を用いて表現することができる。
行列は、|S|行、|U|列からなり、各列番号が全体集合Uに含まれる各要素に対応し、各行ベクトルが集合族Sに含まれる各要素に対応している。すなわち、図1の例に示す行列は、U={A,B,C,D,E,F}、S={1,2,3,4,5}={{A,B,C,E},{A,B},{D,F},{C,D,F},{C,E}}であるような厳密敷き詰め問題を表現している。厳密敷き詰めSは各列について必ず1つだけ1となる要素が含まれるような行ベクトルの組合せとして表現される。この例では、{1,3}と{2,3,5}とが厳密敷き詰めとなる。従って、全ての厳密敷き詰めの集合は、{1,...,5}を全体集合とする集合族{{1,3},{2,3,5}}として表現される。
一般化厳密敷き詰め問題も二値行列を用いて表現することができる。行列は、|S|行、|U|+|U’|列からなり、各行ベクトルが集合族Sに含まれる各要素に対応する。そして、一般化厳密敷き詰めSは,最初の|U|列について必ず1つだけ1となる要素が含まれ、かつ、残りの|U’|列については高々1つだけ1となる要素が含まれるような行ベクトルの組み合わせとして表現される。
DLXは、深さ優先のバックトラックを用いた探索によって厳密敷き詰め問題のすべての解を発見するアルゴリズムである。
図2は、本実施形態に係るDLXのアルゴリズムの一例を示す図である。
図2に示すように、DLXは手続きSearch(A,R)を、Aを更新しながら再帰的に実行することによって、全ての可能な解を発見する。一例として、図1に示す行列を入力としてDLXを実行したときの処理を示す。
まず、アルゴリズム5行目にて行列Aの列c=Aを選択したとする。そうすると、A[r,A]=1となる行rは1,2となる。
アルゴリズム6行目にてr=2が選択されたとすると、A[r,j]=1となる列jは、j=A,Bのいずれかとなるので、アルゴリズム9行目にて行列Aから列A,Bを削除する。さらに、アルゴリズム11行目でj=A,Bに対してA[i,j]=1となる行i=1,2 を削除し、部分行列

が得られる。
さらに、アルゴリズム12行目で得られた部分行列を入力として再帰的にSearch(A,R)を呼び出す。再帰的な呼び出しで今度は列c=Eが選択されたとすると、A[r,E]=1となる行rは5のみとなる。今度はA[5,j]=1となる列j=C,Eと、それらの列jに対してA[i,j]=1となる行i=4,5を削除し、部分行列

が得られる。
ここで、行r=3を選択すると、対応する行、列を削除した行列は空となることから、これまで選択されたr=2,5,3が厳密敷き詰めとなる。
なお、アルゴリズム2行目の条件を、「Aが最初の|U|列及びS行を含まない」に変更し、かつ、アルゴリズム5行目で選択する列cを最初の|U|列のいずれかに限定すると、一般化厳密敷き詰め問題の解法となる。
図3は、本実施形態に係るZDDの一例を示す模式図である。
ZDDは、集合族を有向非巡回グラフとして表現するデータ構造である。
図3に示すように、全体集合{1,2,3}の部分集合からなる集合族{{1,2},{1,3},{2,3}}を表現する。ZDDは、終端ノードと分岐ノードの2種類のノードをもつ。終端ノードはそのノードを始点とするアークを持たないノードであり、図3では四角で表現される。

終端ノードと

終端ノードの2種類の終端ノードがあり、1つのZDDには各終端ノードが高々1つずつ存在する。分岐ノードは、終端ノードではないノードのことであり、各分岐ノードにはそのノードが対応する全体集合の要素を表すラベルが付与される。また、各分岐ノードにはそのノードを始点とするアークが必ず2つ存在し、それぞれlo枝、hi枝と呼ぶ。図3では各分岐ノードは円として表現され、hi枝は実線、lo枝は点線によって表現される。
図3に示すノードn1は、分岐ノードであり、要素1がラベルとして付与され、lo枝はノードn2を、hi枝はノードn3を指している。ZDD中では親をもたないノードが必ず1つのみ存在し、このノードは根ノードと呼ばれる。根ノードから

終端ノードまでの各経路が、ZDDが表現する集合族に含まれる各部分集合に対応している。
図3に示すZDDでは、3種類の経路が存在し、それらがそれぞれ{1,2},{1,3},{2,3}に対応する。ZDD中の各ノードは、そのノードを根とする部分ZDDを表現している。図3の例では、ノードn2を根とするZDDは全体集合{2,3}の部分集合からなる集合族{{2},{3}}を表現している。
ZDDは、各ノードについて、(ノードID,ラベル,hi枝の指すノード,lo枝の指すノード) の4つの項目を1組(4つ組)として用意することで表現できる。図3に示すZDDでは、6つのノードを持つため、

というテーブルを用意することで表現することができる。
[第1の実施形態]
図4は、第1の実施形態に係る厳密敷き詰め計算装置10の機能的な構成の一例を示すブロック図である。
図4に示すように、厳密敷き詰め計算装置10は、問題入力部12と、再帰計算部14と、ZDD構築演算部16と、一時計算結果記憶部18と、計算結果出力部20と、を備えている。本第1の実施形態においては、厳密敷き詰め問題の場合を例示して説明する。
本実施形態に係る厳密敷き詰め計算装置10は、CPU(Central Processing Unit)、RAM(Random Access memory)、ROM(Read Only Memory)、及びHDD(Hard Disk Drive)等を備えたコンピュータとして構成される。ROMには、本実施形態に係る厳密敷き詰め計算処理を実行するための厳密敷き詰め計算プログラムが記憶されている。なお、厳密敷き詰め計算プログラムは、HDDに記憶されていてもよい。
上記の厳密敷き詰め計算プログラムは、例えば、厳密敷き詰め計算装置10に予めインストールされていてもよい。厳密敷き詰め計算プログラムは、不揮発性の記憶媒体に記憶して、又は、ネットワークを介して配布して、厳密敷き詰め計算装置10に適宜インストールすることで実現してもよい。なお、不揮発性の記憶媒体の例としては、CD-ROM(Compact Disc Read Only Memory)、光磁気ディスク、DVD-ROM(Digital Versatile Disc Read Only Memory)、フラッシュメモリ、メモリカード等が挙げられる。
CPUは、ROMに記憶されている厳密敷き詰め計算プログラムを読み込んで実行することにより、厳密敷き詰め計算装置10の各部として機能する。
一時計算結果記憶部18は、再帰計算部14で利用されるキャッシュテーブル18Aと、ZDDノードを保持するユニークテーブル18Bと、を記憶する。以下、一時計算結果記憶部18に記憶されるキャッシュテーブル18A及びユニークテーブル18Bについて説明する。
キャッシュテーブル18Aは、キーとエントリのペアを保持しており、テーブルサイズの上限は固定である。キャッシュテーブル18Aのキーは、厳密敷き詰め問題の部分問題を表す二値行列A中に存在する列番号の集合を示す。また、エントリは、部分問題の解となる行番号の集合からなる集合族を表すZDDの根ノードを示す。つまり、エントリは、二値行列Aを入力とする厳密敷き詰め問題の解の集合を表現するZDDの根ノードを示す。
ユニークテーブル18Bは、厳密敷き詰め問題の解となる行番号の集合からなる集合族を表すZDDに関する各ノードの情報を保持する。ユニークテーブル18Bは、ノードの情報として、(ノードID,ラベル,lo枝の指すノード,hi枝の指すノード)の4つの項目を1組とする4つ組データ(以下、単に4つ組という。)を格納するテーブルである。ユニークテーブル18Bに格納されている4つ組の集合は、ZDDを表現しているとみなすことができる。このため、計算結果出力部20では、最終的に計算結果として、ユニークテーブル18Bの4つ組を出力する。なお、ユニークテーブル18Bには、ラベル、lo枝の指すノード、及びhi枝の指すノードが全て一致する4つ組は含まれていないものとする。
ZDD構築演算部16は、ラベル、lo枝の指すノード、及びhi枝の指すノードの3つの項目を1組とする3つ組データ(以下、単に3つ組という。)を入力とし、3つ組に対応するノードの情報をユニークテーブル18Bに格納する。
一方、問題入力部12は、二値行列として表現されている厳密敷き詰め問題のインスタンスの入力を受け付ける。
再帰計算部14は、問題入力部12により入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、行番号を解に含めたときに得られる部分問題を求め、求められた部分問題を再帰的に解く。再帰計算部14は、求められた部分問題を解くときに、部分問題を表す部分行列中に存在する列番号の集合に対応するキーを用いて、キャッシュテーブル18Aから検索する。そして、キーに対応するペアが検索された場合、ペアのエントリを、部分問題の解を表すZDDの根ノードとする。
一方、キーに対応するペアが検索されなかった場合、部分問題を表す部分行列に基づいて、選択される列番号を1とする行番号の各々に対し、行番号を解に含めたときに得られる部分問題を求め、求められた部分問題を解き、解に含めた行番号をラベルとし、部分問題の解を表すZDDの根ノードをhi枝の指すノードとし、

又は直前の行番号に対する部分問題を解いたときにZDD構築演算部16により格納されたノードをlo枝の指すノードとした3つ組を、ZDD構築演算部16に入力する。
また、再帰計算部14は、部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、ZDD構築演算部16により格納されたノードを示すエントリのペアを、キャッシュテーブル18Aに格納する。
このように、本実施形態に係る再帰計算部14は、問題入力部12によって読み込まれた厳密敷き詰め問題のインスタンスを受け取り、DLXを実行しつつ、ZDD構築演算部16をサブルーチンとして呼び出す。
ZDD構築演算部16は、再帰計算部14からの命令を受けて、ZDD構築のためのサブルーチンを呼び出し、キャッシュテーブル18Aの参照・更新、ユニークテーブル18Bの参照・更新を行う。
すなわち、再帰計算部14は、キャッシュテーブル18Aに対して、二値行列の列番号の集合をクエリとして与えられたときにキーがクエリと一致する(キー,エントリ)のペアを出力する機能を有している。
また、再帰計算部14は、新たに(キー,エントリ)のペアをキャッシュテーブル18Aに追加する機能も有している。例えば、キャッシュテーブル18Aに格納されているキーとエントリのペアの個数がテーブルサイズの上限に達している状態において新しいキーとエントリのペアを追加する場合、既にキャッシュテーブル18Aに格納されているペアを一つ削除して、代わりに新しいペアを追加する。
また、ZDD構築演算部16は、ユニークテーブル18Bに対して、(ラベル,lo枝の指すノード,hi枝の指すノード)の3つ組を入力として受け取り、ユニークテーブル18B中に含まれる、その3つ組を含む4つ組(ノードID,ラベル,lo枝の指すノード,hi枝の指すノード)が存在するか否かを判定し、その3つ組を含む4つ組が存在しない場合には、当該4つ組を、ユニークテーブル18Bに追加する機能を有する。
なお、再帰計算部14で計算された計算結果は、一時計算結果記憶部18に記憶される。計算結果出力部20は、一時計算結果記憶部18に記憶されている計算結果を出力する。計算結果出力部20は、例えば、ディスプレイやプリンタ等の出力装置である。
次に、図5を参照して、第1の実施形態に係る厳密敷き詰め計算装置10の作用を説明する。なお、図5は、第1の実施形態に係る厳密敷き詰め計算プログラムによる処理の流れの一例を示すフローチャートである。
本第1の実施形態に係る厳密敷き詰め計算装置10は、操作者の操作により厳密敷き詰め計算処理の実行が指示されると、CPUがROMに記憶されている厳密敷き詰め計算プログラムを読み出して実行する。
まず、図5のステップ100では、再帰計算部14が、問題入力部12から厳密敷き詰め問題のインスタンスを、二値行列Aとして受け取る。
ステップ102では、ZDD構築演算部16が、再帰計算部14からの命令に従って、厳密敷き詰め計算として、厳密敷き詰め問題の全ての解の集合を表現するZDDを構築する。このステップ102の処理を行うためのアルゴリズムについては後述する。
ステップ104では、計算結果出力部20が、ステップ102で計算した厳密敷き詰め問題の解集合を表現するZDDを出力して、処理を終了する。
図6は、第1の実施形態に係る厳密敷き詰め計算アルゴリズムの一例を示す図である。
図6に示す厳密敷き詰め計算アルゴリズムは、上記ステップ102の処理を行うためのアルゴリズムであり、再帰計算部14において処理される。
また、図7は、第1の実施形態に係る厳密敷き詰め計算アルゴリズムのサブルーチンの一例を示す図である。
図7に示すサブルーチンは、図6に示す厳密敷き詰め計算アルゴリズムの処理中にZDD構築演算部16において処理される。
図6及び図7に示すアルゴリズムの処理は、DLXを踏襲しており、DLXとの違いは、キャッシュテーブル18Aとユニークテーブル18Bの処理が組み込まれている点にある。なお、以下では、便宜上、図6のアルゴリズムをメインアルゴリズムと呼び、図7のアルゴリズムをサブアルゴリズムと呼び、キャッシュテーブル18AをキャッシュテーブルCと表し、ユニークテーブル18BをユニークテーブルZと表すものとする。
まず、再帰計算部14は、ZDD構築演算部16に命令し、ZDD構築演算部16が、メインアルゴリズム1行目で空のキャッシュテーブルCを作成し、メインアルゴリズム2行目で空のユニークテーブルZを作成する。そして、ZDD構築演算部16は、作成した空のキャッシュテーブルC及び空のユニークテーブルZを一時計算結果記憶部18に格納する。
そして、再帰計算部14は、入力された二値行列Xを入力として、Search(X)を実行し(メインアルゴリズム20行目)、実行結果として出力されたノードzを根ノードとするZDDを、厳密敷き詰め問題の全ての解の集合を表現するZDDとして出力する。
次に、メインアルゴリズム3行目のSearch(A)の処理について説明する。
再帰計算部14は、メインアルゴリズム4行目で二値行列Aが空であるか否かを判定し、Aが空である場合、ZDD構築演算部16でサブアルゴリズム1行目のサブルーチンTop()を呼び出し、ZDDノード

を出力する。一方、Aが空でない場合、ZDD構築演算部16でサブアルゴリズム5行目のサブルーチンCheckCache(col(A),C)を呼び出す。そして、ZDD構築演算部16は、サブアルゴリズム6行目に示すように、キーの値がcol(A)と一致する要素(キー,エントリ)のペアがキャッシュテーブルC中に存在しないか否かを調べる。
さらに、再帰計算部14は、キャッシュテーブルCにキーの値がcol(A)と一致する要素(キー,エントリ)のペアが存在するのであれば、ZDD構築演算部16でサブアルゴリズム7行目のサブルーチンGetCache(col(A),C)を呼び出し、(キー,エントリ)のペアのエントリを、二値行列Aが表す部分問題の解を表すZDDの根ノードとして出力し、Search(A)の処理を終了する。なお、col()は、部分行列を入力として受け取り、その中に存在する列番号の集合を返す関数である。従って、col(A)は、部分行列A中に存在する列番号の集合となる。また、キャッシュテーブルの要素(キー,エントリ)のペアのエントリは、ZDDノードを示す。
キャッシュテーブルCにキーの値がcol(A)と一致する要素(キー,エントリ)のペアが存在しなかった場合、再帰計算部14は、メインアルゴリズム7行目の処理において、部分行列Aから列cを選択し、メインアルゴリズム8行目の処理において、ZDD構築演算部16でサブアルゴリズム3行目のサブルーチンBot()を呼び出す。なお、メインアルゴリズム7〜13行目の処理は、変数xをZDDノード

で初期化する以外はDLXと同一である。
つまり、メインアルゴリズム7〜17行目では、再帰計算部14が、部分行列Aから列cを選択し、列cを1とする行rの各々に対して、当該行rを解に含めたときに得られる部分問題の部分行列を、部分行列Aとし、部分行列Aを入力として、Serch(A)を再帰的に実行し、部分問題を解く。実行結果として、部分問題の解を表すZDDの根ノードを得て、yとする。
yが、

でない場合には、解に含めた行rをラベルとし、部分問題の解を表すZDDの根ノードyをhi枝の指すノードとし、

又は直前の行番号に対する部分問題を解いたときにZDD構築演算部16により格納されたノードxをlo枝の指すノードとした3つ組を入力として、Unique(r、x、y、Z)を実行し、当該3つ組に対応するZDDノードを、xとする。そして、11、13行目の処理でAから削除された行、列を復元し、列cを1とする他の行rについて、上述したメインアルゴリズム9〜17行目の処理を繰り返す。
メインアルゴリズム18行目では、再帰計算部14が、二値行列A中に存在する列cの集合を示すキー、及び、上述したメインアルゴリズム9〜17行目の処理を繰り返したときに最終的に得られたZDDノードxを示すエントリのペアを、キャッシュテーブル18Aに格納する。そして、ZDDノードxを出力して、Search(A)の処理を終了する。
より具体的に説明すると、メインアルゴリズム16行目の処理において、ZDD構築演算部16でサブアルゴリズム11行目のサブルーチンUnique(r,x,y,Z)を呼び出し、変数xを、Unique(r,x,y,Z)に更新する。なお、Unique(r,x,y,Z)は、ZDD構築演算部16で実行されるサブルーチンであり、サブアルゴリズム12行目に示すように、ユニークテーブルZ中に3つ組(r,x,y) を含む4つ組(n,r,x,y)が存在するか否かを調べる。そして、存在するのであれば、その4つ組のノードIDmを発行し、一方、存在しないのであれば、新たにノードIDnを発行し、4つ組(n,r,x,y)をユニークテーブルZに格納し、nを出力する。なお、nはノードID、rはラベル、xはlo枝の指すノード、yはhi枝の指すノードを示す。
メインアルゴリズム17行目の処理は、DLXと同等の処理として行われる。
次に、メインアルゴリズム18行目の処理では、ZDD構築演算部16でサブアルゴリズム9行目のサブルーチンStoreCache(col(A),x,C)を呼び出す。すなわち、ZDD構築演算部16が、ペア(col(A),x,C)をキャッシュテーブルCに格納するサブルーチンStoreCache(col(A),x,C)を実行し、再帰計算部14からxが出力される。
次に、メインアルゴリズム19行目の処理では、再帰計算部14が、Search(X)を実行し、得られたZDDノードzを根ノードとするZDDを出力して処理を終了する。
本実施形態に係る厳密敷き詰め計算装置10に、一例として、図1に示す厳密敷き詰め問題を入力として与えると、敷き詰め問題の解の集合{{1,3},{2,3,5}}を表現するZDDが出力として得られる。
[第2の実施形態]
上記第1の実施形態では、厳密敷き詰め問題を例示して説明したが、本第2の実施形態では、一般化厳密敷き詰め問題を例示して説明する。一般化厳密敷き詰め問題を計算する場合における厳密敷き詰め計算装置の構成及び全体処理フローについても、上記第1の実施形態に係る厳密敷き詰め計算装置10と略同様である。
本第2の実施形態に係る一般化厳密敷き詰め問題を計算する場合、図6に示すメインアルゴリズムにおいて、4行目の判定条件を、「Aの最初の|U|列が空、かつ、|S|行が空」に変更し、7行目の「列cをXから選択」を、「列cを最初の|U|行のいずれかから選択」に変更すればよい。この変更により、一般化厳密敷き詰め問題を計算することが可能となる。
以上、実施形態として厳密敷き詰め計算装置及び方法を例示して説明した。実施形態は、コンピュータを、厳密敷き詰め計算装置における各部として機能させるための厳密敷き詰め計算プログラムの形態としてもよい。実施形態は、この厳密敷き詰め計算プログラムを記憶したコンピュータが読み取り可能な記憶媒体の形態としてもよい。
その他、上記実施形態で説明した厳密敷き詰め計算装置の構成は、一例であり、主旨を逸脱しない範囲内において状況に応じて変更してもよい。
また、上記実施形態で説明した厳密敷き詰め計算プログラムの処理の流れも、一例であり、主旨を逸脱しない範囲内において不要なステップを削除したり、新たなステップを追加したり、処理順序を入れ替えたりしてもよい。
また、上記実施形態では、厳密敷き詰め計算プログラムを実行することにより、実施形態に係る処理がコンピュータを利用してソフトウェア構成により実現される場合について説明したが、これに限らない。実施形態は、例えば、ハードウェア構成や、ハードウェア構成とソフトウェア構成との組み合わせによって実現してもよい。
10 厳密敷き詰め計算装置
12 問題入力部
14 再帰計算部
16 ZDD構築演算部
18 一時計算結果記憶部
18A キャッシュテーブル
18B ユニークテーブル
20 計算結果出力部

Claims (5)

  1. 二値行列により表される厳密敷き詰め問題又は一般化厳密敷き詰め問題の部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記部分問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagram)の根ノードを示すエントリのペアを保持するキャッシュテーブルと、
    前記厳密敷き詰め問題又は一般化厳密敷き詰め問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフに関する各ノードの情報を保持するユニークテーブルと、
    ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、前記3つ組データに対応するノードの情報を前記ユニークテーブルに格納するZDD構築演算部と、
    厳密敷き詰め問題又は一般化厳密敷き詰め問題を表す二値行列の入力を受け付ける問題入力部と、
    前記問題入力部により入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、
    前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を再帰的に解く再帰計算部であって、
    前記求められた部分問題を解くときに、前記部分問題を表す部分行列中に存在する列番号の集合に対応するキーを用いて、前記キャッシュテーブルから検索し、前記キーに対応する前記ペアが検索された場合、前記ペアのエントリを、前記部分問題の解を表すゼロサプレス型二分決定グラフの根ノードとし、
    前記キーに対応する前記ペアが検索されなかった場合、前記部分問題を表す部分行列に基づいて、選択される列番号を1とする行番号の各々に対し、前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を解き、前記解に含めた前記行番号をラベルとし、前記部分問題の解を表す前記ゼロサプレス型二分決定グラフの根ノードをhi枝の指すノードとし、

    又は直前の前記行番号に対する部分問題を解いたときに前記ZDD構築演算部により格納された前記ノードをlo枝の指すノードとした前記3つ組データを、前記ZDD構築演算部に入力し、
    前記部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記ZDD構築演算部により格納された前記ノードを示すエントリのペアを、前記キャッシュテーブルに格納する再帰計算部と、
    を備えた厳密敷き詰め計算装置。
  2. 前記ユニークテーブルは、前記ノードの情報として、ノードID、ラベル、hi枝の指すノード、及びlo枝の指すノードの4つの項目を1組とする4つ組データを保持し、
    前記ZDD構築演算部は、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、前記3つ組データに対応するノードの情報を前記ユニークテーブルから検索し、
    前記3つ組データに対応する前記ノードの情報が検索されなかった場合、前記3つ組データに対応するノードを作成して、前記ノードの情報を、前記ユニークテーブルに格納する請求項1に記載の厳密敷き詰め計算装置。
  3. 前記再帰計算部は、前記キャッシュテーブルに保持されている複数のペアの個数が上限に達している状態において新しいペアを追加する場合、前記複数のペアの1つに代えて、前記新しいペアを追加する請求項1又は2に記載の厳密敷き詰め計算装置。
  4. 二値行列により表される厳密敷き詰め問題又は一般化厳密敷き詰め問題の部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記部分問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフ(Zero-suppressed Binary Decision Diagram)の根ノードを示すエントリのペアを保持するキャッシュテーブルと、
    前記厳密敷き詰め問題又は一般化厳密敷き詰め問題の解となる行番号の集合からなる集合族を表すゼロサプレス型二分決定グラフに関する各ノードの情報を保持するユニークテーブルと、を備えた厳密敷き詰め計算装置における厳密敷き詰め計算方法であって、
    ZDD構築演算部が、ラベル、hi枝の指すノード、及びlo枝の指すノードの3つの項目を1組とする3つ組データを入力とし、前記3つ組データに対応するノードの情報を前記ユニークテーブルに格納するステップと、
    問題入力部が、厳密敷き詰め問題又は一般化厳密敷き詰め問題を表す二値行列の入力を受け付けるステップと、
    再帰計算部が、前記問題入力部により入力を受け付けた二値行列に基づいて、選択される列番号を1とする行番号の各々に対し、
    前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を再帰的に解く場合において、
    前記求められた部分問題を解くときに、前記部分問題を表す部分行列中に存在する列番号の集合に対応するキーを用いて、前記キャッシュテーブルから検索し、前記キーに対応する前記ペアが検索された場合、前記ペアのエントリを、前記部分問題の解を表すゼロサプレス型二分決定グラフの根ノードとし、
    前記キーに対応する前記ペアが検索されなかった場合、前記部分問題を表す部分行列に基づいて、選択される列番号を1とする行番号の各々に対し、前記行番号を解に含めたときに得られる前記部分問題を求め、前記求められた部分問題を解き、前記解に含めた前記行番号をラベルとし、前記部分問題の解を表す前記ゼロサプレス型二分決定グラフの根ノードをhi枝の指すノードとし、

    又は直前の前記行番号に対する部分問題を解いたときに前記ZDD構築演算部により格納された前記ノードをlo枝の指すノードとした前記3つ組データを、前記ZDD構築演算部に入力し、
    前記部分問題を表す部分行列中に存在する列番号の集合を示すキー、及び、前記ZDD構築演算部により格納された前記ノードを示すエントリのペアを、前記キャッシュテーブルに格納するステップと
    を含む厳密敷き詰め計算方法。
  5. コンピュータを、請求項1〜3のいずれか1項に記載の厳密敷き詰め計算装置の各部として機能させるための厳密敷き詰め計算プログラム。
JP2017001284A 2017-01-06 2017-01-06 厳密敷き詰め計算装置、方法、及びプログラム Active JP6709740B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017001284A JP6709740B2 (ja) 2017-01-06 2017-01-06 厳密敷き詰め計算装置、方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017001284A JP6709740B2 (ja) 2017-01-06 2017-01-06 厳密敷き詰め計算装置、方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2018112784A true JP2018112784A (ja) 2018-07-19
JP6709740B2 JP6709740B2 (ja) 2020-06-17

Family

ID=62912279

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017001284A Active JP6709740B2 (ja) 2017-01-06 2017-01-06 厳密敷き詰め計算装置、方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP6709740B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022162860A1 (ja) * 2021-01-29 2022-08-04 日本電信電話株式会社 厳密被覆計算方法、厳密被覆計算装置及びプログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06215065A (ja) * 1992-10-28 1994-08-05 Nippon Telegr & Teleph Corp <Ntt> 論理関数データ処理装置
JP2012243040A (ja) * 2011-05-18 2012-12-10 Nippon Telegr & Teleph Corp <Ntt> 演算装置、演算方法および演算プログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06215065A (ja) * 1992-10-28 1994-08-05 Nippon Telegr & Teleph Corp <Ntt> 論理関数データ処理装置
JP2012243040A (ja) * 2011-05-18 2012-12-10 Nippon Telegr & Teleph Corp <Ntt> 演算装置、演算方法および演算プログラム

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
DONALD E. KNUTH: "Dancing Links", [ONLINE], JPN6019050943, 15 November 2000 (2000-11-15), pages 26, ISSN: 0004182932 *
SHIN-ICHI MINATO: "Zero-Suppressed BDDs for Set Manipulation in Combinatorial Problems", PROCEEDINGS OF THE 30TH INTERNATIONAL DESIGN AUTOMATION CONFERENCE(DAC'93), JPN7019004156, 14 June 1993 (1993-06-14), pages 272 - 277, XP000371320, ISSN: 0004182933 *
伝住周平,津田宏治,有村博紀,湊真一: "DAGによる文字列集合の圧縮表現に対する効率的な索引アルゴリズム", 第92回人工知能基本問題研究会資料(SIG-FPAI-B303), JPN6019050936, 27 January 2014 (2014-01-27), JP, pages 79 - 84, ISSN: 0004182929 *
奥乃博,湊真一: "二分決定グラフによる制約充足問題の解法", 情報処理学会論文誌, vol. 36, no. 8, JPN6019050938, 15 August 1995 (1995-08-15), JP, pages 1789 - 1799, ISSN: 0004182930 *
松永涼,斎藤寿樹,近藤広樹,中野浩太郎: "ZDDを用いたExact Cover問題に対するパレート最適な解の列挙", 情報処理学会研究報告, vol. Vol.2014-AL-147,No.16, JPN6019050933, 24 February 2014 (2014-02-24), JP, pages 1 - 8, ISSN: 0004182928 *
湊真一: "計算機上でのBDDの処理手法", 情報処理, vol. 第34巻,第5号,(通巻339号), JPN6019050941, 15 May 1993 (1993-05-15), JP, pages 593 - 599, ISSN: 0004182931 *
菅谷輝治,戸田貴久,湊真一: "ハイパーグラフにおける極大独立集合列挙のためのZDD構築手法", 電子情報通信学会技術研究報告, vol. Vol.114,No.509,(COMP2014-42〜51), JPN6019050930, 2 March 2015 (2015-03-02), JP, pages 19 - 27, ISSN: 0004182927 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022162860A1 (ja) * 2021-01-29 2022-08-04 日本電信電話株式会社 厳密被覆計算方法、厳密被覆計算装置及びプログラム
JP7494945B2 (ja) 2021-01-29 2024-06-04 日本電信電話株式会社 厳密被覆計算方法、厳密被覆計算装置及びプログラム

Also Published As

Publication number Publication date
JP6709740B2 (ja) 2020-06-17

Similar Documents

Publication Publication Date Title
Gupta et al. Cuts, trees and ℓ1-embeddings of graphs
JP6028567B2 (ja) データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法
Banerjee et al. Space efficient linear time algorithms for BFS, DFS and applications
Apt et al. A classification of weakly acyclic games
Blikstad et al. Fast algorithms via dynamic-oracle matroids
JP2018112784A (ja) 厳密敷き詰め計算装置、方法、及びプログラム
Baswana et al. On dynamic DFS tree in directed graphs
JP6044628B2 (ja) 乱数発生装置、乱数発生方法、オブジェクト配置装置、並びにコンピュータ・プログラム
JP5964781B2 (ja) 検索装置、検索方法および検索プログラム
Gao et al. Optimal ternary constant-composition codes of weight four and distance five
JP6418658B2 (ja) 情報処理装置、情報処理方法、及びプログラム
Mirzaei et al. Fast construction of near parsimonious hybridization networks for multiple phylogenetic trees
Baidoo et al. Solving the TSP using traditional computing approach
US8661061B2 (en) Data structure, data structure generation method, information processing apparatus, information processing system, and computer-readable storage medium having stored therein information processing program
Bose et al. The power and limitations of static binary search trees with lazy finger
WO2018012413A1 (ja) 類似データ検索装置、類似データ検索方法および記録媒体
Bose et al. The power and limitations of static binary search trees with lazy finger
JP6663875B2 (ja) 問題解決装置、方法、及びプログラム
JP2018081611A (ja) 辞書検索方法、装置、およびプログラム
JP7494945B2 (ja) 厳密被覆計算方法、厳密被覆計算装置及びプログラム
Koganti et al. Searching in a Sorted Linked List
Siqueira et al. Heuristics for genome rearrangement distance with replicated genes
Arrighi et al. Three is enough for steiner trees
Gutin et al. Greedy like algorithms for the traveling salesman and multidimensional assignment problems
Jackovich et al. Comparing greedy constructive heuristic subtour elimination methods for the traveling salesman problem

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170111

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190131

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20190131

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20190131

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200212

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200519

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200525

R150 Certificate of patent or registration of utility model

Ref document number: 6709740

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150