メンバーのジョブをローテーションスケジュールで自動的にスケジュールする必要があるアプリケーションに取り組んでいます。私はルールを説明するのがあまり得意ではないので、ここに役立ついくつかのデータがあります:
役職:毎週月曜日や水曜日などのルールを持つ役職。
カテゴリ:ポジションのセット
グループ:別のポジションのセット。同じグループのポジションを同じ日に割り当てることはできません
メンバー:特定の日にポジションに割り当てられたユーザー。
その月の各日付について、メンバーはポジションに割り当てられます(両方とも昇順)。メンバーが1つのカテゴリの位置に割り当てられている場合、次に同じカテゴリの位置が表示されると、アルファベット順(またはリストの先頭)に次のメンバーが割り当てられます。
メンバー:M1、M2、M3、M4
カテゴリーC1のポジション:P1、P2、P3
ポジションP1のメンバー:M1、M2、M3、M4
ポジションP2のメンバー:M1、M2、M3
ポジションP2のメンバー:M1、M3、 M4
M1がP1に割り当てられている場合、次にP2が来ると、M2が割り当てられます。代わりにP3が次に来る場合、M3が割り当てられる、複雑さの追加レイヤーが導入されます。システムは、M2が「スキップされた」という事実を追跡し、利用可能な場合は次にM2を割り当て、次にM4を割り当てるか、M2が利用可能な位置に到達するまで待機する必要があります(スキップされた数が多い場合、これはさらに複雑になります) 'メンバー)。
メンバーは、その日に利用できないことを示した場合もスキップされます。システムは、スキップされたメンバーを優先し、メンバーが現れたときに何らかの方法でそれらを識別してから、リスト内の次の論理的な人物にジャンプする必要があります。日付の衝突によるグループにもスキップが適用されます。
各ステップを説明するコメントがたくさんあるのに、私はすでに一時的な[そして厄介な]解決策を持っていますが、それはもはや理解できません。その弱点は、スキップされたメンバーに対処することです。
これをコーディングする場合、どのようにコーディングしますか?私はこれをPHPで実装していますが、擬似コードも同様に機能します。