/ /非周期労働力スケジューリングのアルゴリズム-PHP、アルゴリズム、スケジューリング

非周期労働力のスケジューリングのためのアルゴリズム - PHP、アルゴリズム、スケジューリング

大量の情報があるようですサイクリック(または「ローテーション」)労働力スケジューリング問題について。私は、先週のスケジュールがどのようなものであるかを気にしない従業員のシフトのスケジュールを生成するのに役立つアルゴリズムを探しています。

本質的に、私は従業員の空席を持っています、最小/最大時間、および要求された休暇。その情報を基に、従業員の希望する空席状況に対応すると同時に、毎日の必要なシフト数に対応する最適化されたスケジュールを作成します。

この目的に適したアルゴリズムに関するヒントはありますか?ありがとう!

回答:

回答№1は1

従業員のスケジューリングなどの問題がある場合ソリューションには多くの制約がありますが、制約に決して違反しない、または可能な限り近いアプローチを好みます。 (遺伝的交差などの一部のアプローチは制約に違反し、追加の操作を実行して解決策を修正します-これも有効なアプローチですが、ブラインド路地を下るのに注意する必要があります。)

2つのアプローチは、貪欲なアルゴリズムの使用に基づいています。

1つ目は、半ランダムな欲張りを使用することですアルゴリズム; 2つの選択肢がある場合、通常は常にローカルに最適な選択肢を選択しますが、セミランダム貪欲なアプローチでは、ローカルに最適ではない選択肢を選択できる可能性があります。たとえば、選択肢1の重みは5、選択肢2重みは2で、通常は選択肢1を選択しますが、この場合は乱数ジェネレータを使用し、rand(5 + 2)が5未満の場合は選択肢1を選択し、そうでない場合は選択肢2を選択します。回と「最高の」ソリューションを取ります。

2番目のオプションは、貪欲または半ランダムな貪欲なソリューション、およびローカル検索アルゴリズムを使用して従業員のスロットを再割り当てし、ソリューションを改善しようとします。たとえば、従業員が希望する時間よりも少ない場合は、準最適従業員にとって正当なスロットを占有している従業員をバンプし、準最適従業員を割り当て、必要に応じてバンプ従業員を再割り当てする検索を続けます。最初の解決策は、注意しないと終了しない場合があります。

2つのアプローチを組み合わせて、セミランダム貪欲アプローチでいくつかのソリューションを生成し、ローカル検索を実行して最良の結果を改善できます。