勤怠管理ソフトと連携させたい (nurse-scheduling-software.com)
という要求は、あるかもしれません。「そのソフトがExcelでの入出力を許容していれば」という条件付きのお話です。
Excelでも任意フォーマットの出力は、可能ですが、現状遅すぎるのでCSVで出力することをお勧めします。任意フォーマットに対応可能となります。
勤怠管理ソフトと連携させたい (nurse-scheduling-software.com)
という要求は、あるかもしれません。「そのソフトがExcelでの入出力を許容していれば」という条件付きのお話です。
Excelでも任意フォーマットの出力は、可能ですが、現状遅すぎるのでCSVで出力することをお勧めします。任意フォーマットに対応可能となります。
前日同じチームに日勤者がいること (nurse-scheduling-software.com)
病棟内では、チームに分かれることがあります。仮にチームA/Bとしましょう。看護師長を除くとチームの人数は、各々12名程度となります。この条件は、日曜日が最も厳しくなり、何も制約しない状態では、前日の日勤者がいない、という状態が存在します。一人でも居れば、前日の状況が判るので、リスク管理上都合がよい、ということらしいです。
この制約は、GUIでは書けません。なのでPythonで書くことになりますが、制約部は、僅か十数行、検証部を含めても40行以下ですので、他へ移植することも容易かと思います。
数独の問題がただ一つの解を持つことの証明 (nurse-scheduling-software.com)
シフト勤務表では、求解回数が効きます。前回とは異なる解を求めようとするので、2つめの解がないということは、1解しか存在しない、ということの証明になります。
その昔、池上先生のベンチマークについて、池上先生のベンチマーク上の解はどの程度存在するかについて、お聞きしたことがあります。少なくとも100万以上は実際に存在するのだそうです。
しかし、例えば、SchedulingBenchmarksのInstance15を見ると、そんなにもあるはずがないと思います。恐らく一桁台だろうと思います。
問題の難しさは、解空間/探索空間 に反比例するであろうと思うので、その意味では、池上先生のベンチマークは、易しい部類に入り、解きようによっては時間がかからないのだと思います。しかしながら、Instance15は、探索空間も広いし、解も少ないということで、難しい問題、時間のかかる問題ということなのだろう、と解釈しています。
https://www.jnapc.co.jp/products/detail/4021
を購入しました。
新しいシフトパターンも検討されているみたいですので、追々そのパターンをアップして行きたいと思います。
話題爆発中のAI「ChatGPT」の仕組みにせまる! - Qiita
Chat GPTに代表されるAIは、シフト最適化が出来るでしょうか?という問いに対する最適化ソルバ設計者の回答です。
https://www.nurse-scheduling-software.com/japanese/nurse_scheduling_problem/chapter27/
タスクカウント、ペアフェーズが動くようになったので、時間割シフト版をタスク版に書き換えてみました。
時間割作成問題タスク版 (nurse-scheduling-software.com)
なお、ダウンロードしてもバージョンが高いので読み取れない、が出ると思います。8月末までお待ちください。
スタッフ毎のシフトとタスクが次のように定義されていたとします。
ただし、この実装から、グループ集合名と、グループ要素は、シフト名・タスク名の重複は禁止となります。
スタッフプロパティのシフトとタスクはハード制約です。今月から、シフトや、タスクが切り替わって、テーブルの記述を変えたとすると、先月部の予定でハードエラーとなってしまう問題がありました。
この回避方法が比較的面倒なため、機械的に回避できるオプションを追加しました。
現在のシフトとタスクの状態が次であるとします。
求解すると次のようなエラーが出ました。
次の画面では、シフト123をEnableしていないにも拘わらず、解でシフト123がアサインされています。
これは、ソフト予定の方を優先度を高くしてあるからです。
しかし、スタッフプロパティのシフト予定は、ハード制約というポリシーに反しているので、これを修正することにしました。
今までの挙動を維持したい場合は、チェックを外してください。(8月末リリースよりチェック付きがDefaultとなります。)
次の4つの実装を予定しています。
1) タスクカウント
2) リフレッシュ
3) Group集合名にスタッフプロパティのシフトとタスクを追加
4) スタッフプロパティのシフトとタスク 先月部の矛盾する予定をソフト制約化
これらは、全て4)に起因して実装するものです。
結果が出ました。毎年楽しみにしているのですが、今年は、プリプロセッサのイノベーションがあったようです。
にしても、KissatよりCadicalの方が良い理由が分かりませんでした。いずれにせよ、来年以降ポートフォリオソルバで採用されていくのは、間違いないと思います。
時間割作成問題作成中に知ったのですが、Pulpでは、pandasで簡単にネット上のCSVファイルが読めます。
lesson_df = pd.read_csv("https://raw.githubusercontent.com/ryosuke0010/opt_test/master/composition.csv")
スケジュールナース上のPythonは、pandas等の大きなライブラリは搭載していないので、上記ソースでネット上のCSVファイルを読むことは出来ません。 そこで、pandasなしに次のようにして読んでいます。
def get_list_of_rows(): url="https://raw.githubusercontent.com/ryosuke0010/opt_test/master/composition.csv" response = urllib.request.urlopen(url) lines = [l.decode('utf-8') for l in response.readlines()] #print(lines) reader=csv.reader(lines) list_of_rows=list(reader) return list_of_rows
ふとQiita記事が目に留まったので、スケジュールナースで記述できるかやってみました。
時間割作成問題 (nurse-scheduling-software.com)
スケジュールナースは、数独、塾勤務表、時間割作成問題のように単にシフト問題に留まらずに、組み合わせ最適化問題を解くプラットフォームとしてもお使い頂けます。
Updated project files format, using task schedule table as follows. Also,newly found UB values are updated.