2012-04-15 21 views
1

PERTと連携したWebベースのプロジェクト管理ツールで作業することでPythonとWeb Devを学びます。 タスク、タスクの依存関係を読み込み、PERTメトリック(重要なパッチ、タスクごとのスラック、タスクごとの最も早い/最新の開始日/終了日など)を計算できるように簡単なステップに取り組んでいます。PERTダイアグラムで効率的なタスクの依存関係をモデル化する方法

I 'タスクの依存関係を処理するためのステップではmです。 タスクには前任者が0..nです。タスクを読み込む際に、後継者がまだロードされていない可能性があります(例:AはEに依存する場合があります)。これを効率的に解決するアプローチが良いのではないかと思います。 1開始 - - 1端 - ないサイクル

マイデータモデル : - タスクテーブル、タスクID、タスク名、および期間 と - タスク関係 これは明らかに次のプロパティで、グラフを形成しますタスクID、タスクID、およびリンクの性質(前身、後継者)

また、タスクID、タスク名、期間、期間などのCSVファイルからタスクを読み込むこともできます。カンマで区切られたリストで表現された先行者のリスト。例: タスクA;「実際に非常に重要なタスク」; 10; E、F、K

Pythonのモデル化: 先行タスクのリスト(タスクオブジェクトのリスト)と後継者のリスト(タスクオブジェクトのリスト)を含むTaskオブジェクトがあります。後続タスクを持つ理由は、PERTメトリック計算には

  • 私はすべてのタスクをロードします。など、「すべての後継者の中に、最も早い開始日を持つものを見つける」のような操作の多くは...ので、私はこの周り

    私のアルゴリズムを持っていると便利だろうと思いました最初に依存関係を無視してTaskオブジェクトに追加します。すべてのタスクは、タスクIDは、私はすべての依存関係をロードするキー

  • であるPythonのdictionnary、中に入れ、各依存関係のために、私はdictionnaryから2つの懸念タスクをロードし、

うに応じてそれらを更新していますあなたはこれに違ってアプローチしますか?

+0

これは賢明なようですが、実際に何をしようとしているのか分かりません。 – katrielalex

+0

私はPERTのアプローチを使用してプロジェクト管理ソフトウェアを構築しようとします:あなたは依存関係と制約を使ってタスクを入力し、ソフトウェアはプロジェクトの継続時間とタスクの最も早い/最新の日付を計算します –

+0

そして、感覚的な "?はい。 – katrielalex

答えて

1

あなたは何が問題なのか分かりませんが、賢明に聞こえます。

Taskを保持するには、適切なグラフライブラリ(networkx)を使用します。したがって、擬似コードは次のようになります。

import csv 
import networkx 

g = networkx.DiGraph() 
class Task(object): # some stuff 
tasks = {Task(*task) for task in in csv.reader("path/to/file")} 

g.add_nodes(tasks) 
for task in tasks: 
    for dep in task.dependencies(): 
     g.add_edge(dep) 
関連する問題