2024年5月27日月曜日

Q.x医師の拘束が25日及び26日の連続となっている。24日の宿直も含めれば 3日連続となっている。

 Q.x医師の拘束が25日及び26日の連続となっている。24日の宿直も含めれば

 3日連続となっている。

  対策案

  ソフト制約として、「拘束は、当直、宿直又は宿日直による拘束の兼務と

  当直、宿直又は宿日直の終了日が休日の場合の拘束の連続以外は、連続しな

  いのが望ましい。」を追加する。


Ans.  

既に、拘束2連勤禁止は、ソフト制約の高い重みで入っていたのですが、組み合わせ最適化の結果としてそういう解になっていました。ご要望の仕様も実装が可能と思いますが、簡単な実装という意味で、当直・拘束3連勤禁止として、追加実装しております。


常Anyラベル3連勤を禁止します。

常Anyラベルは、以下のシフト集合です。短時間夜勤とその他以外の全ての勤務となりますから、一般の宿直関係と拘束を全て含みます。



2024年5月26日日曜日

Q.発注の仕方について

   こちらは自治体病院ということもあり、発注の仕方も限られてきてご迷惑を

  おかけしますが、もう少し具体的に教えて下さい。

  こちらの都合では、例えば年間の契約料を委託料としてお支払するには、作業項目

  毎の金額の入った見積書をいただき、それに基づいて契約を取り交わして、

  委託料をお支払するのが良いような気がいたしますが、これまでのことなども

  あると思いますので、どうすれば良いのか教えてください。

Ans.

既に、プロジェクトサービスをご利用中ですので、以下のストア買い切り版+プロジェクト作成サービス一択になります。

https://www.nurse-scheduling-software.com/japanese/service2/onetime_purchase/

国公立大学病院、地方自治体で、ご利用頂いておりますが、全てこの形態です。

基本的には、1年の間に使いこなして頂いて、後はサポート不要という形まで持って行く、のが望ましい姿になります。なお、物理的には、同時使用10台可能ですが、ライセンスは、一部署一ライセンスとなります。(Ex.看護部で使用するには別ライセンスが必要になります。)

今まで上記のようなご要求を頂いたことはなく、ご容赦頂きたいと思います。

もしも将来、「プロジェクトを大変更したいので作業を依頼したい」、という場合は、その都度お見積りしますが、最悪、今回サービスの再発注になるとお考え頂ければよいかと思います。




2024年5月25日土曜日

Q.下図がどのようなものか理解できませんでした。もう少し具体的に教えてください。

 (C)予定入力画面です。人力解を予定として入力したものです。


これは、以下のように作成しました。

今月ブランク予定(A)から出発します。


次のように希望勤務、可能勤務、禁止勤務を入力した予定を作りました。以降、変更することがないので、ロック(黄色枠)しています。(B)

この予定状態で、解を求めたのが自動解になります。

これに対して、さらに人力解を加えたのが、最初の予定です。(人力解部の予定は、ロックしていないので、全クリアすれば、本画面となり、いつでも本状態に戻ることが出来ます。)

人力の場合、Excel等で、A)状態から出発し、B)状態まで入力、さらにC)状態まで、考えながら行くと思います。全く同じように入力しても構わないというです。


大きな違いは、

■人力だけの場合、このまま行って解が存在するという保証がない/破綻しない保証がない、のが

■スケジュールナースで時々求解すれば、解が存在し組み合わせ最適化の最適解を常に示せるという安心感があります。


逆に、組み合わせ最適化の最適であるので、人力でこれから入力していってもこれを下回る数値(目的関数値)になることはあり得ません、これから如何に入力しようとも、これより良くなることはありません、ということを示しています。

そういう解の提示を常にできるというところが、大きく違います。自動解が気にくわなければ、人力解のようにして入力することもできます。また、予定そのものも、一つ一つのセルをソフト制約にすることも出来ます。どうしても解がない場合は、予定の「最小」変更で解が存在するようにもできる、ということです。

つまり、必要なら、従来と同じように、管理者が好きなように入力できるということになります。


2024年5月24日金曜日

赤マークの意味

 質問

