2026年10月6日火曜日

ルールを制約化する上で大事なこと

<仕様とは?> 

プロジェクト作成サービスでは、お客様は、面倒なスケジュールナース上の制約についての知識は必要ありません。それでも、その職場のルールをお伝えいただく必要はあります。この職場のルールを「仕様」と呼んでいます。

「仕様を書いてください」というと、身構えてしまう方が多いのですが、大事なことは、自分の職場のルールを部外者である私に伝える、ということです。最初から完璧な水も漏らさないような仕様を書く必要はありません。最も重要なルールは何だろう?と、大事な事から記述していきます。

その職場のことを何も知らない部外者に伝える、ということは、その仕様があれば、その職場のルールを他で再現出来るようになる、ということでもあります。

言うなれば、その職場のルールを他で再現させる作業が、「仕様を書く」ということでもあります。

<仕様は作りあげていくもの>

ナーススケジューリングは、意識されることのないルール「暗黙知」があることが前提となって、「機械では作れないもの」とされることが多く、またその主旨の学術論文が最近、複数出ています。が、スケジュールナースはそのような立場に立っていません。

Excelに出力した自動勤務解を見て頂くと、「そこは違う」という箇所が必ず出てきます。つまり、仕様にはなくても自職場ルールと違うことは、分かるのです。そういう場合に、そのルールを言葉にして頂ければよいのです。これを「仕様追加」と呼びます。仕様追加していくと、前の仕様と矛盾していることに気づかれるかもしれません。ルールに矛盾があるとき、制約化もできないので、そこを解消して頂くのは、お客さま自身です。ルールは、その場の思いつきであってはなりません。ルールなので、しょっちゅう変わってよい、ものでもありません。

こうした作業を通じて、その職場の普遍的なルールと必要な優先度順が逆に見えてきます。必然として、「その職場のルールの整理」が出来ます。

この自動勤務表をExcelで出力→違うところを指摘(ルールを言葉で伝える)→制約化、というループを数回行うと、自職場ルールをほぼ再現した自動勤務解が出来ます。大体よさそうだ、という時点で、発注をなさってください。

さらに細かな実装は、さらに、そのルールをファイルに収めたプロジェクトファイルをお渡しした上で行います。その際、使い方等をZOOMでお教えします。

<仕様を書く力>

仕様を人に伝えるにあたって、大事な能力は何でしょうか? TVでよく解説をされている池上さんは、本当に分かりやすいですよね。池上さんと言わんとしていることが良くわからないじれったい人との差は何でしょうか? 他人とのコミュニケーション能力だ、という人もあるかもしれませんが、私は、一言で言うと、「国語力」だと思っています。

最近はAIの時代で、AIでプログラミングする時代になってきました。スケジュールナースもAI対応(言葉で制約を伝える)を準備していますが、AI時代でも、国語力の重要性は、変わりないというよりむしろ増している、のではないかと思います。

<メンテナンス>

プロジェクトファイルが出来上がって、数か月廻すと、細かな実装も落ち着いて実用的な解が出てきてやがて仕様追加することはなくなります。これで終わりではありません。勤務表は、メンテナンスがつきもので、スタッフの入職、退職、移動、役割の変更等により、常にルールは変わっていくものです。つまり、プロジェクトファイルのメンテナンスを誰かが行わないと、せっかく導入したソフトウェアが使えないものになってしまう恐れがあります。

それを防ぐには、自分達で、プロジェクトファイルを操れるようになる、必要があります。そのために、導入1年の間は、ZOOMレクチャを必要なだけ行えるようにしています。何回行っても無償です。

「スケジュールナースがAI対応するようになれば、学ぶ必要はないじゃん」、と思われているかもしれませんが、それは違います。何度も言いますが、大事なことは、ルールを他人に伝える力、この場合、他人=AIであり、依然として国語力が大事なのです。

<管理者>

管理者も変わっていきます。管理者の頭のなかだけにあるルールが、その管理者が居なくなることによって失われるリスクがあります。しかし、その職場のルールが仕様という形で、整理・明文化されていれば、スムーズに移管できるようになるのではないでしょうか?


2026年10月5日月曜日

RTX 5070TI driver updateでフリーズ発生(32.016.1088 Freeze)

 突然に、時刻が止まったままとなり、キーボード・マウスも効かなくなりました。WindowsEventログでも、何らかの不具合の痕跡は残っていません。この現象は、2日前から突然に、数時間間隔で発生しました。

Copilotに相談したところ、RTX5070TI等の最新GPUのドライバは、最初のリリースは安定しているが、その後のUpdateで当該事象を発生することが時々ある、とのことのようです。実際、DriverのUpdate履歴で見ると確かに、DriverがUpdateされていました。

WindowsUpdate→更新の履歴→ドライバの履歴


デバイスマネージャで、ドライバを元に戻すと、フリーズは発生しなくなったので、原因確定です。


それにしても、OSを巻き込んで、フリーズするとは。ここ数十年久しく見なかったドライババグです。




