11

リソースへのジョブの割り当てを必要とするアプリケーションがあります。リソースには、特定のジョブへの適合性を定義する多くの属性があります。一部はプリファレンスであり、一部はハード制約です (すべてのメンバーシップの多様性、たとえば「リソース A は色 X、Y、または Z のジョブに適しています」)。

リソースには、関連するコスト (リソースがオンラインで費やす時間) があります。リソースを募集する機能があります。これにはさまざまな時間がかかります。一定期間の募集を行うことができます。

規模の目安: 常に約 20 のリソース、100 の未処理のジョブがあります。ジョブの完了には 5 ~ 15 秒かかります。リソースのリクルートには約 1 ~ 2 分かかり、1 ~ 30 分でリクルートできます (再リクルートは許可されています)。ジョブが送信されていることについては、あまり注意を払う必要はありません。おそらく数秒です。

目標は、特定の平均待機時間 (ジョブ完了時間) で最小コスト (リソース使用量) でジョブを完了することです。

この問題を解決するためのアルゴリズム、ソフトウェア ライブラリ、またはアプローチへのポインタをいただければ幸いです。

4

9 に答える 9

2

ナップサック問題ビンパッキング問題は、原則としてここでやろうとしていることと似ているので、調べたいと思うかもしれません。

問題の説明で、目標は待ち時間が最も短いジョブの完了であると述べています。それが実際にあなたの唯一の目標である場合、解決策は単純です-利用可能なすべてのリソースを雇います。それらの多くはほとんどの時間アイドル状態になりますが、可能な限り低いレイテンシーを保証します。

ただし、実際の目標は、レイテンシとアイドル状態のリソースの両方を可能な限り最小限に抑えることであると思われます。そのため、ここでは、レイテンシと無駄なリソースの間に常にトレードオフがあります。

于 2009-06-23T15:17:34.183 に答える
1

これはいくつかのことのように感じられます: 経済的注文量、初期採用コストと実行コストのバランス。LP または IP、さまざまな制約を受ける全体的なコストの計算式を最小化します。次に、確率分布 (採用にかかる時間、必要なジョブ リソース) があり、すべてが確率的になります。

それは非常に複雑に思えますが、私がそれを行っているとしたら、おそらくシミュレーションをセットアップするでしょう。このシステムは、そのように実行するのに複雑すぎたり、数学的に面倒すぎて多数の反復を実行したり、実行時間を長くしたりしないように思われるため、かなり安定した有用な結果を得ることができます。

于 2009-06-23T15:50:52.500 に答える
0

私はそれをこのように見ます...それがすべてをカバーしているかどうかはわかりません。

1)「リソース」は、実際には「ワークセンター」と見なすことができます。 「ジョブ」に取り組むために開いているワークセンターの数は、システムにサインインしているユーザーに関連しています。

2)待機時間によってリソースを割り当てます-リソースがジョブを待機している時間が長いほど、次のリクエストのリストの上位にある必要があります。そうすれば、誰も寒くなったり減速したりすることはありません。(リソースとジョブに対して)しきい値を見つけて設定する必要があります。クリックして次の仕事を引き受けるか、システムが仕事の合間に自動的に仕事を引き受けるかを決めることができます

3)ジョブスケジュールキューの設定-関連性があるかどうかはわかりませんが、優先度の高い/低いジョブなどがある可能性があります。「攻撃順に」リストされたジョブのプールが必要です。ジョブスケジュールの各ジョブはさまざまな段階を経ることができるため、すべてがどこにあるかを把握し、次のジョブに進むためにいつ完了したかを知ることができます。ジョブスケジューラは利用可能なリソースを探し、スケジュールに従ってそれらをジョブに割り当てます。これはおそらくあなたのスケジューリングシステムの頭脳のほとんどでしょう。

私はあなたがアウトバウンドコールセンターを構築していないことを願っています:P

于 2009-06-23T15:25:16.010 に答える
0

素晴らしい質問です!!

動的計画法、線形最適化、待ち行列理論について調べます。残念ながら、これらのことに簡単に答えられる方法はありません。私には、これらのことについて確実で最適な答えを与えるのに必要な数学的専門知識がありません。

ただし、そのようなことに熱心であれば、これは、人工知能アルゴリズムを使用して、おそらく最適ではないが、優れたソリューションを取得する機会のように思えます. 遺伝的アルゴリズムまたはシミュレートされたアニーラーのいずれかをお勧めします。これらのいずれも、コーディングにそれほど時間はかかりません。アイデアは、ランダムで有効な入力を選択し、これらの潜在的なソリューションを微調整して、時間の経過とともにより良いものに進化させる (または新しいものを自動的に選択する) ことができるというものです。これらは、最適な答えを得ることと、コーディングと正確性を証明するために永遠に費やすこととの間の適切な妥協点です。

于 2009-06-23T18:46:23.580 に答える
0

いくつかの考え:

  • グループ化できるジョブのグループはありますか? すべて同じ基本要件を持っていますか?
  • 一緒にグループになれる人はいますか - 全員が基本的なスキルを持っています

