2024年3月19日火曜日

機械学習動向について

少しサーベイしてみました。

 2012.13349.pdf (arxiv.org)

MIPソルバーのBranch and Boundについて、

Neural Divingと、Neural Branchingについて提案しています。


[2110.14053] NeuroBack: Improving CDCL SAT Solving using Graph Neural Networks (arxiv.org)

CNFをGNN構造に展開して機械学習によりInitial Phaseを予測しようというもの。

アルゴリズム3,4に関して、少しアイデアが浮かんできたので、今年前半で実装してみようと思います。組み合わせ最適化で最も重要、かつ難しいのは、整数解を如何に速く発見できるか?です。LBを推定するだけなら、かなり大きな問題でも1分もあれば、出来てしまいます。しかし、そこからUBを近づけるには、現状かなり時間がかかってしまいます。

上記に挙げた方法も無くはないと思いますが、NSPに関しては、未だ本質的改善が出来る可能性があると思います。




2024年3月15日金曜日

夜勤明け公休なしの原因

 昨日もユーザミーテイングで、一緒に悩みました。

現象は、夜勤明け公休なしになってしまうというものです。

結論から言うと、原因は、いつもの、

「リソースのないところでの予定の入れすぎ」

でした。

調査として次を行いました。

<公休数が少なすぎる可能性>

可能性として、8回しか公休がないところで、7回夜勤をすると難しそうだ、という懸念はありました。そこで、年休をフリーで追加しましが、変化はありませんでした。別手段としては、公休数のソフト制約を弱めて変化がなければ、それが原因ではない、ということが言えます。

<夜勤明け公休制約のハード制約化>

「夜勤明け公休なしは、許容できない」とのことでしたので、ハード制約にしました。結果、ハードエラーとなり解はありませんでした。

<当該日周辺の予定をソフト制約化 原因の特定>

ハードエラーで指摘される箇所周辺の予定を弱いソフト制約を行いました。結果、予定変更された箇所が一か所ありました。リフレ予定が早番1に置き換わった箇所が1か所ありました。これにより、原因が確定しました。早番1を行うスタッフがいなかったのです。

<暫定対策>

列制約の殆どはハード制約、夜勤明け公休もハード制約、リフレ等の希望休みもハード制約で、解がない状況です。そこで、2F/3F間のJOB変更を行い急場をしのぎました。

<恒久対策>

リソース余裕がないところに、予定が多数重なると、スタッフQOLに関わる部分に影響として現れることがあります。そうなると、

■列制約の殆どはハード制約、

■夜勤明け公休もハード制約、

■リフレ等の希望休みもハード制約

では、解があるはずもないので、あらかじめその日に入れられる予定数を制限することが恒久対策になります。

例えば、

    入り 1名

    明け 1名

    明け公休1名

    早番1 1名

  早番2  1名

  遅番 1名

   であり、上記仕事を出来るスタッフが8名しかいないのであれば、休みが取得可能なのは、僅かに8-6=2名ということになります。これが物理制約でこれ以上予定休みがエントリーされれば、解は決してありません。なので、この場合、

「休みエントリーは、2人まで、それ以上は、予定を出すときにスタッフ間で話し合い、じゃんけん、あみだくじ...で決めてね」。と予定書き込み表に予め書いておけばよい訳です。こうすれば、今回のような問題は起こりにくくなります。

事ある度に、言及しているのですが、なかなか理解されていない方が多いです。

schedule_nurse_lecture_note.pdf (nurse-scheduling-software.com)

の45page入学式・卒業式を参照ください。

人生初の勤務表作成 算数ができない?師長 (nurse-scheduling-software.com)

予定エントリーが無制限であったとしても、この歯止めがあれば、かなりの確率で救えると思います。入学式・卒業式に限りません。上記を取り入れて欲しいと思います。

