1. mangpo
  2. pc-scheduler

Wiki

Clone wiki

pc-scheduler / Home

PCscheduler

PCscheduler is a python script for generating paper discussion order in program committee meeting (PC meeting). The program outputs the discussion order that satisfies the constraint or that is as close as possible. PCscheduler uses genetic algorithm with simulated annealing to search for a solution.

PC Meeting

In order to generate a good paper discussion order, we need to understand how PC meeting work. In the PC meeting, the program committee members get together to make decisions on accepting or rejecting the selected papers. Each paper has 3-5 reviewers depending on the conference, and one of the reviewers is responsible to lead the discussion and taking note for that paper. All program committee members stay through all discussions whether or not they review those papers. However, if a member knows the authors of a paper, the member "conflict"s with that paper. In that case, he has to leave the room and come back after the discussion ends.

Scheduling Constraints

A good discussion order is an order such that: 1) the committee members do not have to leave the room too many times because of the conflicts 2) the leaders have enough time to finish his note before participating in the next discussion (when he is one of the reviewers of that paper), leaving the room (when he conflicts with that paper), or leading the next discussion and 3) the leaders have enough time to prepare for the discussion he leads, so he should not have to lead the discussion immediately right after he comes back from a conflict.

PCscheduler captures these constraints in the program parameters which are assigned to some certain values at the beginning of the program (# Ideal values). Users are encourage to change these parameters to match their desired values.

Algorithm

PCscheduler uses genetic algorithm with simulated annealing and some tweaks to come up with a solution that satisfies the constraint or a solution that is as close to satisfy the constraint. The solution is not deterministic and may not be optimal since it uses genetic algorithm.

The candidates in the first generation are random orders. The evaluation function return the cost of a given order (the smaller the better). In each generation, we pick a certain number of candidates as parents. We generate new candidates for the next generate from from the parents. There are different mutation functions (e.g. randomly swap some papers, and heuristically swap to minimize the cost). PCscheduler generates at most 2000 generations or until the last 20 generations do not make any progress.

Input

The program requires one main json input file that contains necessary information about papers. The json file should be formatted as follow.

[{"lead": "name of leader", 
   "title": "title of the paper", 
   "number": "paper id", 
   "reviews": [["name of reviewer 1", "score", "expertise level"], ["name of reviewer 2", "score", "expertise level"], ... ], 
   "authors": "author1, author2, author3 and author4", 
   "conflicts": "name of conflicting member 1, name of conflicting member 2, ..."}]

It can include other fields, but the fields here are the required ones. The example of the main json file is example/papers.json.

The script has options to discard some papers and some members (e.g. external pc members) from scheduling process that can be passed in as flags of the program.

Output

The output is cvs file. The order of the discussion follows the order of the rows in the file.

Usage

Since the output is non-deterministic, we suggest running the script several time and select the best solution for the final order. We consider implement parallel version that runs multiple scripts at the same time and outputs the best one, but we have not done so.

python pc-sheduler.py --help

For further questions, please contact mangpo [at] eecs.berkeley.edu

Practical Example

This script was used for scheduling the paper discussion order for ASPLOS 2013 PC meeting. There were approximately 70 selected papers to be discussed. Each run takes approximately 20 minutes. We ran the script 3 times and selected the best order.

Updated