その場合は、最初から複雑さの一部を減らしてから、設定に何らかの形式の加重平均を使用できます。また、募集する際は、min. リクルートできる時間は 30 分であり、コストが高いと仮定すると、使用率が最高レベルであることを確認する必要があります。

役に立つかもしれないいくつかの記事を次に示します。

于 2009-06-25T01:35:28.967 に答える
0

このような問題に関する文献は知りません。ただし、待ち行列理論は大きな学術分野であり、これはばかげて不自然な状況のようには聞こえないため、いくつかあると思います。最悪の場合のレイテンシーや N パーセンタイルのレイテンシーではなく、平均的なレイテンシーに関心があるという事実は、あなたを少数派にするかもしれません。

私の最初の直感は、周りにはたくさんの仕事があるように見えるので、良い解決策は、複数の「柔軟な」労働者を継続的に雇用することだろうということです。これは、許容できる待機時間でほとんどの種類の一般的なジョブを完了することができる一連のワーカーです。レイテンシーを低くしたいほど、このセット内のリソースが多くなり、アイドル状態に費やす時間が長くなります。また、入力が「バースト的」であるほど (バーストが予測不可能であると仮定して)、バースト中の高いレイテンシを防ぐために必要なアイドル時間が長くなります。

次に、「専門の」労働者を追加で 2 人雇います。

1) まれに、現在の雇用者が高い時間コストでしか処理できないか、まったく処理できないようなタイプの仕事が発生します。そのため、(大まかに言えば) シフトできる人を雇って、キューの残りの部分を最大限に処理します。

2)そのような仕事はありませんが、たまたま現在のキューからいくつかの仕事の組み合わせを取り、現在の雇用者よりも安く、現在の雇用者をアイドル状態のままにすることができる人を雇う機会を見つけました。 . だからあなたはそのリソースを雇います。

実際のアルゴリズムに関しては、最良の解を見つけることはほぼ確実に計算的に実行可能ではないため、正しい答えは処理リソースに依存し、ヒューリスティックを見て部分的な問題を解決しています。あなたが雇う全員が忙しく、将来のある時点でかなりのアイドル時間を引き起こさずに他の人を雇うことができない限り、あなたはおそらく良い解決策の近くにあり、「1ドルあたりの価値が最も高い」近くのどこかにいるでしょう。 " レイテンシとコストのトレードオフのポイント。その後、より多くのリソースを雇うと収益は減少しますが、それは、指定された待ち時間や指定された予算のためにそれを行う気がないという意味ではありません。

しかし、それは入ってくる仕事がどのように見えるかによります: 1 種類の仕事しかできないリソースがあり、その仕事が 1 日/1 週間/1 年に 1 回しか来ない場合は、おそらく、1 日 1 回雇うよりも、1 日に 1 回雇う方がよいでしょう。その仕事が可能な限り最小限のタイムスライスを満たすのに十分になるまで待ちます (消防士がほとんどの時間をカードゲームに費やしているのに対し、タイピストはほとんどの時間をタイピングに費やしているのはそのためです。さらに、火災に対して「1 ドルあたりのコストが最も高い」ソリューションは望んでおらず、それよりも短い遅延が必要です)。したがって、一般的なスケジューリング ソフトウェアを作成するのではなく、問題の特定のインスタンスを解決する場合は、特定のリソース セットと着信ジョブのパターンに合わせてアルゴリズムを微調整する機会がおそらくあります。

さらに、おそらくリソースが人間である場合、採用が成功することを実際に保証することはできません. たまたま分刻みの仕事があったときに給料をもらうためだけに、彼らは一日中座っているつもりはありませんよね?

于 2009-06-23T17:51:41.220 に答える
0

この問題は線形最適化問題と見なすことができるため、これが出発点となるはずです。私はこのライブラリを使用しましたが、他にもかなり多くのものがあるため、やり過ぎかもしれません。代わりに、独自のライブラリを開発することは難しくありません。この本には LP に関する優れた章があります。

于 2009-06-23T18:04:07.970 に答える
0

申し訳ありませんが、簡単にお答えすることはできませんが、アイデアを探すための関連リソースをいくつかご紹介します。

多次元充填問題について

動的リソース割り当てのためのベクトルベースの戦略

于 2009-06-23T18:20:40.500 に答える
0

これは、オペレーティング システムのリアルタイムスケジューリングによく似ています。ウィキペディアには、使用されているアルゴリズムの一部が詳しく説明されています。

  • 協調スケジューリング
    • ラウンドロビン スケジューリング
  • プリエンプティブ スケジューリング
    • 固定優先度のプリエンプティブ スケジューリング、プリエンプティブ タイム スライスの実装
    • クリティカル セクションのプリエンプティブ スケジューリング
    • 静的な時間スケジューリング
  • 最早締め切り 最初のアプローチ
  • 確率論と MTG を使用した高度なスケジューリング
于 2009-06-23T18:52:29.527 に答える