2026年10月3日土曜日

Q.同じ施設で3種類の勤務表を作成していますが、一つの勤務表にまとめられますか?

 Ans. 3つの勤務表が、「互いに独立」しているならば、3つの勤務表のままの方がよいです。

勤務表のスタッフ数は、できるだけ少ない方が、(機械で作成するにしても)容易だからです。

「互いに独立」とは、その勤務表グループのスタッフが、他の勤務表グループの影響を受けない、ということです。例えば、あるスタッフが、勤務表1のスタッフであっても、勤務表2の状態の影響を受け自身のシフトに影響を受ける場合がある、というケースでは、「互いに独立」ではありません。そういう場合は、影響を受けている勤務表1と勤務表2の二つを一つの勤務表としてスケジュールナースプロジェクトを作成する必要があります。(そうしないと作れません。)

同様に、勤務表3も、勤務表1の影響を受けて変わる可能性があるのであれば、3つの勤務表を一つにする必要があります。

プロジェクト作成サービスをご利用になり、どういう影響があるか、そのルールを言葉で伝えて頂ければ、制約という形で、盛り込みます。3つの勤務表が、一つのプロジェクト単位として、作成できます。



2026年10月1日木曜日

SchedulingBenchmarks の結果まとめ

 Instance9/15/18結果をUpdateしました。



Instance24を除き、全てのインスタンスの厳密解が確定しました。Instance21までは、Instance15を除き1時間程度以内で厳密解を出力できる、ということが視野に入ってきました。(黄色部は、商用ソルバを使用という条件下で。)

上表のCPUは、数世代前のCPUなので、現世代の最速CPUを使えば、倍速に近い結果となるでしょう。

上表のように全厳密解を提示できるのは、スケジュールナースAL3(DVT)版だけです。Gurobi/Cplex/Coptのいずれを用いても、上表の厳密解を得ることは容易ではないでしょう。

2026年9月30日水曜日

Instance15 解析ツール

 ログ解析用ソフトを制作しました。ログを読み込んでBranchTreeを作ります。

"""

ブランチログから Branch Tree を DOT 形式で出力するスクリプト


対象行:

  <cpu>(cpu sec)  Selecting Child Node id=0: Br:De:d N:n D:day S:shift Dir:dir Obj:obj [Gain:g]

  Adding Node thr=0 Br:De:d N:n D:day S:shift Dir:dir Obj:obj [Gain:g]


木の組み立て規則:

  - Selecting (De:0) が ROOT ノード。

  - Adding Node は「直前に Selecting されたノード」の子として登録(未探索ノード)。

  - Selecting は、同じ (De,N,D,S,Dir) で Adding 済みのノードがあればそれを探索済みにする

    (バックトラック時もこれで正しい親につながる)。

    無ければ新規ノードを作り、直前に Selecting されたノード(深さ De-1)の子にする。

    深さが合わない場合は、深さ De-1 で最後に Selecting されたノードを親にする。


使い方:

  python branch_tree_to_dot.py instance15_log_simplified.txt

  python branch_tree_to_dot.py log.txt -o tree.dot --render svg --rankdir LR

  python branch_tree_to_dot.py log.txt --max-depth 20     # 深さ20以下のみ表示

"""

Selecting以下を読み込んでBranchTreeをDOT形式で出力します。

全部をDrawする画像化は無理なので、Depthを制限して表示しています。
これで、何が嬉しいかというと、BranchTreeの様子を視覚的に確認できる、のでボトルネックを把握しやすくなる、ということになります。

Instance15に関しては、厳密解の証明のためには、現開発中のソルバでも一週間ほどかかります。これをなんとか短くする方法を思案するのに、有効なツールです。

解収束の様子は、下図になります。

Instance15は、昨年、菅原システムズによって厳密解が示されるまで、十余年に渡って厳密解が知られていなかったインスタンスになります。それでも、3分程でLB-UBGapが1%程度の実用解に達していることが分かります。


2026年9月29日火曜日

不確実性下での看護師スケジューリング

 An analytics-driven optimization framework for nurse scheduling under uncertainty

🩺 要約:不確実性下での看護師スケジューリング最適化フレームワーク

1. 研究の背景

  • 看護師の欠勤(突発的な病欠・緊急対応など)は 5〜10% と高く、特に病院や救急では 10.7% と最も高い。

  • 従来のスケジューリングは「決まった条件を満たす」ことに集中しており、 欠勤の不確実性を十分に扱えていない。

  • 欠勤が発生すると、業務負荷の偏り・ケア品質の低下・スタッフの不満が発生する。

2. 本研究の目的

従来の「均一な余剰配置(overstaffing)」ではなく、 欠勤が起こりやすい“クリティカルなシフト”を特定し、そこに重点的に余剰人員を配置する データ駆動型のスケジューリングモデルを提案する。

3. 提案手法の構成(3つの柱)

