るアルゴリズムは、複数シフト(離散最適化問題)
質問
の開発をしているアプリケーションを最適に付けへの看護師に病院があります。いであると考えてい 線形計画 問題の離散変数、とてもNP-ハード:
- 毎日、看護師に出会えます。15-20)を割り当てにシフト
- あの小さな番号です。6)の異なるシフト
- 多数の制約最適化基準のいずれかに関する日に関するemplyoee、例えば:
- がある必要があります最低限の人数をシフトを毎日
- 一部のシフトが重なるのでOKにしてい少人期初期にシフトがあれば誰かがいて中間体化
- 一部の人を好初期のシフトも好後期シフトが最小限のシフトの変更が必要なものにシフト作ります。
- することは禁止で一人出勤シフト一日の早期移行日の翌日より最小限の休憩時間の規制)
- 会議割り当て労働時間の長さ(異人)
- ...
なので基本的には多数aout20*30=600)変数のそれぞれのままでは少数の離散的な値です。
現在、私の計画は変更したもの Min-紛争のアルゴリズム
- 開始ランダム課題
- してフィットネス機能のために一人ひとりの毎日
- 者を選択した日のフィットネス価値
- 選択でランダムに割り当する者がある場合はその値の結果を最適なフィットネス価値
- まで繰り返しのいずれかの最大数を繰り返し処理に達しない改善できたの選択した日/人
何より良いアイデア、浮かぶのでしょうか。私は少し心配ですぐにこだわった地元に最適です。どちらを使うべきもの simulated annealing?ただけではなく変化を一つの変数ですが、具体的にはスイッチのシフトと二人の主成分は、現在のマニュアルのアルゴリズム)?避けたい仕立てのアルゴリズムの現在の制約がいつ変更する場合がございます。
編集: 必要がないために見を厳重に最適なソリューションの名簿は、現在行われ、マニュアルも出たんだし結果はかなりレポートは、アンケートの時間になった。短期の調整額ならびにマニュアルをオーバーライドも絶対に必要だとは思っていないこの問題マーキングの過去とマニュアルの課題として"固定"は実際には簡単にタスクを低減の解空間です。
解決
このはうまく解決するために難しい問題です。 オペレーションズ・リサーチの分野は、特にナースrosteringの論文2007年から2008年のか、単に「看護師rostering操作をグーグル研究"。複雑さはまたのような側面に依存します:日数解決します。 「要求」することができます看護師のメイクのどのようなタイプ。名簿は、「環状」です。それは長期的な計画であるか、それは、そのようななどなど病気やスワップなど短期rostering「修理」を処理する必要がない。
あなたが記述のアルゴリズムは、ヒューリスティックのアプローチです。 あなたはそれが問題の一つの特定のインスタンスのためにうまく動作するのではなく、すぐに「何か」が変更されたとして、それがうまくので(例えば局所最適解、貧しい収束を)動作しない場合があります調整することができかもしれません。
しかし、このようなアプローチは、特定のビジネスニーズに応じて適切であり - 例えばそれはを最適のソリューションを取得することがいかに重要である、あなたが記述問題の概要はの品質の看護師の認識がいかに重要である、潜在的な貯蓄(お金と資源が)何で、同じ滞在することが期待されますこの作業などのための予算が何であるかを彼らの名簿、
他のヒント
うーん、あなたはいくつかのILP-ソルバーは非常に良い仕事をすることをご存知でしたか? AIMMS、Mathematicaのか、GNUプログラミングキットをお試しください! 600個の変数はLenstra定理を簡単に解決するよりも多くのはもちろんであるが、時にはこれらのILPソルバーは良いのハンドルを持っており、AIMMSに、あなたは、分岐戦略を少し変更することができます。プラス、ILPSのための本当に速い100%-approximationがあります。
いるシフトを割当問題のための大きな工場です。まずみの発生が純粋にランダムスケジュールや復載されていたので、 is_schedule_valid
試験の代替アルゴリズムです。これはもちろん、ゆったりと不確定になります。
そ遺伝的アルゴリズムとしてまともなくフィットネス機能の休実行可能なソリューション(が最も小さを変更できるのは、全体のスケジュールは間違いなポイントはほぼ).
最後に私たちは、以下の方法(た。):
- ランダムに入力の設定(すなわち雇用シフト、スタッフます。
- を有効なタプルに追加してくださいご予定。
- ない場合には有効なタプルを自由に設定することができロールバック(-は増加)の最後のタプルを追加。
- パスの部分的なスケジュールの機能試験
could_schedule_be_valid
, では、このスケジュールを有効な場合は、残りのタプルがいっぱいにする - の場合
!could_schedule_be_valid
, は、単にロールバック(-は増加)のタプルを追加します(2)。 - の場合
schedule_is_complete
,return schedule
- 後藤(2)
で段階的に構築部分にシフトしました。のメリットはいくつかの試験のための有効なスケジュールは容易に行えるようになった。Step.2.前テスト)、その他でなければならないのにステップ5(ポスト)。
テレビでも展開しております。また無駄な日にしようと最初の二つのアルゴリズム、がんにおすすめのアルゴリズムの生成の有効な予定を瞬の下で5時間。
また、支援事前に固定後に固定の課題のアルゴリズムを思いる。すなランダム方のスロットにステップ1です。いただけるのでなくてもいいんどこでも近く最適です。弊社のソリューションはO(N*M)最小限で実行PHP(!) 半分以下の第二のための全製造工場です。の美しさは否悪い時はただちに良い could_schedule_be_valid
テストです。
の人に使用されるが、その手はいかも時間のか知らないので手動です。
マイク、
あなたはこれに対する良い答えを得た場合は、は分からないのですが、私は制約プログラミングがチケットであることを確信しています。 GAはあなたに答えを与えるかもしれませんが、CPはあなたに多くの答えを与えるか、まったく実行可能な解決策がない場合は、あなたを伝えるために設計されています。 「制約プログラミング」とスケジューリングの検索は、情報の多くを持参してください。これは、方法は、伝統的な最適化手法を行き詰まら問題の多くの種類にうまく機能する比較的新しいエリア、CPです。
ダイナミックプログラミングのア・ラ・ベル?そのための場所がありますように、ちょっと聞こえる:重なり合う部分問題、最適な基礎構造
あなたができることの一つは、問題では対称性を探してみることです。例えば。あなたは、問題の目的のために相当するものとして、すべての看護師を扱うことができますか?もしそうなら、あなただけのいくつかの任意の順序で看護師を考慮する必要があります - あなたは、任意の看護師は、の私はのいずれかの看護師の前にのJ のここで、のスケジュールされていることを、このような解決策を検討避けることができますI の> のJ の。 (あなたは、おそらくそれはあまり重要な目標だが、個々の看護師は、この例を矛盾する、シフト時間を優先していることを言ったの?)
と思うものを使用できる遺伝的アルゴリズムが
- に最適であることから大きな問題である。
- での収穫高減少時の複雑さに価格の不正確な答えない究極のベスト)
- を指定できるの制約が好みで簡単に調整フィットネス罰のために満たされない。
- を指定できる時間制限のためのプログラム実行します。
の質溶液によりどの程度の時間をお過ごし解決のプログラムに参加しました。
使用CSPプログラミングI作programms自動shitfs rostering.例:
- 2-シフトシステム試験では100+看護師、30日間の時間の中で10+ ルール
- 3-シフトシステムの試験は80+看護師、30日間の時間の中で10+ルール
- 3-シフトシステム,4-チーム-テ365日、10+ルール
カップルのsimiliarます。すべての検査は自宅のパソコン(1.8GHz、デュアルコア)実行回は普通だったと思ったのが打ち出されている。-3/で約5分300MBアプリです。
最も難しい部分にこの問題の選択-適切なソルバーの適切な解決の戦略です。
メタヒューリスティックス かったもの 国際看護師Rostering-コンペティション2010.
のための実装はこちらをご覧ください 映像とともに、看護師rostering(java).