1 赤色マーカ部分で「当直3連続の絶対禁止」に1がカウントされている件

   絶対禁止と言う表現からは、当直3連続はあってはならない気がしますが、

   解として許されてしまうのでしょうか?どのような状態なのでしょうか?


2 赤色マーカ部で「休日の拘束2連勤禁止」に1がカウントされて

  いる件

    上記(1)と同じように赤色マーカ部として

    「休日の拘束2連勤禁止」に1がカウントされています。

    現実的には、先生方の希望を考慮するとこうならざる負えないことは、

    先日のやり取りでわかりましたが、このように赤色マーカ部の該当する

    ものがあっても構わないものなのでしょうか。


Ans.1)

これは、制約名であって、そのように制約することになることを意味しません。具体的には、以下のようにソフト制約レベル7になっておりソフト制約です。ですので絶対ではありません。その名前の通り絶対にしたい場合は、7をブランクにすればハード制約となり、絶対になります。



Ans.2)

赤になるのは、レベル7として入力したソフト制約です。以下においてレベル7のソフト制約を違反した場合、赤マークとなります。




レベル7の実際の重みは、以下の求解画面で設定しますが、ユーザが自由に設定して構いません。



通常、レベル7は、ソフト制約でも破るのは禁止という意味で使います。注意喚起のためだけで実際の求解結果には影響しません。たまたま、今回、そのように設定してあるだけで深い意味はありません。重みを調整するのは、お客さまにプロジェクトファイルが届いたあと、お客さまご自身で行っていただきます。


2024年5月23日木曜日

cuPDLP-C GPUベースのLPソルバ

https://github.com/COPT-Public/COPT-Release


Firstオーダを評価したことがあるのですが、今回の論文を見てもやはり精度に難があり使えそうにはない、という風に見ます。精度が要求されないなら、例えばPageRankクラスのとんでもない規模や、機械学習には、その用途があるかもしれないのですが、NSPでは難しいと見ます。ジュリアンホール教授のHighsソースにも実装されていました。Highsソースを読んでいで、cuPDLPに気づきました。



商用ソルバとの性能差を指摘されるとすぐにお金の話が出てくるのは、いつもの事です。ジュリアンホール教授は、将来的には、有償のプレミアムバージョンを考えているようです。

HIGHSのIPMパラレル実装が今年度末までに予定されているので、そちらの期待の方が未だ高いです。

余談ですが、Highsチームには、MIPソルバ開発者が現在いないはずなので、今後の進捗にはあまり期待できないのですが、最近のソースを見た限り一応の形には、整いつつある印象です。ノードTreeのパラレル化を考えているようですが、これはさほど効果がないと思います。商用MIPソルバの最大差は、恐らくHeuristicsにあります。これは問題ごとに多くの最適化手法が存在するので、物量がものを言います。NSPもそのうちの一つです。しかし、これだけの少ない行数で、ここまで性能が出るとは、私も思っていなかったで、大したものだと思います。CBCのソースに比べれば圧倒的に読みやすいです。その中身については、何故かMatlabで解説がありました。


ともあれ、現在実装中のアルゴリズム5にHighsを入れようか迷っています。殆どのNSPでは不要なのですが、オールランドに構えるには、入れた方が良い結果になるかもしれません。とりあえず、入れ込んでみて評価してみようと計画中です。

既にLPソルバでは、GurobiをしのぎCOPT(中国)が世界を席巻しています。Gurobiがこのままでいるはずはないとは思いますが、LSIツールにせよ、最適化ツールにせよ、今まで米国が世界をリードしてきた構図が変わろうとしている時代の変革期だと思います。産業基盤の核になる技術は、そのまま国力に比例すると思うので、日本の若手研究者に頑張ってもらいたいと思います。

で、上記が何の役に立つかというと、実際的なNSPには関係しません。しかし、世界記録を更新するうえで、上記のLPソルバの向上は、至上命題です。今までCOPTのライセンスを一時的に借用しようと思っていたのですが、やはりそうなることになりそうです。


2024年5月22日水曜日

Q.解はでました。

Q. 解はでました。

助言もなんとか理解し、進めました。解の「入りの回数」のみ、黄色か赤ででますが、どうすればいいのか

ここのみわかりません。