① データ駆動型の「クリティカルシフト」分析

  • 過去の欠勤データから、曜日×シフト(朝・夕・夜)ごとに欠勤率を計算。

  • 欠勤が多いシフトに criticality score(重要度) を付与。

  • 例:月曜朝・週末夜などが高リスクになりやすい。

② クリティカルシフトを組み込んだ MILP 最適化モデル

  • 従来の「均一に余剰配置する」方式を廃止。

  • criticality score に応じて余剰配置を優先するように目的関数を修正。

  • 余剰配置量にも上限を設定し、過剰な overstaffing を防止。

③ 欠勤発生時のリアルタイム再配置(Overflow Unit Heuristic)

  • 余剰配置された看護師を「Overflow Unit(予備ユニット)」として確保。

  • 欠勤が発生したら、Overflow Unit から必要な資格を満たす看護師を再配置。

  • 特徴:

    • 再最適化不要(高速)

    • 最小限の変更で対応

    • 資格レベルの低い看護師から Overflow に回すことで柔軟性を確保

4. 実験結果(概要)

  • 実データを用いて、従来モデル(均一 overstaffing)と比較。

  • 提案モデルは以下の点で優れていた:

    • 欠勤発生時の カバー率が向上

    • スケジュールの 安定性が向上

    • 看護師の 希望・公平性・経験バランスも維持

  • 特に欠勤が多いシフトでの効果が大きい。

5. 本研究の主な貢献

  • クリティカルシフトに基づく余剰配置戦略の提案(既存研究にない視点)

  • 汎用的な MILP モデル(病院ごとに制約を調整可能)

  • Overflow Unit による高速な欠勤対応アルゴリズム

  • 予測モデル(Hurdle Model)による現実的な欠勤シナリオ生成

6. 一言でまとめると

欠勤が起こりやすいシフトをデータで特定し、そこに余剰人員を重点配置することで、 スケジュールの頑健性と実運用の柔軟性を大幅に高めるフレームワークを提案した研究。

2026年9月28日月曜日

Maching Learningによる修正

南山大学 先生方による論文 です。

JSME-TJ

✨ 本論文の要約(A solution method of nurse scheduling problem using machine learning)

1. 研究の背景

  • 看護師の勤務表作成(ナーススケジューリング問題)は、依然として多くの病院で手作業で行われている。

  • 数理最適化(MIP)による自動生成手法は多数存在するが、現場の看護師長が持つ暗黙の条件(hidden conditions)を満たせず、実用化が進んでいない。

  • 暗黙条件の例:看護師同士の相性、連続勤務の微妙な調整、病棟特有の慣習など。

2. 研究の目的

  • 数理最適化(MIP)+機械学習(DNN)を組み合わせたハイブリッド手法により、

    • 暗黙の条件を学習し、

    • 看護師長が受け入れられる勤務表を自動生成すること。

3. 提案手法の概要

ステップ構成

  1. MIPで初期勤務表 S を生成

  2. 看護師長が不満な部分を修正 → F(修正後勤務表)

  3. S を入力、F を教師データとして DNN を学習

  4. 学習済み DNN が勤務表を自動修正

  5. 修正が不要になるまで 2〜4 を繰り返す

→ 看護師長は暗黙条件を言語化する必要がなく、修正作業そのものが学習データになる。

4. 暗黙条件を模擬する「仮想看護師長問題(VCNP)」

  • 実験前に、暗黙条件を数理的に模擬するために VCNP を構築。

  • VCNP は「看護師の相性」などの隠れた条件を含む MIP。

  • VCNP の解を DNN の教師データとして使用し、暗黙条件を学習させる。

5. シミュレーション結果

  • 20名・28日間の小規模問題で検証。

  • DNN の損失(MSE)は 約20回の反復でほぼゼロに収束。

  • 学習後、異なる初期勤務表を入力しても、

    • 相性の悪い看護師が同じシフトに入らない

    • その他の制約も破らない といった「暗黙条件を満たす勤務表」が自動生成された。

  • 1回の反復は約20秒で実行可能。

6. 実際の病院での実験(藤田医科大学ばんたね病院)

  • 看護師長が実際に勤務表を修正し、その修正を DNN が学習。

  • 結果:

    • 約20回の反復(約30分)で看護師長が受け入れる勤務表を生成

    • 従来は勤務表作成に 6時間以上かかっていた

    • 学習後は、別の初期勤務表でも 即座に受け入れ可能な勤務表を生成

→ 現場での実用性が高いことを確認

7. 結論

  • 提案手法は、数理最適化では扱えない暗黙条件を DNN が学習することで、現場の看護師長が受け入れる勤務表を生成できる。

  • 実験では、手作業の負担を大幅に削減できることが示された。

  • 今後は、より複雑な暗黙条件や実運用システムの構築を進める予定。

8. 本研究の意義

  • 数理最適化と機械学習のハイブリッドは、人間の暗黙知を取り込む新しいスケジューリング手法として有望。

  • 医療現場の働き方改革に寄与する可能性が高い。