2012-04-12 8 views
0

Bitte lassen Sie mich wissen, welcher Algorithmus für das Problem unten geeignet ist:Algorithmus für die Ressourcenzuweisung durch Projekt (Bin Packing?)

Wir haben eine begrenzte Anzahl von Projekten in einem bestimmten Zeitraum von 3 Monaten (in der Regel < 50). Jedes Projekt hat eine Anzahl von Stunden.

Wir haben eine begrenzte Anzahl von Ressourcen (in der Regel < 100) in der gleichen 3-Monats-Zeitraum.

Jede Ressource kann eine bestimmte Anzahl von Stunden pro Monat verbrauchen (unter Berücksichtigung von Feiertagen, persönlichen Ferien usw.). Diese Anzahl an Stunden pro Monat ist bereits für jede Ressource vorberechnet und verfügbar.

Es ist möglich, eine Ressource mehreren Projekten zuzuordnen.


Das ist wie ein Problem ist Verpackung auf dem Kopf gestellt, glaube ich, wenn wir Projekte als Bins, Ressourcen als Objekte betrachten und Stunden als Objektvolumen. Mindestens zwei Dinge führen dazu, dass es von dem formalen Behälterpackungsproblem abweicht:

  1. Ressourcen sind flüssige Objekte, die einige Stunden in einem Behälter und einige in einem anderen Behälter tropfen können.
  2. Optimale Lösung ist nicht die Minimierung der Anzahl der verwendeten Bins (Projekte), sondern die Minimierung der Häufigkeit, mit der eine Ressource sich zwischen Projekten aufteilen und sicherstellen muss, dass alle Projekte verwendet werden.

Ich fühle mich wie Gänse mit dem Bin-Packing Winkel könnte jagen. Gibt es einen Algorithmus, der dafür geeigneter ist?

+0

Aber was ist das eigentliche Problem? Was ist das gewünschte Ergebnis? Eine Zuteilungsliste für Ressourcen, die angibt, welche Ressource von jedem Projekt für jede Stunde in dem 3-Monatszeitraum zugewiesen wird? Möchten Sie wissen, ob eine solche Zuordnung möglich ist, oder eine optimale Zuordnung finden? Wenn ja, was macht eine Zuteilung "am besten"? – zmbq

Antwort

1

Wenn die Welt wirklich so einfach ist, wie Sie es darstellen, scheint es, als würde eine einfache Warteschlange Ihre Einschränkungen erfüllen: Wenn Projekte ankommen, legen Sie sie in die Warteschlange. Wenn Entwickler verfügbar werden, nehmen sie den Kopf der Warteschlange. Nur wenn Sie Projekte haben, die groß genug sind, um auf diese Weise nicht abgeschlossen zu werden, müssten Sie ihnen mehr als einen Entwickler zuweisen, und Sie können dies erkennen und zwei Entwickler zurückverfolgen und zuweisen.

Aber das alles ignoriert die Koordination zwischen Entwicklern, Handoffs, Abhängigkeiten (was zuerst getan werden muss, bevor etwas anderes sein kann), die Tatsache, dass kompetente Entwickler verschiedene Fähigkeiten und Erfahrungen haben und sogar ähnlich erfahrene Entwickler, ohne inkompetent zu sein oder Superstars, können bis zu 10-fache Unterschiede in der Geschwindigkeit haben.

+0

Danke. Ich denke, eine Warteschlange wird ausreichen. Wir weisen jedem Projekt in der ersten Schleife eine Ressource zu, um sicherzustellen, dass alle Projekte abgedeckt sind, und weisen dann bei jeder nachfolgenden Iteration Ressourcen dem Projekt am Anfang der Warteschlange zu, bis die Kapazität ausgeschöpft ist. Glücklicherweise ist unsere Welt ziemlich einfach und ohne Einschränkungen. – Roman