1

制約のある効率的なジョブスケジューリングを開発するには??

スケジューラには、次のメソッドが含まれている必要があります。

startBeforeEndOf(Job j)
startAfterEndOf(Job j)
startBeforeStartOf(Job j)
startAfterStartOf(Job j)
endBeforeEndOf(Job j)
endAfterEndOf(Job j)
endBeforeStartOf(Job j)
endAfterStartOf(Job j)

すべてのジョブには ID と時間パラメーターがあります。

この問題の可能な解決策は、技術的なバックトラッキングに基づいている可能性があります。ジョブは選択ポイントとして使用され、一時的な瞬間が選択肢として使用されます (最悪の場合、アクティビティの合計期間は作業期間の合計になり、完全に順次実行されます)。

あるいは、データを適切に表現してから、時間軸でスケジューリングを生成し、作業を制約の下に置き、制約が満たされない場合にジョブ (およびそれに依存するすべてのジョブ) を進める必要があります。しかし、Javaでこれを正確に行う方法がわかりません。

言い換えれば、説明されているジョブ管理において、強烈な後戻りアプローチを回避する方法を探しています。

4

2 に答える 2

1

OptaPlanner (java、オープン ソース) を試してください。ここから簡単に始められます

たとえば、それぞれJobを に割り当ててからstartMinute、次のようなスコア ルールを追加します。

when
    $leftJob : Job($startMinute : startMinute)
    // getEndMinute() returns startMinute + durationInMinutes
    $rightJob : Job(beforeJob == $leftJob, endMinute > $startMinute)
then
    // punish
end
于 2012-03-26T11:23:57.187 に答える
0

オープン ソースの制約プログラミング ライブラリを使用できます。この投稿では、制約充足問題などのために Java で記述された多くのソルバーを紹介しています。

于 2012-03-24T10:20:49.833 に答える