(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2022-11-02
(45)【発行日】2022-11-11
(54)【発明の名称】プログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20221104BHJP
【FI】
G06N99/00 180
(21)【出願番号】P 2022075531
(22)【出願日】2022-04-29
【審査請求日】2022-05-02
【早期審査対象出願】
(73)【特許権者】
【識別番号】714001548
【氏名又は名称】菅原 孝幸
(72)【発明者】
【氏名】菅原 孝幸
【審査官】北川 純次
(56)【参考文献】
【文献】特開2019-28576(JP,A)
【文献】特開2015-222464(JP,A)
【文献】特開2015-172794(JP,A)
【文献】米国特許出願公開第2012/0278675(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 99/00
G06Q 10/10
(57)【特許請求の範囲】
【請求項1】
所定の集団に属するスタッフのスケジュールを構成するシフトとスケジュールに関する制約とに基づきスケジュールの最適化に関する処理をコンピュータに実行させるためのプログラムであって、
前記制約は、必ず守るべき制約であるハード制約と、必ずしも満たす必要はないが出来れば満たしたい制約であるソフト制約とを含み、
各スタッフ毎に、前記各スタッフに関わるハード制約およびソフト制約について、シフトをワンホットコードでZDD(ゼロサプレス型二分決定グラフ)にエンコードしたZDDグラフの始点と終点間のZDDノードのコスト総和を最小化する経路を求めることによって、前記ハード制約を充足させ、かつ、前記ソフト制約の違反する制約の重みの総和を最小化する、各スタッフの最適化問題の解を得る第1手段、
前記各スタッフの最適化問題の解を列とする列生成法と、分枝限定法とに基づいて、整数解を得る第2手段、
として前記コンピュータを機能させるためのプログラム。
【請求項2】
請求項1に記載のプログラムであって、
前記第1手段が、各スタッフ毎に基数制約以外のハード制約およびソフト制約についてシフトをワンホットコードでZDDにエンコードして得られる解を列とする列生成法と、分枝限定法とに基づき、各スタッフの最適化問題の解を整数化するように前記コンピュータを機能させるためのプログラム。
【請求項3】
請求項1に記載のプログラムであって、
前記第1手段が、前記コンピュータの複数のプロセッサによって各スタッフの最適化問題の解を得るように前記コンピュータを機能させるためのプログラム。
【請求項4】
請求項1に記載のプログラムであって、
前記ハード制約と前記ソフト制約とを各々CNFにエンコードする第3手段、
前記列に対する線形緩和主問題の主解の整数データをCNFにエンコードする第4手段、
前記第3手段と前記第4手段とによって得られたCNFをMaxSATソルバーに入力することで整数解を得る第5手段、
として前記コンピュータを機能させるためのプログラム。
【請求項5】
請求項1に記載のプログラムであって、
前記ハード制約と前記ソフト制約とを各々CNFにエンコードする第3手段、
得られたCNFをMaxSATソルバーに入力することで整数解を得る第5手段、
前記第5手段によって得られた整数解を前記列生成法の初期解として設定する第6手段、
として前記コンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ナーススケジューリング問題等に関して最適化を行うプログラム等に関する。
【背景技術】
【0002】
従来より、例えば、所定の集団に属するスタッフのスケジュールを最適化するナーススケジューリング問題が知られている。ナーススケジューリング問題は、制約充足最適化問題システムでもNP困難な例として知られている。この種のスケジューリング問題に対する解法として、非特許文献1や非特許文献2等で示されているように、分枝価格法(Branch and Price)で解く方法がある。
【先行技術文献】
【非特許文献】
【0003】
【文献】Strandmark, P., Qu, Y. and Curtois, T. First-order linear programming in a column generation-based heuristic approach to the nurse rostering problem. Computers & Operations Research, 2020. 120, p. 104945. (pdf)
【文献】Antoine Legrain, J.Omer, Samuel Rosat. A rotation-based branch-and-price approach for the nurse scheduling problem. Mathematical Programming Computation, Springer, 2020, 12 (3), pp.417- 450. ff10.1007/s12532-019-00172-4ff. ffhal-01545421v2
【文献】Minato, S. 1993. Zero-suppressed BDDs for set manipulation in combinatorial problems. 30thConference on Design Automation. 272-277.
【文献】J. Kawahara, T. Inoue, H. Iwashita, and S. Minato,“Frontier-based search for enumerating all constrained subgraphs with compressed representation”,IEICE Transactions on Fundamentals of Electronics, Communications and Computer Sciences, vol.E100.A, no.9, pp.1773-1784, 2017.
【文献】Modeling and solving staff scheduling with partial weighted maxSATEmir Demirovic, Nysret Musliu & Felix Winter Annals of Operations Research volume 275, pages79-99 (2019)
【発明の概要】
【発明が解決しようとする課題】
【0004】
非特許文献1で示されているように、ナーススケジューリング問題において、求解速度を上げようとする設計アプローチは、最適解に対する精度の低下をもたらす。反対に、高精度を狙う設計では、求解速度が低下する傾向にある。高精度化と高速化を両立させることは、難しいという問題がある。
本発明は、かかる問題に鑑み、例えば、最適解保証付きの解を高速に出力できるようにすることを目的とする。
【課題を解決するための手段】
【0005】
本発明の第1の態様によると、所定の集団に属するスタッフのスケジュールを構成するシフトとスケジュールに関する制約とに基づきスケジュールの最適化に関する処理をコンピュータに実行させるためのプログラムは、制約は、必ず守るべき制約であるハード制約と、必ずしも満たす必要はないが出来れば満たしたい制約であるソフト制約とを含み、各スタッフ毎に、各スタッフに関わるハード制約およびソフト制約について、シフトをワンホットコードでZDD(ゼロサプレス型二分決定グラフ)にエンコードしたZDDグラフの始点と終点間のZDDノードのコスト総和を最小化する経路を求めることによって、ハード制約を充足させ、かつ、ソフト制約の違反する制約の重みの総和を最小化する、各スタッフの最適化問題の解を得る第1手段、各スタッフの最適化問題の解を列とする列生成法と、分枝限定法とに基づいて、整数解を得る第2手段、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【0006】
本発明によれば、最適解保証付きの解を、高速に得られる割合が格段に向上する効果が見込める。最適解が得られれば、それ以上良い解はないと考えられるため、探索を止めることができ、ユーザが無駄に待たされることを防ぐ効果も見込める。
【図面の簡単な説明】
【0007】
【
図1】
図1は、ナーススケジューリング問題を列生成法で解く方法のブロック図である
【
図2】
図2は、ハード制約とソフト制約の具体例である
【
図7】
図7は、1日分、シフトをワンホットコードでZDDにエンコードした図である
【
図8】
図8は、5日分、シフトをワンホットコードでZDDにエンコードした図である
【
図9】
図9は、
図8に、日勤(D)→早番(E)の禁止を追加した図である
【
図10】
図10は、
図2の、基数制約を除く全ての行制約を実装したZDDグラフである
【
図15】
図15は、予定制約の重みをZDDノードに持たせた例である
【
図18】
図18は、ソフト基数制約を持たない場合のZDDの1ノードに注目したZDDのコスト計算の説明図である
【
図19】
図19は、ソフト基数制約を持つ場合のZDDの1ノードに注目したZDDのコスト計算の説明図である
【
図20】
図20は、プライサーを列生成で解くための方法のブロック図である
【
図21】
図21は、
図6 主問題ソルバーから、MaxSATソルバーへの入力の仕方の説明図である
【
図22】
図22は、MaxSATソルバーの解を利用して、行制約のソフト制約をハード制約化する説明図である
【
図24】
図24は、時間の経過に対する最適解の得られたインスタンス数の比率を示す本発明と他の方式との比較グラフである
【発明を実施するための形態】
【0008】
以下、図面を参照して、本発明を適用した実施形態の一例について説明する。
なお、本発明を適用可能な実施形態が以下説明する実施形態に限定されるわけでないことは勿論である。
【0009】
[1. 分枝価格法]
図1は、分枝価格法を用いて勤務の解を得るためのシステムの全体ブロック図の一例を示す図である。このブロック図は、従来方式も本発明も変わらない枠組みとしてもよい。以下このブロック図について説明する。
【0010】
[1.1 ハード・ソフト制約]
制約は、2種類に分けられる。「ハード制約」と「ソフト制約」である。
ハード制約とは、必ず守るべき制約である。
ソフト制約とは、必ずしも守る必要はないが、出来れば守りたい制約である。
制約の具体例を、
図2に示す。
【0011】
制約には、主に各スタッフに関する制約である行制約、組織全体の制約であるカバー制約、各スタッフの決まっている予定などの予定制約等を含めることができる。いずれをハード制約とするかソフト制約とするかは、自由度がある。ソフト制約にした場合は、それを破った場合、各ソフト制約毎に定められてコストが発生する。システム全体としては、ハード制約は全て守った上で、ソフト制約を破ったコストの総和を目的関数値と呼ぶが、目的関数値を最小にすることが、最適解を出力するための要件である。
【0012】
上記のように、いずれの制約をハード制約・ソフト制約にするかは、自由度がある。1つの手法として、例えば、ユーザが決める(設定する)ようにしてもよい。
また、コンピュータがプログラムによって自動的に決める(設定する)ようにしてもよい。
【0013】
[1.2 分枝価格法のアルゴリズム]
図3に、分枝価格法のフローチャートの一例を示す。分枝価格法は、シンプレックス法の一変形形態である列生成(列生成ブロック)と、分枝限定法(分枝限定ブロック)とから成る。
【0014】
[1.3 従来システム]
図4は、従来システムの列生成ブロックのブロック図の一例を示す図である。
列生成ブロックは、各スタッフ毎に、各スタッフの制約に係わるサブプログラム(以下、「プライサ-(Pricer)」と呼称する。)群と、線形緩和主問題ソルバーとから成る。
線形緩和主問題ソルバーは、離散系から連続系に緩和した問題を解くソルバーであり、例えば、オープンソースのCOIN-OR projectがある。線形緩和主問題ソルバーは、主解(Primal)と双対解(Dual)との二つを出力する。プライサーは、自身のスケジュールに関する離散解(以降、「ロースター」と呼称する。)を出力する。それが、主問題の系の改善に寄与するものであるならば、ロースターは、“列”として主問題ソルバーに変数として取り込まれる。
【0015】
一方、寄与しないと判断されれば、取り込まれない。主問題の目的関数値の改善が続く限り列は追加される。最終的に列が追加されなくなったときが、そのシステムの下界を示すことになる。ここでいう下界は、連続系における最小値である。ナーススケジューリングの問題の実システムの目的関数値は、離散系であり一般的には整数値となり下界値に等しいかまたは常に、下界よりは大きいという性質がある。
【0016】
[1.3.1 プライサー]
プライサーは、リソース制約付き最短距離問題に一般化することができる。プライサーは、NP-困難な問題であることが分かっている。プライサーの出力するロースターがシステム全体の精度と求解速度の鍵となる。これまで、これを解く様々な提案がなされている。その一つとして、非特許文献1には、ヒューリスティクス的に解を得る方法が記載されている。
【0017】
[1.3.2 列生成ブロック 線形緩和主問題ソルバー]
列が追加されるごとに変数は多くなるが、変数増加は、高々、列に関する分だけで済む。他に、線形緩和主問題ソルバーが扱うのは、スタッフ間に関わるカバー制約を扱うだけであり、ナーススケジューリング問題全体の変数を扱うのに比べれば、遥かに少ない変数で全体の最適化を達成することができる。これにより、線形緩和主問題を「限定主問題(Restricted Master Problem)」と呼称することがある。線形緩和主問題ソルバーは、双対解(DUAL)を各プライサーに出力し、各プライサーは、それを受けて最適ロースターを返す、というループにより主問題の目的関数値の改善を行う。
線形緩和主問題の目的関数は、数1のように定式化できる。
【数1】
【数2】
【数3】
【数4】
【数5】
各シンボルの意味を数6に示す。
【数6】
【0018】
数5は、プライサーの目的関数であり、「Reduced Cost」とも呼ばれる。Reduced Costが負のときに、数1の目的関数値は、改善の可能性があるので、そのロースターは列として線形緩和主問題ソルバーに追加される。数5の目的関数値が負になるロースターがないときは、改善の終点となる。このとき、数1の最適値は、下界を示すことが知られている。逆に、ナーススケジューリング問題の系の下界を正しく知るためには、プライサーも最適解である値を出力することが要件となる。
【0019】
[1.4 分枝限定法]
線形緩和主問題ソルバーの主解出力は、連続系であり浮動小数点による出力となる。しかし、システムが欲しいのは整数解であって、浮動小数点のデータは(例えば、0.3や0.5)解には成り得ないため整数化を行う必要がある。そのために必要なブロックが分枝限定法ブロックである。列生成で下界を得つつ、分枝限定操作で整数化を行うことで、システムの最適値を得る。分枝が発生する毎に、ノードを生成させ、全データの整数化を行えた時点で、整数解(以下、「実行可能解」と呼称する。)が得られる。全てのノードの探索が終了するか、実行可能解の最小値=UBが、下界値(=LB)と等しくなった時点で、最適値が確定する。分枝操作は、フラクショナルな値(例えば0.5)の箇所を選び、0/1にそれぞれ固定分枝するのが一般的である。
図5は、この様子を示したものである。
【0020】
[1.5 ヒューリスティクス]
早期に、実行可能解を得る方法として、ヒューリスティクスを使うこともある。一般的なヒューリスティクスは、非特許文献1にあるように、浮動小数点データの丸めを繰り返し行うことで整数化を行っている。
【0021】
[2. 本発明の要点]
図6は、本発明による解を得るためのシステム構成の一例を示す図である。
図4に示したシステム構成と比して、まず、符号2の構成に特徴がある。
符号2はプライサーである。具体的には、スタッフに関わるハード制約とソフト制約について、シフトをワンホットコードでエンコードしたゼロサプレス型2分決定グラフ(ZDD)を用いて各スタッフの最適化を行うロースターを出力するのが特徴である。
ここで、プライサー2が扱うハード制約とソフト制約は、例えば、前述した行制約や予定制約とすることができる。
【0022】
ワンホットコードとは、例えば、早番:(1, 0, 0, 0)、日勤:(0, 1, 0, 0)、遅番:(0, 0, 1, 0)、公休:(0, 0, 0, 1)のように、「1」となる部分が1個であり、かつ、互いにその位置が異なるエンコードの仕方である。これをZDDグラフで表したのが
図7である。コンパクトにスタッフのシフトのありえる状態の全てを表現できることがポイントとなっている。
このエンコード条件下で、そのスタッフに関わるハード制約とソフト制約をZDD上にエンコードしたグラフが一度でき上がれば、それを用いてプライサーの最適解を高速に計算できる。列生成法においては、プライサーの計算が系のネックになっており、プライサーが高速に計算されれば、系の最適値も高速に求まる。
【0023】
[3. ナーススケジューリング問題による実施の形態]
本実施形態では、プライサーの目的関数、例えば前述した数6を、各スタッフ毎の詳細な制約を入れて展開する。これにより、例えば数7を得ることができる。
【数7】
【数8】
【数9】
【数10】
【数11】
【0024】
[3.1 ワンホットコードの実装]
例として、
図2の行制約を実装する。ここでは、「早番=E」,「遅番=L」、「日勤=D」とする。陽のシフトは以上だが、それ以外の状態、つまり勤務していない日もシフトとみなし、これを「公休=Y」として、ワンホットコードを構成する。例えばDateが「1」(Date1)から「5」(Date5)まであるとして、Date1の早番をE1と表記する。また、あるスタッフの制約論理関数をRとする。
【0025】
ワンホットコードは、Least One なおかつ Most Oneであるので、全シフトのOR,と、二つのシフトが同時に2個アクティブにならないという制約を実装すればよい。
論理演算子&(AND)、|(OR)、NOT(~)を使用して、制約論理関数Rは、
R=E1 | D1 | L1 | Y1
R &=~(E1 &D1 )
R &=~(E1&L1 )
R &=~(E1& Y1)
R &=~(D1&L1)
R &=~(D1&Y1)
R&=~(L1&Y1)
と記述することができる。
上はDate1についてだけ実装したが、その他のDateについても同様に構築することができる。
【0026】
この論理関数をグラフ化するには、LSIの論理合成ツールとして広く用いられているBDDパッケージを用いるのが簡単である。BDDとは、2分決定グラフ(Binary Decision Diagram)であり、論理関数をコンパクトに表現することができる。既約化したBDDは、その表現が一意になることが知られている。
【0027】
BDDパッケージとしては、オープンソースであるCUDD(Colorado University Decision Diagram Package)を使ってもよい。BDDは、論理関数の表現に適する。一方、ZDDは、BDDを集合表現にしたとも言えるもので、データ構造を集合表現にするときに役立つ。BDD上のANDは、ZDD上では、集合の∩ である。CUDDには、BDD表現から、ZDD表現に変換するコンバータが付属しており、上記論理関数もZDD表現に変換することができる。ZDDもその既約表現は、一意になる。
【0028】
図8は、制約論理関数RをZDD化したものである。上の煩雑な論理関数がZDDグラフにすると、非常にコンパクトに表現できていることが分かる。
図8において、D1がZDDグラフの始点であり、Tが終点である。
【0029】
[3.2. ハード行制約の実装]
次に、
図2の行制約の符号20で示した「日勤後に早番禁止」を実装してみる。前のワンホットコード論理関数にAND操作を行うと、制約論理関数Rは、以下のようになる。
R&=~(D1 & E2)
R &=~(D2 & E3)
R &=~(D3 & E4)
R &=~(D4 & E5)
この時点の制約論理関数RをZDDに変換したものが
図9である。
【0030】
同様にして、基数制約以外の全ての行制約を実装したものが、
図10となる。
【0031】
[3.2.1. 基数制約の実装例]
シフト集合の要素を数えて、その総和に対して不等式で制約することを基数制約という。例えば
図2の行制約中、基数制約は、符号21で示した「公休数は、1日から2日の間」という制約のみである。
基数制約を実装するアプローチには、例えば2つの方法がある。
【0032】
1つ目の方法は、BDD上で2進加算器を用いる方法であり、回路合成手法がそのまま適用可能である。
図13がその構成例である。対象となるシフト集合を2進加算器に入力する。2進加算器の出力を不等式で制約することになる。具体的には、やはり回路合成手法であるコンパレータを使用して制約すればよい。いずれも、回路のプリミティブ要素であるAND,OR,NOTの基本演算だけで、上述の全ては記述可能であり、BDDパッケージCUDDで記述できる。
【0033】
2つ目の方法は、集合演算による方法である。例えば、「1<=X<=2」という集合は、n入力集合から、1個取る全ての組み合わせ「nC1」と、2個取る全て「nC2」の組み合わせの和集合(union)と考えることができる。あるいは「1<=X」という集合と、「X<=2」という集合の共通集合(intersection) とも考えることができる。後者の様子を
図14に示す。基数制約に関しては、例えば、仕様から直接ZDDに落とし込むZDDパッケージTdZdd(URL: https://github.com/kunisura/TdZdd)があり、それを利用するのが簡単である。この場合、基数制約以外は、BDD上で構築してきたので、BDDからZDDにコンバートを行う。基数制約以外のZDD Z1と基数制約のZ2の∩演算を行えば、全体のZDDが得られることになる。ZDD集合演算もCUDD上で可能である。
基数制約を加えてコンパイルしたのが、
図11になる。
図8から、新たな変数増加はないことが分かる。
【0034】
[3.3. ハード予定制約の実装]
図2における1月7日の勤務を日勤(D2)とするには、
R &=D2
とすればよい。
同様に、
図2における1月8日の勤務は遅番(L3)以外とするには、
R &=~L3
とすればよい。この時点の制約論理関数Rをグラフ化したのが、
図12である。このようにして、任意の予定、任意のハード制約のコンパイルがシフトをワンホットコードでZDDにエンコードすることによって可能になる。
以上で、ハード制約の全ての実装が完了した。
【0035】
[3.4. ハード制約のコンパイル順]
どのような順序でZDDをコンパイルしても、最終的には、
図12になる。既約したZDDは、その表現が一意に定まるからである。一般にZDDの構築時間は、ZDDグラフが含むノード数に比例する。
図8~
図12で、一番ノード数が多いのは
図11であるが、最終的には、
図12が
図8に次ぐ小さいグラフとなっている。このことからも分かるように、ワンホット制約と、ハード予定制約は、最初にコンパイルし、その後にその他の制約を実装するのが、構築時間上もメモリ所要上も有利となる。特に大きなインスタンスほど、その効果は大きい。
【0036】
[3.5. ソフト予定制約の実装]
ここからは、[3.1 ワンホットコードのコンパイル]が終了したあとの状態を前提として説明を続ける。
ソフト制約の場合は、
図2の制約を次のように、「出来れば」を追加するとソフト制約となる。例えば、以下のような例である。
・1月7日の勤務は、出来れば、日勤(D2)
・1月8日の勤務は、出来れば、遅番(L3)以外
ただし、「出来れば」は、願望であって、出来ないことも許容しなければならない。予定制約の場合、制約適用前後で、グラフの形に変化はない。
実際、ソフト予定制約を適用した、
図15は、ワンホットコードを適用後の
図8と同じである。異なるのは、重みである。
ZDDの1枝ノードに予定制約重みが付加されるところが異なる。予定制約重みは、例えば、1月7日の重みをw2、1月8日の重みをw3とすると、
図15において、符号80の予定制約重みは「0」、符号81-83の予定制約重みはw2,符号84の予定制約重みはw3、符号85-87の予定制約重みは「0」とすればよい。
【0037】
[3.6. ソフト行制約の実装]
次に、日勤後に早番を出来れば禁止を実装する。新しい変数をXとして禁止状態を表現し、Xに重みpを付加すればよい。以下で、==は、同値を表す。
R&=X1==(D1 & E2)
R&=X2==(D2 & E3)
R&=X3==(D3 & E4)
R&=X4==(D4 & E5)
図16は、制約論理関数RをZDD化したグラフである。符号90-93の枝を重みpとすればよい。
【0038】
同様にして、基数制約以外の全ての行制約をソフト制約化して実装したものが、
図17となる。
【0039】
[3.7. ソフト基数制約を含まない場合の最短経路の計算方法]
数7におけるソフト制約重みgkが0となる場合の計算方法について述べる。
図17のZDDノードを一般化して、
図18を得る。符号100に示すZDDノードのブール変数をres、値をvalとするとき、resとvalは、符号103で示すアルゴリズムのように、子ノード101のTVal1と、子ノード102のEval1と、1枝の重みw(符号104)とだけで計算できる。重みwは、数7の
図2ソフト予定シフトの重みとソフト行制約重みと双対値(
図6の符号12)により定まる。ハード基数制約については、ハード基数制約は、[3.2.1. 基数制約の実装例]で示したように変数増加も重みの発生はない。従って符号103で計算可能である。
【0040】
[3.8. ソフト基数制約を含む場合の最短経路の計算方法]
ソフト基数制約を1項でも含む場合の最短経路の計算例を
図19に示す。符号116で示すZDDノードは、子ノードとして、符号114と符号115を持つ。符号115は1枝で結ばれている。1枝の場合は、重みと、基数制約に関するデルタ項を持つ。ここでは、重みwとして「-1」、基数制約デルタ項「1」を例として設定している。それまでの各ZDDノードでの1枝の基数制約デルタ項の総和を符号117で示すCountsとしてメモリに保持する。Countsは、それまでのシフトの総計値となる。各ZDDノードでは、Countsとそれに対応する重みの総計を表として持っている。親ノード符号116のテーブル符号112は、1枝ノード符号115に符号113を足したものと、0枝ノード符号114から求められる。符号112は、同じCOUNTS値を持つものに対しては、小さい方を採用するマージ操作を行って、符号111で示すテーブルを得る。最終ノード(符号110)では、さらに基数制約の重みを加算して、COUNTSに対応する値を得る。最終的に一番小さな値が数7の目的関数値となり求める経路となる。
【0041】
図19で、終点ノードから始点ノードへスキャンすることで、数7式の目的関数値を計算できることになる。主問題の双対解は、毎回変わる可能性があり、数7はその度に再計算が必要になる。一方、ZDDノードの構造は、一度コンパイルすれば不変である。
数7は、列生成中多数回、計算することになるが、Countsの計算は、ZDD構造が決まってしまえば、一度計算し結果をテーブルの形で保存できる。これにより、より高速化が可能となる。また、符号117は、データ圧縮して保存してもよい。また、逆に始点ノードから終点ノードへスキャンしてもよい。これらの手順により、始点と終点間でZDDノードの重みを総計して最小となる経路が判明する。以上述べた方法により、高速にプライサーの厳密解を得ることが可能になる。数7を用いて計算を行い、負であれば、列として 列追加(
図6 符号10)を行う。
【0042】
[3.9. 基数制約を含む場合の最短経路の別解]
別解法として、基数制約を、列生成法の主問題、基数制約以外をZDDでグラフ化し列生成子問題とする列生成法と分枝限定法で解くことも可能である。[3.8. ソフト基数制約を含む場合の最短経路の計算方法]で数7の厳密解は得られるが、インスタンス規模が大きな場合は、搭載メモリの制約を受ける場合がある。その場合、ZDDのコンパイルを基数制約以外に限定することでメモリ所要量を抑えることができる。
図20がその構成図となる。
図20は、
図6に示した各々のプライサー2に適用可能な構成を示しており、基数制約を主問題とする線形緩和ソルバ140と、その双対解に基づき、基数制約以外のハード制約とソフト制約についてシフトをワンホットコードでエンコードしたZDDグラフの始点‐終点間のノードコスト総和が最小となる経路を得るブロック141と、列追加142と、基数制約を主問題とする線形緩和ソルバ140の主解143に基づき分枝限定法によって整数解145を得るブロック144とを含む。
【0043】
[3.10. プライサーの並列化]
図6の符号11内で、各スタッフに対応するプライサー同士は、完全に独立しており、マルチプロセッサによる並列化が容易に構成できる。特にZDD構造は、シーケンシャルアクセス構造をしており、ZDDグラフが、CPUのキャッシュサイズに収まらなくとも、優れたアクセス特性を提供できる。その効果は、マルチプロセッサ構成にしても高い性能を維持できる。マルチプロセッサ構成は、CPU数に余裕がある場合は、各スタッフ毎にCPUを一つ割り当ててもよいし、GPUを利用してもよい。余裕がなければ、物理CPUをOPEN-MPなどでスケジューリングして割り当てればよい。また、複数のスタッフのグループ毎にCPUを一つ割り当ててもよい。
【0044】
MaxSAT(最大充足割当問題)とは,連言標準形(Conjunctive Normal Form, CNF)で書かれた論理式内の論理変数に対して,満たす節(clause)の数が最も多くなるような真偽値を求める問題である。Weighted MaxSATとは,CNFで書かれた論理式内の節に重みが与えられている場合に,論理式内の変数に対して,満たす節の重みの和が最も大きくなるような真理値割り当てを求める問題である。Weighted Partial MaxSATとは,前述のWeighted MaxSATに対し,必ず満たさなければいけない節(ハード)と満たさなくても構わない節(ソフト)を考えた最適化問題である。非特許文献5には、スケジューリング問題をWeighted Partial MaxSATに変換して解く方法が述べられている。ここでは、Weighted Partial MaxSATソルバーのことを単にMaxSATソルバーと呼称する。
【0045】
[3.11.MaxSATソルバーによる整数化]
さらに高速に解を得る方法として、
図6 符号4 MaxSATソルバーについて説明する。MaxSATソルバーに入力されるのは、
図6 符号5は、
図1 符号5でもあり、その具体的内容は
図2の通りである。つまり、システム全体の制約をCNF化してMaxSATソルバーに入力されている。MaxSATソルバーは、符号9 整数解を出力する。これによりMaxSATソルバー単体で、システム全体の解を得る能力を有している。
【0046】
このMaxSATソルバーの入力として、さらに、符号1 線形緩和主問題のソルバーの出力 符号6 浮動小数点データのうち、符号7 整数データを入力して取り込むことが特徴である。この例を
図21に示す。符号6のデータは、一般的には、浮動小数である。旧来のヒューリスティクスによる方法では、浮動小数点データ、例えば、0.9→1、 0.1→0 とすることによって整数化を行っている。このうち最も信頼度が高いデータは、整数値であり、もっとも信頼度が低いデータは0.5である。そこで、MaxSATソルバーに入力するデータは、整数となるデータを補助データとして入力する。MaxSATソルバー内の制約伝播機構が、入力された補助データと、システムの全体制約から、まだ決定されていない2値データを推定する機構として働く。これにより、高精度な実行可能解を早く出力する。この機構は、分枝限定中も動作させることができる。
【0047】
[3.12.MaxSATソルバーによる初期解生成]
MaxSATソルバーは、ハード制約を満たした解(以下、実行可能解と呼ぶ)の導出が速い。
図6 符号4のMaxSATソルバーを最初に動作させ、その解 符号9を
図3 符号30 線形主問題の初期解 としてもよい。こうすると、主問題の改善開始点は、MaxSATソルバーの出力する目的関数値とすることができ、収束の高速化に寄与する。また、MaxSATソルバーの目的関数値が、ZDDを構成するソフト制約の重みを下回る場合は、ソフト制約をハード制約としてコンパイルできる。例を、
図21に示す。これによりZDDの構造はさらにコンパクトになり、さらなる高速化が達成される。
【0048】
[4.本発明による効果]
大きなインスタンスでも、最適解保証つきの解が高速に得られる。
図23、
図24は、非特許文献1および2と同じインスタンスによる、最新性能の数理ソルバーとの比較である。
ScheduleNurse3が本発明を適用したソルバーである。明らかに、本発明による方法が優位であることが分かる。
また、アカデミックなベンチマークサイト(http://www.schedulingbenchmarks.org/changes.html)には、ナーススケジューリング問題に対して国際記録更新情報が載っている。本発明者(Tak.Sugawara)による更新は、全て本発明による結果であり、長年未解決だった問題を解決する貢献も果たしている。
【符号の説明】
【0049】
1 線形緩和主問題ソルバー
2 プライサー
3 分枝限定法ブロック
4 MaxSATソルバー
5 ハード制約と制約とソフト制約
6 符号1の主解(浮動小数点出力)
7 符号1の整数データ出力
8 分枝限定法による整数解
9 MaxSATソルバーによる整数解
10 主問題へ列追加
11 プライサーブロック
12 主問題ソルバーの双対解出力
13 ロースター
20 行制約の例
21 基数制約の例
30 列生成法における初期解
80 日勤D2の重み
81 早番E2の重み
82 遅番L2の重み
83 休みY2の重み
84 遅番L3の重み
85 早番E3の重み
86 日勤D3の重み
87 休みY3の重み
90 日勤(D1)→早番(E2)の重み
91 日勤(D2)→早番(E3)の重み
92 日勤(D3)→早番(E4)の重み
93 日勤(D4)→早番(E5)の重み
100 ZDDノード
101 符号100の子ノード
102 符号100の子ノード
103 値、ブール値決定のアルゴリズム
104 符号100の重み
110 最終ノードでソフト基数制約の重みをマージした結果
111 子ノードの結果をマージした結果
112 子ノードの結果をマージ途中経過
113 符号116ノードの重みと、デルタカウント分
114 子ノード
115 子ノード
116 ZDDノード
117 シフトの和
140 プライサー中の主問題ソルバー
141 プライサー中の基数制約以外のZDD
142 符号140への列追加
143 符号140の主解
144 分岐限定法ブロック
145 符号140の整数解
146 符号140の双対解
【要約】
【課題】最適解保証付きの解を高速に出力できるようにする。
【解決手段】列生成法において、符号1の線形主問題ソルバーは、符号11のプライサーブロックに双対を出力する。符号2の各スタッフ毎のプライサーは、各スタッフ毎に関わるハード制約とソフト制約について、シフトをワンホットコードでエンコードしたZDDグラフを作る。ZDDグラフの始点と終点間のZDDノードのコストの最小値を得て、符号10の列追加するかどうかを判断する。
【選択図】
図6