web-dev-qa-db-ja.com

複数のリソースを使用して予定をスケジュールするための最適な可用性を決定するアルゴリズム

複数のリソース(ユーザー、会議室、設備)がスケジュールされているシステムで作業しています。各予定はユーザーに対してスケジュールされており、部屋や設備を利用することもできます。予定は時間をかけてスケジュールされ、ゆっくりとカレンダーを埋めていきます。したがって、すべてを一度にスケジュールできるという典型的なスケジュールの問題ではありません。

私の問題は‘optimal’クライアントが予約時に選択できる空き枠を決定することです。

すべての空き時間枠を簡単に特定できます。これは、リクエストされたユーザー/部屋/機器の空き時間の重複です。ただし、スケジュールで5/10分のギャップが生じ、後で埋めることができないようにしたいと考えています。

システムの関連プロパティは次のとおりです。

  • 5分間隔が使用されます
  • 予定の種類によって、長さは(定義済み)が異なります(5分の倍数)。
  • ユーザー/部屋/機器は、さまざまな長さの複数の予定タイプを実行/持つことができます

予約予約用に提供される利用可能時間枠を決定するとき、システムはこれを考慮に入れる必要があります。

これには「実際の」最適なソリューションはないと思います。これは、多くの要因があり、後で予定される予定のタイプが事前にわからないためです。ただし、スケジュールに無用のギャップ(または他の次善の状況)をもたらす可用性スロットを提供しないようにします。

1つのリソース(ユーザー)の可用性のみを考慮に入れるソリューションを作成しました。まず、ユーザーが実行できる予定期間の最小公倍数(LCM)を決定します。次に、LCMをステップサイズとして使用して、そのユーザーの合計利用可能時間に空きスロットを生成します。これは理想的ではありませんが、5分ごとにすべての可用性オプションを提供するよりも優れているようです。 (たとえば、LCMが高い場合、提供されるオプションはほとんどありません。)さらに、他のリソース(部屋/設備)は考慮されません。

そのような状況で可用性スロットを決定するための既知のアルゴリズム/方法/ベストプラクティスはありますか?

4
Jonathan

あなたは不確実性に対処しているので、あなたは 予測 に頼る必要があります

あなたは何かを売っているので、鍵は部屋と設備の組み合わせを収益性に減らすことです

ここに簡単な例があります

  1. アレックスは特定の部屋をできるだけ早く2時間予約したいと考えています
  2. ベアトリス通常は、次の1時間に同じ部屋を3時間予約します

通常の料金は1時間あたり15ドルです。

予約履歴を分析すると、

  • アレックスは何も予約していません
  • ベアトリスがその部屋を予約する可能性は80%あります

数学は簡単です

  • アレックスは私たちをもたらすでしょう1 x $15 x 2h = $30
  • ベアトリス0.8 x $15 x 3h = $36

明白ではありませんが、長期的にはうまくいきます。だからここに私たちのオプションがあります

  1. アレックスの価格を上げることができます
  2. アレックスがベアトリスを超えるように、最低2時間30分をアレックスに課すことができます
  3. 別の部屋を提供して、これを利用できないようにすることができます

これが役に立てば幸い

2
Silviu-Marian

これを思い出すのは、1980年代にAIを使った目的地リゾート向けに開発したホテル予約システムです。このシステムでは、2泊未満のギャップを残した予約は一切受け付けませんでした。これを行うと、ピークシーズンの稼働率が93%から100%を超えます(部屋に折りたたみ式ベッドを設置して100%を超えるようにします)。この戦略がうまくいったのは、ピークシーズン中にホテルの需要が高いことがわかっていたからです。

インクリメンタルスケジューリングに有効なもう1つのアプローチは、歩留まり管理の一種である価格設定戦略を実装することです。クライアントがギャップを残すリソースを取得し、そのギャップが結果として未販売のままになる場合は、ギャップの価格の一部をリソースコストに追加します。限界では、ギャップコストの100%で、スケジュールの結果として損失が発生することはありません。この計算は、最適化問題での目的関数の使用に似ています。

2
Doug Currie