Autor Beitrag
mcst09
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Sa 08.07.06 18:14 
Hi,

Beispiel:
Fünf Mitarbeiter, davon arbeiten drei 40h (Vollzeit), zwei 25h (Teilzeit).
Die Firma hat von Montag bis Samstag täglich zehn Stunden geöffnet.

Nun soll auf Knopfdruck ein Arbeitsplan erstellt werden, der folgendes beachtet:
- immer zwei bis drei Mitarbeiter anwensend
- jeder Mitarbeiter sollte seinen Stunden arbeiten, gegebenenfalls sollen Minus-/Plusstunden in die nächste Woche mitgenommen und beachtet werden
- der Plan soll monatlich erstellt werden.

Wer kann mir sagen wie man das am besten hinkriget?

Axl
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 08.07.06 18:27 
Ich hatte mal ein ähnliches Problem, und hab das auch mal meinem Info-Prof erzählt. Der hakte das Thema schnell ab mit "Stundenplan-Scheduling ist NP-vollständig".

Ich habe mich nicht näher mit der Verifizierung dieser Aussage beschäftigt (auch nicht mit der formalen Beschreibung des Problems, was dann zur Erkenntnis der NP-Schwere führt). Daher weiß ich nicht, ob dies für deinen speziellen Fall auch schon zutrifft (da du eine konstante Anzahl von Arbeitskräften hast: eher nicht ;-))..

Lange Rede, gar kein Sinn: Probier einfach mit System alle Kombinationen durch, und halte an, wenn du eine gültige Aufstellung gefunden hast.
Speichere bei den Arbeitern, wie lange sie schon geackert haben, und priorisiere dann ggf. einen anderen bei der Einteilung.

_________________
We are, we were and will not be.
Aristoteles
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 69

SuSE Linux 10.0
Lazarus 0.9; Delphi7 PE
BeitragVerfasst: Di 11.07.06 20:22 
Die Firma hat also insgesamt 60 Stunden in der Woche geöffnet. Dann würde ich die Stunden einfach nach und nach mit den Arbeitszeiten der Arbeiter füllen und den dadurch zustandegekommenen Stundenplan verwenden. Dabei können dann noch die Wünsche der Arbeiter berücksichtigt werden.
mcst09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mi 12.07.06 17:50 
hallo,

danke für die antworten.
aber genau das ist jetzt mein problem. wie soll ich die 60 stunden unter den mitarbeiter logisch aufteilen? wie muss das der algo dafür ausschauen?

ich nehme mitarbeiter A und trage ihm zehn stunden ein. dann mitarbeiter B. nächsten tag mitarbeiter C und D? dann arbeiten alle hintereinander und es werden nie ein mitarbeiter zwimal hintereinander arbeiten (was aber auch möglich sein soll) und nie mitarbeiter A mit mitarbeiter C zusammenarbeiten.
und wie teile ich die halbtagskräft eein?

Axl
DerDepp
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 21



BeitragVerfasst: Mi 12.07.06 18:35 
Hallo, das scheint mir aber nicht so schwer zu sein !? :D
Man darf pro Tag max. 10 Stunden arbeiten (glaube ich zu wissen), also lass die Vollzeitler 4*10h antreten und die Teilzeitler 5*5h, so hast du ihre Arbeitszeit voll.
Da immer mind. 2 Leute da sein müssen kannst du die 6Tage mal 2Mann mal 10Stunden = 120 genau durch die 3 Vollzeitler erbringen: Zufallsgenerator einschalten, wer die Schichten Anfang der Woche macht, Ende der Woche git es keine Wahl mehr.
Die Teilzeitkräft teilst du nach belieben ein auf die Tage und Vor/Nachmittag, nur nicht gleichzeitig: Damit sind max. 3 Leute da.
Deutlich schwerer ist da ein allgemeiner Allgo!
Hoffe es hilft und schwitzend DeDe
mcst09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mi 12.07.06 23:18 
hallo DeDe,

