Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ed15f02249 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
__pycache__
|
||||
data
|
||||
output
|
||||
82
config.yaml
82
config.yaml
@@ -1,105 +1,99 @@
|
||||
config:
|
||||
days: 4
|
||||
days: 3
|
||||
weights:
|
||||
likes: 1
|
||||
hates: 3
|
||||
# TODO: load_dev
|
||||
ignore: [-]
|
||||
ignore: []
|
||||
task_re: "[ ,/]+"
|
||||
tasks:
|
||||
hotemetoten:
|
||||
personen: [Tanja, mrngm, MargotM, Eliza]
|
||||
personen: [Lyra, mrngm, Quis]
|
||||
workload: 4
|
||||
req: [1, 1, 1, 1]
|
||||
req: [1, 1, 1]
|
||||
hardcode:
|
||||
- Eliza
|
||||
- Tanja
|
||||
- MargotM
|
||||
- Lyra
|
||||
- mrngm
|
||||
- Quis
|
||||
lookup: [hotemetoten]
|
||||
superkok:
|
||||
req: [1, 1, 1, 0]
|
||||
personen: [MacGyver, carrot, Pepper]
|
||||
req: [1, 1, 1]
|
||||
personen: [MacGyver, Loki, Pepper]
|
||||
workload: 4
|
||||
lookup: [superkok]
|
||||
hardcode:
|
||||
- MacGyver
|
||||
- carrot
|
||||
- Loki
|
||||
- Pepper
|
||||
snijden:
|
||||
req: [2, 3, 3, 0]
|
||||
req: [2, 5, 3]
|
||||
workload: 2
|
||||
personen: iedereen
|
||||
lookup: [snijden]
|
||||
koken:
|
||||
req: [3, 3, 3, 0]
|
||||
req: [2, 3, 2]
|
||||
workload: 3
|
||||
personen: liefhebbers
|
||||
lookup: [koken, kookhulp, hulpkoken]
|
||||
afwassen:
|
||||
req: [3, 6, 6, 0]
|
||||
req: [3, 6, 6]
|
||||
workload: 2
|
||||
personen: iedereen
|
||||
lookup: [afwassen]
|
||||
schoonmaken:
|
||||
req: [2, 4, 4, 0]
|
||||
req: [2, 4, 4]
|
||||
workload: 2
|
||||
personen: iedereen
|
||||
lookup: [schoonmaken]
|
||||
snackdealen:
|
||||
req: [2, 4, 4, 0]
|
||||
req: [2, 4, 4]
|
||||
workload: 1
|
||||
personen: iedereen
|
||||
lookup: [hapjes, snackdealen]
|
||||
fotograferen:
|
||||
req: [2, 3, 3, 0]
|
||||
workload: 2
|
||||
req: [2, 3, 3]
|
||||
workload: 1
|
||||
personen: liefhebbers
|
||||
lookup: [fotograferen]
|
||||
pendelen:
|
||||
req: [1, 1, 1, 0]
|
||||
req: [1, 1, 1]
|
||||
workload: 2
|
||||
personen: liefhebbers
|
||||
lookup: [pendelen]
|
||||
people:
|
||||
- Lyra
|
||||
- mrngm
|
||||
- Quis
|
||||
- MacGyver
|
||||
- Loki
|
||||
- Pepper
|
||||
- Abel
|
||||
- Alexandra
|
||||
- Annelies
|
||||
- Annemiek: # niet op zondag
|
||||
dagen: [0,1]
|
||||
- avel
|
||||
- Blu
|
||||
- carrie
|
||||
- Ayke
|
||||
- blu
|
||||
- carrot
|
||||
- cuttlefish
|
||||
- Dusk
|
||||
- Eliza
|
||||
#- Harm
|
||||
- Harmen
|
||||
- Laurens
|
||||
- eliza
|
||||
- Farnaz
|
||||
- Harm
|
||||
- Joost
|
||||
- Leonie
|
||||
- lucus
|
||||
- Lynn
|
||||
- Lyra
|
||||
- Maaike
|
||||
- Mabel
|
||||
- MacGyver
|
||||
- Mapzie
|
||||
- MargotM
|
||||
- Margot
|
||||
- Marley
|
||||
- Marlon
|
||||
- Mieksies
|
||||
- mike
|
||||
- Minnozz
|
||||
- mrngm
|
||||
- Nova
|
||||
- PaxSum
|
||||
- Pepper
|
||||
- Petervdv
|
||||
- petervdv
|
||||
- phedny
|
||||
- PP
|
||||
- Quis
|
||||
- Rian
|
||||
- roflin
|
||||
- RTB
|
||||
- Sjors
|
||||
- SyntaxTerror
|
||||
- Tanja
|
||||
#- Tauri
|
||||
- Thom
|
||||
- Weasel
|
||||
- Yorick
|
||||
- yorick
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#! /usr/bin/env nix-shell
|
||||
#!nix-shell -i python3 -p python3 python3Packages.pyyaml glpk -I nixpkgs=flake:nixpkgs --extra-experimental-features flakes
|
||||
#!nix-shell -i python3 -p python python3Packages.pyyaml glpk
|
||||
import sys
|
||||
import yaml
|
||||
import re
|
||||
@@ -143,9 +143,6 @@ def write_data(people, tasks, file=sys.stdout):
|
||||
print(glpm.param("WL", config['weights']['likes']), file=file)
|
||||
print(glpm.param("WH", config['weights']['hates']), file=file)
|
||||
def write_tasks(people, tasks, file=sys.stdout):
|
||||
days_tpl = " dag !!" * config['days']
|
||||
print("! {} !!{} {} !! {}".format("wie", days_tpl, "vrolijkheid", "workload"), file=file)
|
||||
print("|-", file=file)
|
||||
for name, p in people.items():
|
||||
days = [[] for i in range(config['days'])]
|
||||
for (d,t) in p.does:
|
||||
@@ -154,7 +151,7 @@ def write_tasks(people, tasks, file=sys.stdout):
|
||||
days_fmt = " {} ||" * len(days)
|
||||
days_filled = days_fmt.format(*map(q, days))
|
||||
print("| {} ||{} {} || {}".format(name, days_filled, p.vrolijkheid(), p.workload(tasks)), file=file)
|
||||
print("|-", file=file)
|
||||
print("|-")
|
||||
people = read_people(conf['people'])
|
||||
with open('prefs_table', 'r') as pref_file:
|
||||
read_prefs(pref_file, tasks, people)
|
||||
|
||||
@@ -48,11 +48,11 @@ s.t. hardcode{p in P, j in J, d in D}: A[p,j,d] >= Q[p,j,d];
|
||||
/* A person only has one task per day, at most */
|
||||
s.t. max_load_person{p in P, d in D}: sum{j in J} A[p,j,d] <= max_load[p,d];
|
||||
|
||||
/* A person has at least 1 task */
|
||||
s.t. min_load_person{p in P}: sum{j in J, d in D} A[p,j,d] >= 1;
|
||||
/* A person has at least D-1 tasks */
|
||||
#s.t. min_load_person{p in P}: sum{j in J, d in D} A[p,j,d] >= min_load[p];
|
||||
|
||||
/* A person does not perform the same job on all days */
|
||||
/* s.t. duplicate_jobs{p in P, j in J}: sum{d in D} A[p,j,d] <= D_count-1; */
|
||||
s.t. duplicate_jobs{p in P, j in J}: sum{d in D} A[p,j,d] <= D_count-1;
|
||||
|
||||
s.t. max_load_person_total{p in P}: (sum{d in D, j in J} A[p,j,d] * Wl[j]) <= ML;
|
||||
|
||||
|
||||
54
prefs_table
54
prefs_table
@@ -1,26 +1,28 @@
|
||||
Abel fotograferen, snijden, koken pendelen
|
||||
avel snackdealen, fotograferen koken, snijden, afwassen
|
||||
Blu koken schoonmaken, snackdealen
|
||||
Carrie snijden, pendelen snackdealen, koken
|
||||
Cuttlefish koken, snijden, afwassen, schoonmaken snackdealen, fotograferen
|
||||
Dusk koken schoonmaken, afwassen, snackdealen
|
||||
Laurens pendelen, koken, snijden schoonmaken, afwassen, fotograferen
|
||||
Leonie pendelen, snijden schoonmaken, snackdealen
|
||||
lucus snijden, koken snackdealen, schoonmaken
|
||||
lynn snackdealen schoonmaken, koken, afwassen, snijden
|
||||
Lyra schoonmaken, afwassen, snackdealen snijden, koken
|
||||
Maaike afwassen schoonmaken, snackdealen
|
||||
Mabel schoonmaken, afwassen snackdealen, koken
|
||||
Marlon koken, snijden, snackdealen schoonmaken, afwassen
|
||||
Minnozz fotograferen, snijden schoonmaken, afwassen
|
||||
Nova pendelen, koken, snijden schoonmaken, afwassen, snackdealen
|
||||
PaxSum koken, snijden schoonmaken, snackdealen
|
||||
Petervdv pendelen, snackdealen snijden, koken, afwassen, fotograferen
|
||||
PP koken, snijden snackdealen
|
||||
Quis snijden schoonmaken, fotograferen
|
||||
Rian afwassen, snijden schoonmaken, snackdealen
|
||||
roflin afwassen schoonmaken snackdealen koken
|
||||
SyntaxTerror schoonmaken, afwassen koken, pendelen, snackdealen
|
||||
Thom afwassen fotograferen, snackdealen
|
||||
Weasel fotograferen, snijden koken, schoonmaken
|
||||
Yorick snijden, koken snackdealen
|
||||
Abel fotograferen, afwassen, snijden pendelen, koken
|
||||
Alexandra snijden, snackdealen afwassen, schoonmaken
|
||||
Annelies afwassen, fotograferen snackdealen
|
||||
Annemiek schoonmaken, koken pendelen, afwassen
|
||||
avel snackdealen snijden, koken, afwassen
|
||||
blu snijden, snackdealen, pendelen afwassen, schoonmaken
|
||||
carrot koken, snijden fotograferen, schoonmaken
|
||||
eliza snijden, afwassen koken, snackdealen, pendelen
|
||||
Farnaz snijden, koken, snackdealen pendelen, afwassen, fotograferen
|
||||
Harm fotograferen, pendelen, afwassen schoonmaken, snackdealen
|
||||
Joost snijden fotograferen, pendelen, koken, afwassen, schoonmaken, koken
|
||||
Leonie snijden, pendelen, snackdealen fotograferen, schoonmaken
|
||||
lucus snijden, koken, afwassen schoonmaken
|
||||
Margot snijden, afwassen, fotograferen koken, snackdealen, schoonmaken
|
||||
Marley snijden, afwassen fotograferen, snackdealen
|
||||
Marlon snijden, koken, snackdealen afwassen, schoonmaken
|
||||
Minnozz fotograferen, snijden koken, afwassen, schoonmaken, pendelen, snackdealen
|
||||
Nova koken, snijden, pendelen fotograferen, schoonmaken
|
||||
PaxSum koken, snijden schoonmaken, afwassen
|
||||
petervdv snackdealen, pendelen koken, afwassen, fotograferen
|
||||
phedny snijden, snackdealen afwassen, schoonmaken
|
||||
PP koken, snijden pendelen, fotograferen, schoonmaken
|
||||
Rian snijden, afwassen, snackdealen fotograferen, pendelen
|
||||
Sjors snackdealen, pendelen schoonmaken
|
||||
SyntaxTerror fotograferen pendelen, koken, snackdealen
|
||||
Tanja snijden, afwassen, schoonmaken fotograferen, pendelen
|
||||
Thom koken, snijden, afwassen fotograferen, snackdealen
|
||||
yorick koken, snijden, afwassen fotograferen
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
def process_line(line):
|
||||
line = line.rstrip(" \n")
|
||||
if line == "|-":
|
||||
return
|
||||
if not line.startswith("|"):
|
||||
return
|
||||
line = line.lstrip("| ")
|
||||
line = line.replace("[[", "")
|
||||
line = line.replace("]]", "")
|
||||
line = line.replace("User:", "")
|
||||
|
||||
splitted = [x.strip() for x in line.split("||")]
|
||||
if len(splitted[0].split("|")) == 2:
|
||||
splitted[0] = splitted[0].split("|")[1]
|
||||
if splitted[1] == "":
|
||||
splitted[1] = "-"
|
||||
if splitted[2] == "":
|
||||
splitted[2] = "-"
|
||||
|
||||
print(f"{splitted[0]}\t{splitted[1]}\t{splitted[2]}")
|
||||
|
||||
def main():
|
||||
for line in sys.stdin:
|
||||
process_line(line)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user