是非、算数を理解して、出来れば、スケジュールナースの解析機能を使うことなく、勤務表を完成して頂きたいと思います。解析は、上記のように面倒な作業ですから。(一見関係のない、スタッフQOLに関わる部分にソフトエラーが出てくるので、気づきにくい種類のエラーとなります。予定入れすぎによるリソース不足という真の原因に辿りつくのに時間がかかります。)

4月は、新任の看護師長になりますが、古参スタッフからいじめられるケースを耳にします。知見を共有し助けられる場があれば、と思います。



 

2024年3月14日木曜日

インドネシアのナーススケジューリング

 https://www.nurse-scheduling-software.com/constraints_faqs/chapter51/

下がオリジナル解ですが、普通に逆循環や10連勤とかあったりします。

流石にそれはないだろうということで、制約を追加しています。
また、マクロでスタッフ間のシフト回数の平準化を自動化しました。上のオリジナル解に対して、偏差が極小に抑えられています。






2024年3月13日水曜日

Copilotに質問してみる

Q.スケジュールナースの開発者は誰?

スケジュールナースは、ナーススケジューリング問題を解決するために開発された高速勤務表ソフトウェアです。その哲学は、日本のシフトを改善し、管理者の負担を軽減するだけでなく、スタッフのライフスタイルにも影響を与え、生産性の向上に寄与することです1

スケジュールナースは、以下の成果を持つ菅原システムズのCEO、菅原孝幸氏によって開発されました:


Q.ハード制約とソフト制約の違いについて

もちろんです!ハード制約ソフト制約は、最適化問題やスケジューリング問題などでよく使われる用語です。それでは、両者の違いを説明しましょう。

  1. ハード制約:

  2. ソフト制約:

例えば、スケジューリング問題において、ハード制約は必ず守らなければならない制約(例:スタッフの最低労働時間)であり、ソフト制約はできるだけ守りたい制約(例:スタッフの希望休み日)です。最適化アルゴリズムは、ソフト制約を満たすように試行しますが、ハード制約に準拠するソリューションを見つけるために必要であればソフト制約を破ることができます。

理論的には、ソフト制約は柔軟性を持たせ、現実の問題に適した解を見つけるのに役立ちま

とまともな答えが返ってきます。面白いのは、昨日も全く同じ質問をしたのですが、答えは、同じ内容もしくは、近い内容ではあるものの、同じ文章ではない、ということです。

この深層化学習・機械学習は、モデリングに使えると思います。つまり、スケジュールナースに仕事をさせるには、

仕様→制約→Day集合・グループ集合・シフト集合の合成と、

スケジュールナースが理解している言葉にボトムダウンしていく必要がありますが、最も下層の集合合成で使おうというアイデアです。

例えば、昨日行ったDay集合の合成を自動で出来る可能性があると思います。このDay 集合の合成は、初めて行う方には難しいと思いますが、これを代わりに生成する、みたいなイメージです。

こちらは、スケジュールナース専用の学習が必要になりますが、無料で使える環境も出てきており試せる環境が出てきました。しばらくは時間が取れないので、直ぐには無理ですが、今年後半以降考えて行きたいと思います。



2024年3月12日火曜日

週あたりの勤務数ー先月部を見ない実装

 https://www.nurse-scheduling-software.com/japanese/constraints_faqs/chapter35/#no_look_at_previous_month

実装してみました。Pythonは、使っていません。

Day集合上級編とマクロによる実装となります。結構難しいと思いますが、Day集合作成とマクロの練習用としてもよいと思います。

2024年3月10日日曜日

GitHub投稿を頂きました。

 SUGOIYAさんによる看護師勤務表2交代のサンプルが提供されました。ソース公開の主旨に賛同くださりプロジェクトファイルを公開して頂きました。

看護師2交代のサンプルとして、多くの方に利用して頂けると思います。


https://www.nurse-scheduling-software.com/japanese/nurse_scheduling_problem/chapter13/

本当にありがとうございました。