danke für deine hilfe.
aber warum hast du die vollzeitler 4 x 10 h arbeiten lassen? es sind doch nur 3 vollzeitler. oder steckt was anderes dahinter? denn wenn ich die 4 x 10 h + 5 x 5 h bin ich bei 65 h, die woche hat aber nur 60 h. oder check ich da was ned?

schwitzende grüße zurück
axl
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Do 13.07.06 08:53 
Möglichkeit 1:

Du nimmst deine 3 Vollzeitarbeiter (X) und verteilst sie gleichmäßig über die Woche. Mit den 2 Teilzeitarbeitern füllst du die restliche Präsenzzeit auf:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
   MO: X1, X3, Y1
   DI: X1, X2, X3
   MI: X1, X2, Y1 (halber Tag)  
   DO: X1, X2, Y2 (halber Tag)
   FR: X2, X3, Y2
   SA: X3, Y1, Y2


Möglichkeit 2:

Du möchtest reguläre 8-Stunden-Arbeitstage für deine Angestellten, obwohl ihr 10 Stunden geöffnet habt. Dafür musst du ein bisschen komplexer planen. Ich nehme mal an, deine 10 Stunden "Öffnungszeit" teilen sich von 8:00 bis 18:00 ein. Deine Vollzeitler (X) sollen hier immer volle 8 Stunden arbeiten, jeder von ihnen hat einen Tag pro Woche frei (sonst kommst du nicht auf die 40 Stunden... oder drüber). Die Teilzeitler werden auch hier in die "Lücken" gestopft. Ich habe bei dem Plan auch geschaut, dass stets mindestens ein Vollzeitler vor Ort ist.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
       8:00-16:00        10:00-18:00         8:00-10:00        16:00-18:00
   MO:    X1               X2, Y1               Y2               
   DI:  X1, X2               X3                                    Y1   
   MI:  X2, X3               X1                                    Y2                  
   DO:    X2               X3, Y2               Y1
   FR:  X1, X3               X2                                    Y2 
   SA:    X1               X3, Y1               Y2


Bei Möglichkeit 1 sind alle mit ihrer vollen Stundenzahl ausgelastet. Wobei du an zwei Tagen ganztags 2 Vollzeitler vor Ort hast, aber nur halbtags jeweils einen Teilzeitler. Samstags arbeitet ein Vollzeitler ganztags mit den beiden 2 Teilzeitlern zusammen. Diese Lösung finde ich suboptimal, da die wenigsten wirklich 10 Stunden pro Tag arbeiten wollen.


Bei Möglichkeit 2 hast du für deine Vollzeitler immer 40 Stunden pro Woche, deine Teilzeitler sind etwas "unterbeschäftigt". Der eine hat so pro Woche 22 Stunden und der andere "nur" 18 Stunden. Dennoch ist gewährleistet, dass immer mindestens 2 Leute, meistens sogar 3 Personen vor Ort sind. Wenn du dir das ganze etwas genauer anschaust, kannst du die Zeiten, zu denen nur 2 Leute vor Ort sind, durchaus auch noch mit den bislang fehlenden Stunden deiner Teilzeitler auffüllen. Sollte aber nicht sooo schwer sein ;)
DerDepp
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 21



BeitragVerfasst: Do 13.07.06 09:04 
Nein, so war das nicht gemeint:
EIN (1) Vollzeitler arbeitet in der Woche 4 Tage mit je 10 Stunden: 40-Stunden-Woche: +
EIN (1) Teilzeitler arbeitet in der Woche 5 Tage mit je 5 Stunden: 25-Stunden-Woche: +
Bei 3 Vollzeitlern kann man sie zusammen 4 Tage * 3 Personen = 12 Schichten a 10 Stunden arbeiten lassen.
Das ist zufällig (?) genau das, was du hier brauchst: An 6 Tagen mind. 2 Leute =!= 12 Schichten: + :D
Die 3 Vollzeitler teilst du in zufälligen 2er Gruppen so auf, dass jeder 4 Schichten in der Woche erbringt: Mindestanwesenheit erreicht!
Die 2 Teilzeitler teilst du so ein, dass sie nie gleichzeitig da sind: Max. Belegung nicht überschritten!
Morgen und immer noch warm DeDe