単純にFowardとBackwardを使うと上手く行きません。
下図で、前方和と後方和を各々足して、各ノード共、a+b+cにしたいのですが、
単純にすると、そうはならないことが分かります。
どちらか一方の和は、一歩引いて、a+b+c となるようにします。
単純にFowardとBackwardを使うと上手く行きません。
下図で、前方和と後方和を各々足して、各ノード共、a+b+cにしたいのですが、
単純にすると、そうはならないことが分かります。
0/1 Branchingだと、1側が重いのに比べて0側は、軽い、と言うかあまり効かないことが多いです。こうした偏りを是正する方法として、Ryan-Foster Branchingと言う方法があります。
例えば、
休休 A
勤勤 B
休勤 C
勤休 D
A/B とC/DでBranchingします。比較として、通常ブランチ
休
~休み
を考えてみます。休=1でブランチとすると、これはかなり強い限定になります。しかし、~休=0のブランチは、休み以外を選択するわけで、弱い限定になります。この傾向はシフト数が多くれば多いほど、強まります。1が強い限定を生み、0が弱い限定しか生まない、ということは、Tree構築においてバランスが悪い結果となります。1ブランチの枝は短いのに対して0枝は、長い枝になります。なので、なるべく同じ確率となるようにしたい訳です。これが、Ryan-Foster Branchの背景になります。
複雑な割には、効果が少ないと判断して、スケジュールナースでは採用していませんが、SCIPでは、割に使っているようです。
またしても、アプローチが失敗しました。
キャパシティカットが良さそうでしたので、
https://schedule-nurse.blogspot.com/2026/03/blog-post_22.html
さらにこの発想を強めて(Tightening)、Day毎の累計制約として抽出しました。具体的には、休み数制約(制約としては存在しないものの時間制約や総勤務数制約に相当)と、土日勤務数制約のDay毎の累計制約として取り出して、LB取得後にMIPソルバに投げるというものです。この方法をCumulative Capacity Cutと命名しました。発想は、Roster毎の資源総計だけではなく、Day毎の資源を明示することによって、Cover制約達成を促進する狙いです。
結果は、
この結果、Lpソルバが真のUB値と等しくなったときに、UB値でカットオフしなくとも(MIPソルバは真のUB値を知らない)MIPソルバは一瞬で、UB値を算出できる、←SATソルバより速い、ということが分かりました。
で、問題はインスタンス13になります。このインスタンスに関しては、期間は1カ月であるもののシフト数は19と多く、スタッフ数120人と、いわばインスタンス24のミニチュア版、と見ることもできます。残念ながら、Lpソルバの段階で、真のUB値には遠く、MIPソルバに渡しても、長期の時間がかかっています。ただ、COPTにしても解けなかったインスタンス13が有限時間内に解けるようにはなったので、一定の効果があることは分かります。
まとめとして
1)LpソルバのLBが真のUB値に等しいとき、MIPソルバが最強。SATソルバより速い
2)LpソルバのLBが真のUB値から遠ければ遠い程、MIPソルバが解けない可能性が高まる
3)LpソルバのLBを上げることは正義
ということが分かりました。市井の実務インスタンスは、インスタンス8程度なので、実務インスタンスにおいてMIPソルバを活用できる場面もある、と考えます。(SAT整数化より速い場面もある。)
いずれにせよ、このアプローチで進んで、インスタンス24が解ける見込みはないと判断しました。(ミニチュア版でこの遅さなら、超巨大インスタンス24が解ける筈がない)
下記資料中、
Q. 4page 「人的リソースの物理限界まで配置が可能」とは、どういうことか?
永くお使い頂いているユーザさまより メールを頂きました。
***
思えば、2016年ごろにスケジュールナースを見つけて、
使わせていただいてから、もう10年近くになります。
最初の頃は、記号記述のような制約入力方法と格闘していましたが、
すぐに、わかりやすいUIに進化して、性能も向上して、
次々と新機能も追加され、使いやすさがアップしていきました。
使えば使うほど、こんなこともできてしまうのかと、スケジュールナースの
ポテンシャルの深さには、今でも驚かされています。
幾度となく、厳しく複雑な勤務条件にも遭遇しましたが、
スケジュールナースの性能と柔軟な制約記述方法のおかげで
条件をクリアすることができて、勤務の質も看護の質も落すことなく
ベストを目指した勤務表作成ができています。
スケジュールナースと菅原さんには感謝しかありません。
本当にありがとうございます。
***
永くお使い頂きありがとうございます。引き続いて、第4世代(新ソルバ)、第5世代(AIモデリング)を準備中です。現在、世界記録更新で最後の1問に苦闘していますが、この挑戦で得た知見をフィードバックして汎用実務問題で他を圧倒するスケジュールナースがさらに進化した版ソルバを今年中に、リリースしたいと思います。
また、検証・ご評価をお願いできればと思っております。宜しくお願い致します。
Q. 5月の勤務表作成にあたり、制約日の設定をしようとしたところ
6月以降の制約終了日のカレンダーが表示されなくなりました。
開始日、終了日、表示日すべて6月以降の表示ができないようです。
設定等の変更の必要がありましたら、ご教示ください。
Ans.
古いエディションをお使いのようです。(ご案内が漏れていたようです。)現在リリース中のエディションは下記二つが全てです。
https://schedule-nurse.blogspot.com/2025/12/qprivate.html
上記以外のサポートは全て停止しました。
恐れ入りますが、移行手続きをお願いいたします。
前回は、ボトムアップに構築しましたが、トップダウンで、構築する方法もあります。
二つの方向から、計算するのは、ノードを削減するときです。