Optimizing an array / matrix (assigning reviewers to proposals)

45 views Asked by At

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).

  1. First, I want to remove (erase) all values of 3 and 4.
  2. 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.
  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).
  4. 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.
  5. The number of “rapporteur” assignments should be approximately the same for all reviewers (rows).
  6. [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!

0

There are 0 answers