web-dev-qa-db-ja.com

誰かがこのスケジューリング問題を認識していますか?そのためのアルゴリズムはありますか?

次の問題を考えてみましょう。


説明

N個の仕事がありますJ1... Jn サイクルタイムC1.... Cntime Quantumと、次のことを考慮したスケジューリングテーブルを見つけます。

  • テーブルの任意の要素には、最大で1つのジョブが含まれます
  • ジョブハンドラーは一度に要素を処理します。つまり、ジョブ(存在する場合)を実行し、time Quantumが経過した後、次の要素に移動します。
  • ジョブハンドラーはループバックします。つまり、最後の要素の後、最初の要素から続行します。
  • ciclicityを維持する必要があります。つまり、ジョブJが2回連続して(ループバックを含む)発生する間の距離です。k (k = 1、n)はCと等しくなければなりませんk /タイムクォンタム
  • テーブルはできるだけ短くする必要があります。

  • J1 -4秒のciclicity
  • J2 -6秒のciclicity
  • J3 -8秒のciclicity

ソリューション例

時間量子= 1秒

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 seconds
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|J1|J2|J3|  |J1|  |  |J2|J1|  |J3|  |J1|J2|  |  |J1|  |J3|J2|J1|  |  |  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

私の考えでは、これはスケジューリング問題のファミリーに属し、より一般的な問題の特殊なケースである可能性があります。 そうですか?オンラインで検索しようとしましたが、似たようなものは見つかりませんでした。スケジューリング問題の経験がないので、何を検索すればよいのかさえわかりません。

私が見るものから:

  • スケジューリングテーブルの合計期間は、Cの最小公倍数である必要があります1... Cn
  • 時間量子は少なくともGCD(C1、...、Cn)/ n。 -これは必ずしも最適なソリューションではありません。

これは、動的計画法を伴うものではなく、単純な解決策があると私に信じさせます。 そうですか?

誰かが私にこの問題のためのいくつかのリソース、おそらくアルゴリズムさえも指摘できますか?

また、ジョブを複数のスケジューリングテーブルに分散できるバリエーションについても興味があります。


GCD =最大公約数

編集:指定されたサイクル時間でN個のジョブをスケジュールする方法を尋ねていません。一部の人が示唆しているように、これを行うためのより動的な方法があると確信しています。私の問題は「次のことを考慮してタイムクォンタムとスケジューリングテーブルを見つける:[...]」です。それが数学のいくつかの部分にルーツを持っている可能性さえあります。

5
DonComo

優先度付きキュー を使用して最適なスケジュールを決定できます。スケジューリングの決定の瞬間はどこにありますか?これは、特定の秒に開始するサイクルが複数ある場合です。

可能なスケジュールを表す「スケジュール」データ型が必要です(上記で記述したデータは、ここで表すデータの完璧な例です)。

したがって、疑似アルゴリズムは次のようになります。

各サイクルタイプを独自のスケジュールに追加し、最小のGCD *(C1、...、Cn)/ n値で優先順位を付けて、各スケジュールを優先キューにプッシュします。

次に、GCD *(C1、...、Cn)/ nの値が最小のスケジュールから始めて、起動する新しいサイクルを追加して、古いものから新しいスケジュールを作成します。

好きなだけ続けます。

スケジュールをいつ終了するかを決定します。これは優先キューであるため、任意の時点で最初の要素がGCD *(C1、。。、cn)/ nに関して最適であることが保証されます。

お役に立てば幸いです。

1
Neil