8 Commits

Author SHA1 Message Date
mrngm 467bdbd56f Weekend 22, some QoL improvements (added wiki_to_prefs_table.py, print wiki header in output as well) 2026-02-01 15:16:59 +01:00
Margot Sauter d329748b89 Weekend 19 2024-11-10 19:28:37 +01:00
yorick fb03d1a3ba Update nix-shell line 2024-01-06 20:20:14 +01:00
yorick 17731a1032 Add "each person has at least 1 task" constraint 2024-01-06 20:19:46 +01:00
Sjors Gielen d5b1309ef5 Gitignore 2023-12-31 17:33:22 +01:00
Sjors Gielen ffcc39ae20 Weekend 18 2023-12-31 17:33:02 +01:00
Margot Sauter ca54fd636d Weekend 16 2023-03-08 09:50:13 +01:00
Margot Sauter 8ff6ffa559 W15 2022-11-24 20:39:57 +01:00
6 changed files with 136 additions and 105 deletions
+3
View File
@@ -0,0 +1,3 @@
__pycache__
data
output
+67 -67
View File
@@ -1,105 +1,105 @@
config:
days: 3
days: 4
weights:
likes: 1
hates: 3
# TODO: load_dev
ignore: []
ignore: [-]
task_re: "[ ,/]+"
tasks:
hotemetoten:
personen: [MrNGm, Pepper, Joost, Annelies]
personen: [Tanja, mrngm, MargotM, Eliza]
workload: 4
req: [1, 1, 1]
req: [1, 1, 1, 1]
hardcode:
- MrNGm
# - Pepper
- Joost
- Annelies
- Eliza
- Tanja
- MargotM
- mrngm
lookup: [hotemetoten]
superkok:
req: [1, 1, 1]
personen: [lynn, pepper, Wassasin]
req: [1, 1, 1, 0]
personen: [MacGyver, carrot, Pepper]
workload: 4
lookup: [superkok]
hardcode:
- MacGyver
- carrot
- Pepper
- Wassasin
- lynn
drankmanagen:
req: [1, 1, 1]
personen: [MacGyver]
workload: 1
lookup: [drankmanagen]
snijden:
req: [2, 3, 3, 0]
workload: 2
personen: iedereen
lookup: [snijden]
koken:
req: [2, 3, 2]
req: [3, 3, 3, 0]
workload: 3
personen: liefhebbers
lookup: [koken, kookhulp, hulpkoken]
afwassen:
req: [3, 6, 6, 0]
workload: 2
personen: iedereen
lookup: [afwassen]
schoonmaken:
req: [3, 4, 4]
req: [2, 4, 4, 0]
workload: 2
personen: iedereen
lookup: [schoonmaken]
snackdealen:
req: [4, 5, 5]
req: [2, 4, 4, 0]
workload: 1
personen: iedereen
lookup: [hapjes, snackdealen]
fotograferen:
req: [2, 2, 2]
workload: 1
req: [2, 3, 3, 0]
workload: 2
personen: liefhebbers
lookup: [fotograferen]
afwassen:
req: [4, 4, 4]
workload: 2
personen: iedereen
lookup: [afwassen]
snijpieten:
req: [3, 4, 4]
workload: 2
personen: iedereen
lookup: [snijden]
pendelen:
req: [2, 1, 2]
req: [1, 1, 1, 0]
workload: 2
personen: liefhebbers
lookup: [pendelen]
people:
- Pepper
- Joost
- MrNGm
- Annelies
- Wassasin
- lynn
- Roflincopter
- lucus
- Weasel
- ElizaAntoine
- Lyra
- MacGyver
- Abel
- SyntaxTerror
- carrot
- Blondie
- Bwesterb
- M-ou-se
- PaxSum
- Petervdv
- Margot
- Daan
- Laurens
- yorick
- Minnozz
- Sjors
- Quis
- Nova
- Marlon
- Aaron
- AlphaCentauri
- BOBMarlie
- Martijn
- Colin
- avel
- Blu
- Hannah
- carrie
- carrot
- cuttlefish
- Dusk
- Eliza
#- Harm
- Harmen
- Laurens
- Leonie
- lucus
- Lynn
- Lyra
- Maaike
- Mabel
- MacGyver
- Mapzie
- MargotM
- Marlon
- Mieksies
- mike
- Minnozz
- mrngm
- Nova
- PaxSum
- Pepper
- Petervdv
- PP
- Quis
- Rian
- roflin
- RTB
- Sjors
- SyntaxTerror
- Tanja
#- Tauri
- Thom
- Weasel
- Yorick
+6 -3
View File
@@ -1,12 +1,12 @@
#! /usr/bin/env nix-shell
#!nix-shell -i python3 -p python python3Packages.pyyaml glpk
#!nix-shell -i python3 -p python3 python3Packages.pyyaml glpk -I nixpkgs=flake:nixpkgs --extra-experimental-features flakes
import sys
import yaml
import re
import subprocess
from collections import OrderedDict
import glpm
conf = yaml.load(open('config.yaml', 'r'))
conf = yaml.safe_load(open('config.yaml', 'r'))
config = conf['config']
config['ignore'].append('')
tasks = OrderedDict(conf['tasks'])
@@ -143,6 +143,9 @@ 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:
@@ -151,7 +154,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("|-")
print("|-", file=file)
people = read_people(conf['people'])
with open('prefs_table', 'r') as pref_file:
read_prefs(pref_file, tasks, people)
+3 -4
View File
@@ -18,7 +18,6 @@ set D := 1..D_count;
/* aanwezigheid x workload for that day */
param Costs{p in P}, integer, >= 0;
/* Person p likes to solve jobs j */
param L{p in P, j in J} default 0, binary;
@@ -49,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 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 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 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;
+26 -31
View File
@@ -1,31 +1,26 @@
Pepper koken, snijden fotograferen, snackdealen
Joost afwassen, koken, snijden fotograferen, snackdealen
Annelies afwassen, fotograferen, pendelen koken, snijden, snackdealen
Laurens pendelen, koken, snijden schoonmaken
Weasel fotograferen, koken, snijden snackdealen, schoonmaken
Martijn koken, snijden schoonmaken, afwassen
PaxSum koken, snijden, afwassen fotograferen, snackdealen
petervdv snackdealen, pendelen koken, afwassen, schoonmaken, fotograferen
Lyra fotograferen, afwassen, snijden pendelen
Nova pendelen, koken, snijden fotograferen, schoonmaken, snackdealen
ElizaAntoine afwassen, schoonmaken, fotograferen koken, snijden, snackdealen, pendelen
SyntaxTerror fotograferen, snijden, afwassen koken, snackdealen, pendelen
AlphaCentauri snackdealen, schoonmaken, afwassen koken, pendelen, snijden
Daan pendelen, fotograferen afwassen, schoonmaken
Lucus koken, snijden, afwassen fotograferen, schoonmaken
Abel fotograferen, snijden, afwassen schoonmaken, koken
yorick snijden, afwassen fotograferen, schoonmaken
bwesterb snijden, koken afwassen, schoonmaken, snackdealen
Quis snijden, koken, snackdealen schoonmaken
Minnozz snijden, koken schoonmaken, snackdealen, afwassen
Margot snijden, koken, afwassen schoonmaken, snackdealen, fotograferen
lynn fotograferen
Colin Afwassen, schoonmaken, snackdealen koken, snijden
Sjors Pendelen, schoonmaken, snackdealen koken, snijden
Blondie fotograferen, afwassen, snackdealen schoonmaken, snijden
Roflincopter schoonmaken, snijden, afwassen snackdealen, fotograferen
BOBMarlie fotograferen, koken, snijden afwassen, schoonmaken, snackdealen
Aaron fotograferen, afwassen, snijden koken, schoonmaken, snackdealen, pendelen
Wassasin koken, snijden, snackdealen fotograferen
carrot pendelen, schoonmaken, koken fotograferen, snackdealen
M-ou-se snijden, snackdealen afwassen, schoonmaken, fotograferen
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
+31
View File
@@ -0,0 +1,31 @@
#!/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()