Description: Replace the binary * star logic with multi-character categorical matching. Participants sharing a Grp symbol must be assigned to the same group. Participants sharing a Sep symbol must be distributed across different groups as evenly as possible.
Technical Tasks:
- Update
data_loader.py to parse Sep and Grp columns, tokenizing comma-separated or multi-character symbols.
-
Grouping Logic (
src/core/solver.py): For every pair of participants $(A, B)$ sharing a Grp symbol, add a hard equality constraint: model.Add(x[(A, g)] == x[(B, g)]) for all groups g.
-
Separation Logic (
src/core/solver.py): For a set of participants $S$ sharing a Sep symbol, calculate the ideal distribution ceiling(|S| / num_groups) and enforce maximum bounds per group, similar to the existing star logic.
Description: Replace the binary
*star logic with multi-character categorical matching. Participants sharing aGrpsymbol must be assigned to the same group. Participants sharing aSepsymbol must be distributed across different groups as evenly as possible.Technical Tasks:
data_loader.pyto parseSepandGrpcolumns, tokenizing comma-separated or multi-character symbols.src/core/solver.py): For every pair of participantsGrpsymbol, add a hard equality constraint:model.Add(x[(A, g)] == x[(B, g)])for all groupsg.src/core/solver.py): For a set of participantsSepsymbol, calculate the ideal distributionceiling(|S| / num_groups)and enforce maximum bounds per group, similar to the existing star logic.