2025年1月31日金曜日

Q.看護師長が休日以外で、出張又は休みの場合は、1名の副看護師長を日勤とする

 Ans.

この仕様を制約化するには、意図をまず読み取ります。まず、

休日以外で、 ⇒ 今月平日、

に読み替えます。

出張又は休みの場合は ⇒ 日勤ではない場合は、

1名の副看護師長を日勤とする⇒ 1名以上の副看護師長を日勤にする

-副看護師長は2名この職場で居るので、1名にすることが意図ではなく、最低どちらか1名に居て欲しい、ということだろうと推察します。(この辺がAI化が難しいところです。言葉通りにすると1名以上ではなくて1名になってしまいます。ちなみに「1名」と「1名以上」では、どちらが解空間が広いでしょうか?明らかに1名以上の方が広いですね。ナーススケジューリングは、多数の制約間の共通集合からなります。一つ一つの制約では、出来るだけ解空間が広い方を選択したい、ということも背景にあります。)

結果、

「今月平日は、看護師長が日勤でない場合、1名以上の副看護師長を日勤にする」

という仕様に置き換えることができます。

次に、制約化を考えます。~(何々)の場合 を考えますが、最初に考えるのは、

列制約化出来ないか? ということです。往々にして、ペア制約で書きたくなりますが、列制約化出来る場合は、そちらの方がメンテナンス上、ベターな記述になります。

<列制約化の検討>

~の場合、は全てのケースを表にしてみましょう。表にしてみると2^3で以下の8通りがあります。

看護師長   日勤                                          日勤でない

副看護師長A  日勤                   日勤でない        日勤                    日勤でない

副看護師長B  日勤  日勤でない 日勤  日勤でない  日勤  日勤でない 日勤  日勤でない

            3      2                2       1              2      1                1      0

上表で、欲しいのは、「全員が日勤でないこと」を避けたい、であるので、

計0の否定 ⇒合計1名以上であればよい



ということが分かります。

(最初の仕様を1名として捉えると、8ケースの内3ケースなので3/8となります。ちなみに0名以上が全てのケースで8/8、今回が7/8)

これで列制約化が完了しました。

集合:看護師長または副看護師長

の合計が1名以上、今月平日について、ハード制約しています。





 


0 件のコメント:

コメントを投稿