動的計画法による組立ラインのスケジューリングと同様の問題に取り組んでいます。問題は、ステーションが事前定義されている従来の問題とは異なり、どのタスクを他の(複数の)タスクの前に実行する必要があるかについての情報しかないことです。
プロダクションにかかる合計時間を最小限に抑えるために、どのタスクをどのラインに配置するかを見つける必要があります。したがって、タスクが単一のライン上にある場合、タスクは連続して実行されるため、速度が低下します。
だから私は次の問題を抱えています
tl; dr:すべてのラインが同時にビジーであり、ステーションの番号付け/順序付けがない、アセンブリラインスケジューリング(動的プログラミング)の並列バージョン。どのタスクをどの前に実行する必要があるかを知っています。
生産時間を最小限に抑えるために、同じラインに配置するタスクと異なるラインに配置するタスク(タスクが異なるラインにある場合の通信時間を指定)を決定する必要があります。
十分な答えを受け入れる用意がある場合は、組み合わせ最適化問題として扱うことができます。考えられる解決策のツリーをメモリ内に作成します。ツリーの最初のブランチは、使用可能な組立ラインへの次の1つまたは複数のタスクの割り当てです。タスクがシステムに入るときに確立される一連の依存関係に基づいて、「次の」1つまたは複数のタスクを常に把握できます。 「次の」タスクがいくつかある場合は、より大きなタスクを優先することをお勧めします。
ツリーの次の深さのノードは、次のタスクの割り当ての可能性(割り当てられているライン)で構成されています。
これは可能性の爆発につながるため、ツリーが急速に大きくなるため、ツリーを定期的に剪定する必要があります。意味をなさない割り当てがある場合は、それらの割り当てをツリーに追加しないでください。
ツリーが大きくなりすぎた場合、メモリ使用量の観点から、または任意の深さで、ツリーを1つのリーフに整理します。各リーフのコスト(効率)を計算し、最良のものを取得して、他のすべてを破棄します。そのリーフから始めて、新しいブランチのセットなどを計算します。