2014年4月15日火曜日

会議の制約

副看護師長や主任との打ち合わせは、どのようにしていますか? この日にする、と決めてしまうよりも、スケジュールソフトに任せた方が良いと思います。なぜなら、解の探索空間の減少を最小に留める効果が期待できるからです。全てのスケジューリングソフトは、解を探索しますが、探索空間はできるだけ大きいほうが良い解を得られるチャンスが大きくなるのです。

まず、会議の要件について考えてみます。

会議の要件

  1. 会議資格者(スタッフプロパティで設定する。副看護師長等)だけが会議に参加する
  2. 会議は日勤時に行う
  3. 会議は、全会議資格者が揃ってはじめて開催可能
  4. 会議が長引く可能性があるので深夜入り(次の勤務が深夜)は入れない
  5. その月の会議回数は、複数回があり得る
次に、この条件を、コンピュータに解る言葉、制約に置き換えます。

  1. "会"というシフトを設ける。性質は日勤に準じる
  2. その月の会議回数はマクロ(今月の会議回数)で指定する
  3. 資格者はスタッフプロパティで設定
  4. 会議の後は深夜を禁止する
  5. 資格者は、今月の会議回数、過不足なく会議を行う
  6. "資格者が揃って"  ー>ペア強制を使う

という感じでプログラムしていきます。
”今月の会議数”というマクロを設定しています。(次月以降はここだけを変えればよい。)

会議というシフト変数を作ります。名前をC、ラベルを”会”としています。

会議に参加する人プロパティリンクを変更します。 (青色部)
 Day制約は、祝日でも、休診日でもない日にCを追加します。
会議のパターンを定義(青部)しています。

 日勤の定義をmとしています。m=N | C です。Nは、今までの日勤定義でしたが、
一般化した日勤をmとして、mに関する制約にしています。

 
 
今月の会議数を2に設定したときに得られた解です。
 
 どこまで確保可能かをやってみました。この例の場合11日まで可能でした。
12日に設定するとTimeout(20秒)で見つかりませんでした。

スケジューリングソフト スケジュールナースでこの求解に109秒かかりました。













0 件のコメント:

コメントを投稿