Skip to content

Commit

Permalink
Emergency reviewers example
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon-Rey committed Nov 7, 2024
1 parent 39dbdde commit c43744d
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
7 changes: 6 additions & 1 deletion easychair_extra/reviewassignment.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,14 @@ def find_emergency_reviewers(
for s, rev_vars in submissions_vars.items():
m += submissions_covered_vars[s] <= xsum(rev_vars.values())

# If the submission is covered and the reviewer is used, then we have to assign them the sub
for r, sub_vars in reviewers_vars.items():
for s, sub_var in sub_vars.items():
m += sub_var >= submissions_covered_vars[s] + reviewers_used_vars[r] - 2

m += xsum(reviewers_used_vars.values()) <= max_num_reviewers

objective = xsum(submissions_covered_vars.values())
objective = xsum(submissions_covered_vars.values()) * len(submissions_vars) + xsum(xsum(v) for v in reviewers_vars.values())
m.objective = maximize(objective)

m.verbose = verbose
Expand Down
13 changes: 8 additions & 5 deletions examples/form_emergency_reviewers_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,28 @@ def main():
os.path.join(root_dir, "committee.csv"),
bids_file_path=os.path.join(root_dir, "bidding.csv"),
)
committee = committee.head(300) # Reduce size for performance reason
committee = committee.head(600) # Reduce size for performance reason

# Read the submission file
submissions = read_submission(os.path.join(root_dir, "submission.csv"))
submissions = submissions.head(150) # Reduce size for performance reason
submissions = submissions.head(200) # Reduce size for performance reason

# Compute a bid profile
bid_level_weights = {"yes": 1, "maybe": 0.5}
bid_profile = committee_to_bid_profile(committee, submissions, bid_level_weights)

# Compute a set of emergency reviewers
max_num_emergency_revs = int(len(committee.index) * 0.2)
max_num_emergency_revs = int(len(committee.index) * 0.1)
emergency_revs_assignment = find_emergency_reviewers(
bid_profile, bid_level_weights, max_num_emergency_revs
)
emergency_reviewers = sorted(emergency_revs_assignment)
num_submission_covered = sum(len(p) for p in emergency_revs_assignment.values())
num_submission_covered = len(set(s for p in emergency_revs_assignment.values() for s in p))
cum_submission_covered = sum(len(p) for p in emergency_revs_assignment.values())
print(f"These {len(emergency_reviewers)} reviewers can serve as emergency reviewers: "
f"{emergency_reviewers}.")
print(f"This pool of emergency reviewers covers {num_submission_covered}.\n")
print(f"This pool of emergency reviewers covers {num_submission_covered} submissions "
f"out of {len(submissions.index)} (cumulative covering is {cum_submission_covered}).\n")

# Check that a review assignment would still be possible without the emergency reviewers
new_bid_profile = {
Expand Down

0 comments on commit c43744d

Please sign in to comment.