2025年3月5日水曜日

医師当直表・拘束表 メンテンナンスマニュアル

顧客向けのメンテナンス用マニュアルです。(個人名等は伏せています。)

このプロジェクトは、スケジュールナース史上、最難度です。地方の公立病院であり大学病院からの派遣医師によって成立しています。それもあって、とても複雑です。 

https://www.nurse-scheduling-software.com/japanese/publications/On-call_and_duty_rostering_for_doctors.pdf

ご覧になると分かる通り、プロジェクトは作成して終わりではなく、数々のメンテナンスをしながら、リファインしています。この道10年の私ですら、バグなしには、稼働できませんでした。また、このような複雑な仕様をそれまで作成していた医師から聞き取りまとめる事務屋さんの力なしには、実現できなかったと思います。

プロジェクトの中には、このような難しいプロジェクトもあります。大抵のプロジェクトは、フレームワーク的な一定の型にあてはまり、サンプルを見ながらお客さまように構築できると思います。しかし、中にはこういう、お客さまが一から作るのが不可能に近いプロジェクトもあります。そうした場合には、プロジェクト作成サービスをご利用頂きたいと思います。





2025年3月2日日曜日

難問を解くことには意味がある

 ずっと解けない問題INRC2 8WEEKSに取り組んでいますが、果たしてこんな事をしていて意味があるのだろうか? と自問自答することがあります。

その難問は、無数にある世の中に存在するインスタンスの1問に過ぎません。つまり特殊な事例でしかないのです。それを1問解いたところで何になるというのでしょう?それよりは、使いやすいUIの開発や、モデリングのAI化を実装した方が人のためになるのでは? という人もいるでしょう。

今回、難問を解くにあたって二つの技術開発を行っています。

1)数理ソルバ用のSoftCardinality実装アルゴリズムの開発 

2)CUPDLPの中規模用途での高速化 

1)については、前回述べました。2)については、その方針を示しました。

https://schedule-nurse.blogspot.com/2025/02/pdlp.html

これにより、INRC2とSchedulingBenchmarksの未解決問題を全て解く、という野心的な試みの最中です。その結果として、

■NSPにおいて、決まった手順によって、解ける問題領域が増える

ということだろうと思います。特殊な事例を解く技術を開発することによって、一般化した実務問題にも適用できます。大袈裟な言い方をすると人類の知をほんの少しだけ広げる意味があると思います。

The illustrated guide to a Ph.D.

NSPに関して、それが出来る..最も近いところに居る人間は、私である、ということです。無数とも言える失敗の先に最適なアルゴリズムがある、と信じて取り組んでいます。技術開発は、出来るか出来ないかは、出来るまで分かりません。しかし、最も近い人間がやらないで、誰が出来るというのでしょう?それが、拘り続ける理由です。

2025年3月1日土曜日

アルゴリズム3 ソフトCardinality制約の改善

 Cardinalityとは、数を数える制約のことです。基数制約とか不等式制約とか、言い方の変遷がありますが、皆同じです。制約の範疇を分けるものとして、

Cardinalityか、NonCardinalityかの2種類があります。

■Cardinality   ー数を数える制約

■NonCardinality ーブール演算制約

一般に数理ソルバの制約は、全てCardinalityで記述されます。従い、数理ソルバは、Cardinality制約が得意です。というより、数理ソルバは、Cardinality制約でしか記述できません。ブール演算は得意ではありません。一方アルゴリズム1系のソルバは、ブール演算が得意で、Cardinality制約は苦手です。Cardinalityのスケジュールナースの特徴は、常に、許容範囲というソフト範囲が明示されていることです。ソフト範囲が限定されて、ある値を境にハード制約になる、というのは、恐らくは、スケジュールナースユニークであり、他のソフトでは扱わないと思います。便利な反面、初心者には、とっつきにくく,これで苦労された方も多いのではないでしょうか?実は、ブール演算で、数を数えようとすると、必然になるのですが、これについては、別の機会に。

余談ですが、情報は全て0/1だけで表現できることを示したのは、シャノンという学者です。0/1が最もプリミティブな表現です。そこから出発するのがブール演算です。なので、数を数えるということもブール演算で表現可能です。つまり、コンピュータの動作の最も基礎は、0/1であり、その合成集合は、AND/NOT/ORの3つのブール演算オペレータでどんなものでも合成出来ます。


一方、制約は、2種類しかありませんという話はよくします。一つは、ハード制約、もう一つはソフト制約です。

数理表現への橋渡しは、グラフ理論上のグラフになります。制約理論で言えば、リソース制約下の最小パス問題(RCSPP)、になります。実装という観点でみると、下のような難易度になります。

                      | Hard  |    Soft

ーーーーーーーーーーーーーーーーーーーーーー

Cardinality   |  難 |  超難

NonCardinality |  超簡単 |  簡単    


つまり、Soft Cardinalityの実装は超難しいのです。上のHard Cardinality制約については、2022年に特許化しましたが、そのときは、Soft Cardinalityについては解決していませんでした。

今回INRC2の難問を解くに当たって、副産物として出てきたのは、このSoft Cardinalityに対するアルゴリズムです。

未だ解けてはいないし、改善も進行中なのですが、ドラスティックな変化があるので、中間報告しておきます。

下は、池上ベンチをアルゴリズム3現行スケジュールナースで解いた様子です。




アルゴリズム1は、数秒で解けるのに対して、このように時間がかかっているのは、Soft Cardinalityのコンパイルに時間がかかっているからです。



それが、現在開発中のソルバでは、


となっています。これは、Soft Cardinalityのコンパイル時間を削減出来たからです。(それでもこの問題に対してAL1の優位は変わりませんが。)
例えば、多数のCardinlaityがScheduling Benchmarks Instance13では記述されていますが、これを全てソフト制約にした場合は、現行スケジュールナースではコンパイル出来ません。しかし、この技術を使うとコンパイル出来るようになります。数理ソルバに取り組んで以来、長年の研究によりようやく満足できる性能を発揮できるようになりました。

これにより、数理ソルバを用いて解ける可能性が高まることを意味します。Al1/3共、各々得意な領域はあるのですが、使用比で、現状100:1から100:10位になる位になるのではないかと思います。特に厳密解を知りたい場合に有用になる筈です。

また、Al1とAl3を融合した万能ソルバも視野に入っています。これにより最終目標である、常に厳密解にもっとも近い解を示すアルゴリズムを提示できる可能性が高まりました。

アルゴリズムというのは、問題の解き方です。ソフトウェアの基礎になります。分岐とループ(IF文、For文)さえあれば、何でも処理できるを示したのは、チューリングという学者です。

NSPに関して、このアルゴリズムを使えば、常に最適もしくは、最も最適に近い解が得られる、というのは分かっていません。というか、そもそもNP困難なのでそれを示すことは不可能であろうと思いますが、実用的な意味で、今後数十年は使えるアルゴリズムを示せたらそれは、NSPにおいてプリミティブな事だろうと思います。