Ans.

https://schedule-nurse.blogspot.com/2024/04/blog-post_17.html

の5)を思い出します。


入りの回数がおかしいのですから、制約がまともに動いていません。

マウス中ボタンを押してグループ集合とDay集合を確認します。

Day集合をみると、あれれ、1日しか集合定義されていませんね。この制約では、対象が1日しかないので、解としては、0か1しかないのです。当然の動きです。制約が思い通りに動いていないのなら、制約を見直しましょう。

次のように、正しく修正します。

これで、一応はまともな入り回数になりました。
レベル7のエラーが赤になります。これは、慣用的にソフトエラーであってもあってはいけない、という重大違反を意図していますが、その重みはユーザが自由に設定できます。レベル7は、注意喚起のためと思ってください。求解動作には、なんら影響しません。

次のような解となりました。



医師当直表・拘束表のペア制約

 このプロジェクトでは、多くのペア制約があります。次の仕様を実現するためです。

1)日直・宿直・宿日直は、平日の勤務を除く時間帯であり、切れ目なく常に一人が勤

    務していること。30分以下の空き・重複も許されない。

2)拘束は、平日の勤務を除く時間帯であり、内科及び整形外科の常勤医師一人が自宅

    待機等していること。  30分以下の空き・重複も許されない。

「切れ目なく」を保証するには、非常勤医師の早遅に起因する短時間宿直を常勤医師の誰かが行う必要があります。さらに条件として、非常勤医師の出身医局に応じて、常勤医師の誰が行うかが決まっています。そのために、次のような枠組みで制約しています。

非常勤医師が医局内科1の場合の常勤医師の対応です。「AならばB」で制約します。


医局内科2も全く同様です。茶色枠部だけが異なり、上と全く同じ制約です。
内科3、整形外科、泌尿器科、腫瘍内科も全く同様です。

次は、タスクの制約です。泌尿器科、腫瘍内科、外科等の診療科は、常勤医師では存在しません。そこで、院長等でそれらをタスクとして出来るようにしています。そうすると、制約しないと、浮遊状態となり、不用意に出現してしまうことがあります。出現しないようにするための制約です。タスクとしてあり得るのは、非常勤医師がそのタスクを行う場合に限るのですから、それ以外は、禁止にします。

常勤医師の短時間宿直が、出現しないようにするための制約です。短時間勤務があり得るのは、非常勤医師がそのような勤務をした場合に限るので、それ以外を禁止にします。

これは、休日宿日直が、通常、分割されないようにするための制約です。宿日直が、日直と宿直に分割されるのは、非常勤医師が分割勤務のみの場合です。例外として、前日の長時間手術等で負荷が大きい場合、意図して分割する場合もあるので、弱めのレベル2としています。

同様に、拘束宿日直が、通常は分割しないようにします。

以上、ペア制約について記述しました。整然と記述しているように見えますが、どちらかというと、出てきた不具合に対応するため、追加・変更を繰り返してきた結果です。


そのようなやり方でも、方法論として間違いではありません。しかし、追加変更する際に、より一般的な制約の仕方はないか?常に整理統合を意識しているところが大事な姿勢だと思います。そのようにして、仕様と制約を明確化する、文書に残しておくことがメンテナンス上必要なことです。


大変に複雑なシステムの場合、ユーザさま自身の開発協力は不可欠です。

1)出てきた解に対して、どこがいけないかを指摘すること

2)1)は、特殊ケースですが、それを一般仕様化、制約化する能力

がユーザさま側に必要になるということです。いわば、日本語のキャッチボールが出来ることが開発での必要要件となります。言葉として表現されてこなかった仕様(隠れ仕様)が顕在化され、必要な仕様が明確化される過程でもあります。お客さま自身が意識していなかった仕様が、実は重要な制約のために必要だった、ということでもあります。

そうした過程で大事だと思うのは、人の話をきちんと聞いて、それに対する適切なレスポンスをする、他人に対して、知らない前提で話をする、当たり前のことです。こうした開発でユーザ側の必要スキルは、プログラミング経験や、集合に対する理解ですらありません。日本語のキャッチボールがきちんと出来る、これに尽きると思う次第です。