I work in a large research environment and we are currently working on assigning reviewers to read project proposals. The reviewers have already specified their preferences for each proposal: 1=yes, 2=maybe, 3=no, 4=conflict_of_interest.
So, I have a table of reviewers (as rows) and proposals to review (as columns).
- First, I want to remove (erase) all values of 3 and 4.
- Then I want to assign 3 reviewers per proposal (column), ideally with preference 1=yes, and secondarily with preference 2=maybe; that is, for each column, the count of values <=2 should be exactly 3.
- The sum of proposals per reviewers (that is, for a given row, the count of columns with value <=2) should be approximately the same for all reviewers (rows).
- For each proposal (column), we need to make one of the assigned reviewers to the special role of “rapporteur”. This should ideally be a person that originally specified 1=yes, and if absolutely necessary 2=maybe.
- The number of “rapporteur” assignments should be approximately the same for all reviewers (rows).
- [Optional] We’d like to be able to see the original preferences. So we could, for example, indicate a regular reviewer with the number 11 if their original preference was 1=yes, and 12 if their original preference was 2=maybe. The rapporteur shovel be indicated with 10.
I have access to Matlab, but I’d prefer some looping/iterating algorightm for Python, shell script, etc.
I’ve tried asking ChatGPT and Copilot for suggestions (for zsh scripts... which I know is probably not the best solution), but this seems to beyond “them”. I need help from humans, please!