0

アクティビティのネットワークのクリティカル パスを計算するのに問題があります。私が扱わなければならないデータは、Web 上の単純な例で見たものとは少し異なります。つまり、各アクティビティの開始時間と終了時間があり、そこから長さを推測します。私はそのアルゴリズムを使用して、各アクティビティの最も早い開始時間と最も遅い開始時間と終了時間を計算しています。

「最も早い開始時刻を見つけるには、先行タスクのないアクティビティから開始し、ゼロ時刻に開始するとします。その後、先行タスクの開始時刻がすべて埋まっているアクティビティを繰り返し見つけ、開始時刻を先行タスクの最大終了時刻に設定します。

最新の開始時刻を見つけるには、前述のアルゴリズムを逆方向に実行します。後継者のいない活動からスタート。終了時間を前のフェーズの最大終了時間に設定します。後継者がすべて評価された前任者を繰り返し見つけます。その終了時刻を最も早い後続の開始時刻に設定します。

これで、スラック = 最遅開始 – 最早開始を評価するのは簡単です。一部の一連のイベントでは、スラック タイムがゼロになります。これがクリティカルパスです。」

ソース: https://stackoverflow.com/questions/6368404/find-the-critical-path-and-slack-time

私のコードは、クリティカル パスを構成するクリティカル アクティビティを正しく識別している場合もありますが、持っているデータが原因で失敗する場合もあります。私はそれがいつ起こるかを発見しました:それは、アクティビティの指定された時間(コストが推定される)が、計算された初期および最新の時間を尊重しない場合です。現在、各アクティビティのコストのみを考慮していますが、下の図のような場合、計算されたクリティカル パスが正確ではないため、明らかに十分ではありません 。 a/img688/2420/casemp.png

アクティビティ B は明らかに重要ですが (終了時間がずれると、プロジェクトの終了もずれます)、アルゴリズムは 1 のスラックを計算します...

上記のケースで機能するようにアルゴリズムを変更する方法がわかりません。

4

1 に答える 1