2012-04-15 5 views
1

Ich lerne Python und Web-Entwicklung durch die Arbeit an einem Web-basierten Projektmanagement-Tool mit PERT arbeiten. Ich gehe zuerst die einfachen Schritte an: Laden von Aufgaben, Aufgaben Abhängigkeiten und in der Lage sein, PERT-Metriken zu berechnen (kritischer Patch, Puffer pro Task, frühestes/spätestes Start-/Enddatum pro Aufgabe, etc ...)Wie man eine effiziente Aufgabenabhängigkeiten in einem PERT-Diagramm modellieren

I ' m am Schritt, um Aufgabenabhängigkeiten zu behandeln. Eine Task hat 0..n Vorgänger. Beim Laden von Aufgaben wurde der Nachfolger möglicherweise noch nicht geladen (zB: A kann von E abhängen), und ich frage mich, ob meine Vorgehensweise gut ist, um dies effizient zu lösen. Dies bildet offensichtlich eine grafische Darstellung, mit den folgenden Eigenschaften: - 1 Start - 1 Ende - kein Zyklus

Mein Datenmodell: - Aufgabentisch, mit Task-ID, Aufgabennamen und Dauer - Aufgabe Beziehung Tabelle, mit TaskID, anderer Task-ID und Art der Verknüpfung (Vorgänger, Nachfolger)

Ich habe auch die Möglichkeit, Aufgaben aus einer CSV-Datei zu laden, die folgende Spalten hat: Task-ID, Task-Name, Dauer, und eine Liste von Vorgängern, ausgedrückt in einer durch Komma getrennten Liste, zB: Aufgabe A: "Sehr wichtige Aufgabe in der Tat"; 10; E, F, K

Modellieren in Python: Ich habe Aufgabenobjekte, die eine Liste von Vorgängeraufgaben (Liste von Aufgabenobjekten) und eine Liste von Nachfolgern (Liste von Aufgabenobjekten) enthalten: Die Begründung für Nachfolger ist, dass die Berechnung der PERT-Metrik ein erfordert viele Operationen wie „mit dem frühesten Starttermin in allen Nachfolgern das finden“, etc ... also dachte ich, es wäre praktisch diesen um

meinen Algorithmus zu haben:

  • ich alle Aufgaben laden in Aufgabenobjekte, wobei Abhängigkeiten zuerst ignoriert werden. Alle Aufgaben werden in einem Python Dictionnary setzen, wo die Task-ID ist der Schlüssel
  • ich alle Abhängigkeiten zu laden, und für jede Abhängigkeit, ich die beiden betroffenen Aufgaben aus der Dictionnary laden und aktualisieren sie entsprechend

Would Sie nähern sich dem anders?

+0

Das klingt sinnvoll, aber ich verstehe nicht, was Sie eigentlich tun wollen! – katrielalex

+0

Ich versuche, eine Projektmanagement-Software mit PERT-Ansatz zu erstellen: Sie geben Ihre Aufgaben mit Abhängigkeiten und Einschränkungen, und die Software berechnet die Projektdauer und frühesten/spätesten Daten für die Aufgaben –

+0

Und die Frage ist ... "ist Ihr Algorithmus sinnvoll"? Ja. – katrielalex

Antwort

1

Was Sie tun, klingt sinnvoll, obwohl ich nicht sicher bin, was die Frage ist.

Ich würde eine geeignete Grafikbibliothek (networkx) verwenden, um die Task s zu halten. Also der Pseudocode wäre:

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) 
Verwandte Themen