Harmonogram pracy pielęgniarek

Repozytorium

Repozytorium znajduje się na Bitbuckecie: https://bitbucket.org/Theer/iop-planner

Wymagania

  1. przykładowe harmonogramy:
  2. co najmniej 1 pielęgniarka zawsze
  3. w czasie dnia co najmniej 3 opiekunki na dziecko
  4. w czasie nocy co najmniej 5 opiekunek na dziecko
  5. etat: 8h * liczba dni pracujących w miesiącu
  6. minimalizujemy nadgodziny
  7. pielęgniarki mogą zaznaczyć, w które dni nie chcą pracować
  8. pielęgniarki mogą mieć wyrobione godziny z poprzedniego miesiąca
  9. uznajemy, że liczba dzieci w miesiącu jest stała
  10. znamy liczbę innych pracowników (też mogą liczyć się jako opiekunki) każdego dnia miesiąca

1 iteracja

Legenda:
R - 8h od 7 do 15 - min. przerwa 11h
P - 4h od 15 do 19 - min. przerwa 11h
D - 12h od 7 do 19 - min. przerwa 11h
N - 12h od 19 do 7 - min. przerwa 11h
DN - 24h od 7 do 7 - min. przerwa 24h
RP - 12h od 7 do 19 - min. przerwa 11h
RPN - 24h od 7 do 7 - min. przerwa 24h
PN - 16h od 15 do 7 - min. przerwa 16h

kolor czarny - podstawowe zmiany
kolor czerwony - nocki N
kolor zielony - nadgodziny

Podstawowe dane wejściowe:

  • liczba dzieci
  • liczba godzin na każdego pracownika (lub część etatu pomniejszona o nadgodziny)
  • liczba pracowników stałych w każdym dniu miesiąca

Definicje:

  • dzień:= od 6 do 22
  • noc:= od 22 do 6
  • opiekun:={opiekun, pracownik stały, pielęgniarka}

Warunki poziome:
Możliwe konfiguracje czasu pracy z uwzględnieniem minimalnego czasu odpoczynku przed i po pracy.

Klocki zielone oznaczają odpoczynek, mogą się na siebie nakładać.
Klocki różowe oznaczają obecność w ośrodku.

[20.10.2016] Dodatkowo: w każdym tygodniu musi być co najmniej 35 godzin nieprzerwanego odpoczynku.

Warunki pionowe:

  • zawsze co najmniej obecna jedna pielęgniarka
  • dzień: 1 opiekunka na 3 dzieci
  • noc: 1 opiekunka na 5 dzieci
  • pracownik stały jest obecny przez cały dzień [20.10.2016] (od 6:00 do 22:00)

Funkcja celu:
sum(liczba nadgodzin) → min

Rozszerzenia:

  • blokada dostępności danego pracownika w danym dniu
  • ustawienie preferencji zmiany
  • dodatkowa zmiana N8 (N1) od 22 do 6
  • uwzględnienie cennika zmiany noc=1,65*ps, niedziele i święta=1,45*ps, ps- podstawowa stawka (wg. Dz.U. z 2016 poz. 1638 ­ Ustawa o działalności leczniczej)
  • opcja „naprawy” harmonogramu, gdy coś się wysypie (np. nagłe L4 etc., większa liczba dzieci?)

Spotkanie 20.10.2016

  • Uzupełnienie ograniczeń o tygodniowy odpoczynek oraz informację, że pracownicy dzienni pracują do 22:00.
  • Trzeba uwzględnić wszystki (maksymalnie 6) tygodnie w miesiącu
  • W pierwszym etapie harmonogramowania unikamy ustalania dokładnego terminu nadgodzin
  • Spotkanie za tydzień o 14:30 w czwartek
  • Na kolejny tydzień model uwzględniający jedynie ograniczenia poziome, w postaci globalnego ograniczenia „regular”

Spotkanie 27.10.2016

  • Uwzględnienie magicznej zmiany (22:00 - 07:00) - dzielimy nockę na dwa bloki
  • Uwzględnienie tygodni w przerwie 35h - tablica mapująca zmiany na indeksy tygodni
  • Podział osób na pielęgniarki i opiekunki, i dodanie pracowników stałych (07:00-22:00)
    • W każdej chwili musi być co najmniej 1 pielęgniarka
  • zastosowanie ograniczeń globalnych (at_least, count, katalog constraintów: http://www.minizinc.org/doc-lib/doc-globals.html)
  • Dodanie ograniczeń czasowych (maksymalny wymiar godzin w tygodniu - do ustalenia, np. 56, minimalny w miesiącu - dla każdej pielęgniarki inny)
  • Dodanie wartości przypisanych na sztywno (urlopy, poprzedni tydzień, etc.)
  • Plan obejmuje zawsze 6-tygodni, ale wymiar godzin liczymy w miesiącu - musimy dodać informacje, kiedy zaczyna się miesiąc, etc.
  • Wstępnie spotykamy się o 17:00 za tydzień (2016-11-03)

Spotkanie 09.11.2016

  • Plan obejmuje zawsze 6-tygodni, ale wymiar godzin liczymy w miesiącu - musimy dodać informacje, kiedy zaczyna się miesiąc, etc. Na razie nieistotne - do zapamiętania.
  • Narzędzie do debugowania szukania w gecode: „gist”, więcej w http://www.gecode.org/doc-latest/MPG.pdf
  • Ograniczenia nadmiarowe, zbadać magisterkę załączoną na tej stronie
  • Preferencje co do nadgodzin: pielęgniarka lubi/nie lubi/ma neutralny stosunek do nadgodzin
  • Dodać kryterium optymalizacji: liczba nadgodzin z wzięciem pod uwagę preferencji pielęgnarek
  • Zastosowanie ograniczeń globalnych , np.
constraint forall(s in SHIFTS where (s mod 4) != 0)(
    at_least(min_nurses_during_day, [schedule[n, s] == 2 | n in NURSES], 2) 
);
  • od teraz testujemy zdalną pracę

Notatki

  • „The problem is unsatisfiable.” dobrze by było wyjaśniać dlaczego.
  • Trzeba zastanowić się nad dodatkowymi ograniczeniami (nadmiarowymi) w celu przyśpieszenia obliczeń.
pl/dydaktyka/wshop/prv/2016/iop-generator/start.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0