Skip to main content

Georg Stage vagtplanlægger

Dette er et hjælpeprogram til vagtplanlægning ombord på Georg Stage (søvagter). Matematikken bag programmet benytter lineær programming (LP) til at optimere vagterne, således at alle opgaver varetages, samtidigt med at opgaverne fordeles mellem gasterne så fair som muligt. Programmet er skrevet i Python 3.

Minimum Python version: 3.7

Se Kanban for opgaver der p.t. er igang.

Installation

Mac OS X and Windows

Installation med pip:

pip install georgstage --no-cache-dir

Kør:

python -m georgstage

Raspberry Pi

Installation af dependencies:

sudo apt-get install libatlas-base-dev
sudo apt-get install glpk-utils
sudo pip install georgstage
sudo pulptest

Lokal udvikling

python3 -m venv venv
source venv/bin/activate
pip install -e '.[tests]'

Kør tests:

make lint
make test

Start program:

make run_local
# or
python -m georgstage

Publicer ny version

  1. opdater versionsnummer i pyproject.toml
  2. git commit -am 'besked'
  3. git push
  4. [På GitHub] opret ny release med matchende versionsnummer (tag og navn), dog med 'v' prefix.

Herefter offentliggøres ny version automatisk på PyPI via en Github Action.

Brugervejledning

Spørg Kostas

Kode eksempler

Hvis du kan kode Python, kan du bruge Georg Stages API via kode.

Auto-udfyldning:

from georgstage import GeorgStage, Opgave, Vagt
import pandas as pd

# initialiser GeorgStage med kode
vagter = [
    Vagt(dato='2021-05-01', vagt_tid=0, gast=1, opgave=Opgave.VAGTHAVENDE_ELEV),
    Vagt(dato='2021-05-01', vagt_tid=0, gast=2, opgave=Opgave.ORDONNANS),
    Vagt(dato='2021-05-01', vagt_tid=0, gast=3, opgave=Opgave.RORGAENGER),    
    Vagt(dato='2021-05-01', vagt_tid=0, gast=4, opgave=Opgave.UDKIG)
]
gs = GeorgStage(vagter)

# fyld et par uger ud automatisk
for dt in pd.date_range(start='2021-05-01', end='2021-05-14', closed=None).date:
    print(dt)
    fill_result = gs.autofill(dt)
    if fill_result.status == 1:
        gs[dt] = fill_result.vagter

# Check antal dage:
print(f'Antal dage = {len(gs)}')

Load og save:

# Create gs from other gs
gs2 = GeorgStage(gs.get_vagter())

# Create gs from dataframe
gs3 = GeorgStage.from_dataframe(gs.to_dataframe())

# Save GeorgStage til file
gs.to_dataframe().to_csv('vagter.csv', index=False)

# Load GeorgStage fra file (CSV)
df_vagter = pd.read_csv('vagter.csv')
gs4 = GeorgStage.from_dataframe(df_vagter)

Diverse:

# Eksporter som dataframe (Pandas)
gs.to_dataframe()

# Eksporter som liste af vagter
gs.get_vagter()

# Eksporter datoer
gs.get_datoer()

Regler vedr. vagter på Georg Stage

Regler for søvagter, som gælder delvist for ankervagter:

  • Elever er organiseret i 3 skifter (holod) med 20 gaster (elever) på hver
    • Skifte 1: gaster 1-20
    • Skifte 2: gaster 21-40
    • Skifte 3: Gaster 41-60
  • Gaster 61-63 er kokke elever og er altid i køkkenet.
  • Vagterne er går igen i 6 perioder per dag, som fordeles på skifte 1-3, så hver skifte får to perioder per dag
    • Klokken 00 - 04
    • Klokken 04 - 08
    • Klokken 08 - 12
    • Klokken 12 - 16
    • Klokken 16 - 20
    • Klokken 20 - 24
  • Det skal være fair, så alle få alle poster cirka lige mange gange
  • De faste vagter er
    • Der er 1 kvartermester til hver skifte
    • Der er 1 udkig til hver skifte
    • Der er 1 rorgænger til hver skifte
    • Der er 1 ordonnans til hver skifte
    • Der er 1 vagthavende elev til hver skifte
  • De særlige vagter er:
    • Der er 1 dækselev i kabys, kun 8-12 (morgenmad), 12-16 (frokost), 16-20 (aftensmad)
    • Den vagthavende elev er den samme gast både morgen og aften, går på tur, dag for dag, også når skifterne får nye vagter.
    • Pejlegast A fra dagen før, er pejlegast B dagen efter.
    • pejlegaster findes kun på 16-20 vagten
    • Der er udvalgte gaster der udtages til håndværksmæssig uddannelse hver dag.

Der findes også ankervagter, men det kører en smule anderledes.

Release files for georgstage 0.2.19

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for georgstage 0.2.19
File Interpreter ABI Platform
georgstage-0.2.19-py3-none-any.whl Python 3 none any Details

Release files / georgstage-0.2.19-py3-none-any.whl

Download URL georgstage-0.2.19-py3-none-any.whl
Size 15.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cbdb25bac8178c3dbbffb2b14a98718c7233cd067e77ea3dc2899b54008ea8a5
BLAKE2b-256 checksum
How to use checksums
58c01a4081ae56f14ba2d5db3f76f76c7f428d9688a4df33eaa7ae1d60e0238d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.2.19 This release

1 release file

0.2.18

1 release file

0.2.17

1 release file

0.2.16

1 release file

0.2.15

1 release file

0.2.13

1 release file

0.2.12

1 release file

0.2.8

1 release file

0.2.7

1 release file

0.2.6

1 release file

0.0.9

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.5

1 release file

0.0.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page