0

私は基本的に、柔軟なタスクのタイムライン(特定の期間を持つ) を作成しようとしています。たとえば、タスク B はタスク B の 5 分から 10 分後にする必要があります。また、タスクは '重複することはありません。人は常に 1 つのことにしか取り組めないからです。

後で組み込む必要があるかもしれないいくつかの追加機能もあります。

  • タスクの期間は、特定の範囲で柔軟になる可能性があります
  • 特定のタスクが特定の時点にロックされる場合があります
  • 2 つのタスクを同時に実行できるように、新しい人を追加することができます

私の問題は、私のアプローチが簡単に局所最適値に行き詰ってしまうことです。

私が現在行っていることは、範囲外のリンクの量とそれらが重複するかどうかという厳しい制約を設定して、タスクの開始時間を最適化することです。これはうまく機能しているようで、ほとんどの場合、厳しい制約を破らない解決策がすぐに見つかります。追加のソフト制約は、プロセス全体の所要時間を最小限に抑えようとする必要があります。たとえば、タスク B と C の間のリンクが 20 ~ 100 分である場合、ハードスコアはリンクが 20 分であろうと 100 分であろうと関係ありません。しかし、一般的に 20 は 100 よりも優れています。しかし、タスクの複雑なツリーのような依存関係を扱う場合は、80 分のリンクを使用してそのギャップに他のタスクを配置し、3 分の 1 後のタスクをより早く開始できるようにする方がよい場合があります。そのため、リンク長を最小限に抑えるだけでは効果的なアプローチではありません。しかし、問題は、リンクが範囲内にあると、後でより良い解決策にたどり着くためにその範囲外に移動するインセンティブがないことです。私はローカルオプティマで立ち往生しています。

したがって、私は現在、この問題を解決する方法を考えています.私が考えていて、フィードバックを期待しているアプローチは、2つのリンクされたタスクを移動する新しい CompositeMove を作成することです. これにより状況は改善されますが、3 つ以上のタスクが密接にリンクされるとすぐに同じ状況になるため、うまくスケーリングできません。

私が考えているもう 1 つのことは、タスクを取り、リンクを伸ばしてタスクを隙間に入れる動きを実装しようとすることです。私はこれをきちんと考えていませんでした。

また、さまざまなローカル検索アプローチをいじりましたが、これもあまり役に立ちませんでした。しかし、とにかく、彼らはここで本当に助けることはできないと思います.

OptaPlanner の配車ルートと顧客訪問の関係も調べましたが、問題を理解するのには役立ちましたが、実際には解決策にはなりませんでした。

4

0 に答える 0