Code and result files for the SetDispatch identical parallel-machine scheduling experiments.
The current version focuses on total tardiness minimization on identical machines. SetDispatch is trained as one sequential ML dispatching policy: at each decision time, it scores the eligible jobs for the earliest-available machine and dispatches the highest-scoring job.
src/: source code for training, evaluation, baselines, and result reconstruction.src/train_dynamic.py: trains the dynamic dispatching policy.src/make_dispatch_labels.py: builds MIP-projected non-delay dispatching labels.src/evaluate_dynamic.py: runs the trained policy on test instances.src/pms_heuristic.py: release-gated MDD, ATC, and NDPRTT baselines.src/reconstruct_results.py: rebuilds the summary tables from raw instance/output CSVs.src/plot_gap_summary.py: recreates the Figure 1 gap plot from the summary CSV.scripts/submit_job_train_gpu_dynamic.sh: cluster training script.results/: current summary spreadsheets and plot inputs.
Large instance files, label pickles, and model checkpoints are not committed. Download them from the Google Drive Link, then put them in data/ and models/.
pip install -r requirements.txtOn the cluster, use the same Python/PyTorch environment used for the training runs.
Place raw test CSVs and SetDispatch decoded CSVs in data/.
Place per-instance heuristic outputs in data/Heuristic_test/ if you want to
inspect the stored MDD, ATC, and NDPRTT schedules directly. The reconstruction
script can also recompute these baselines from the raw test CSVs.
Place trained model checkpoints in models/.
The expected filenames are listed in docs/google_drive_manifest.md.
The training script can auto-build dispatch labels if the label pickle is missing.
The environment variable names still use the legacy DGSF_ prefix so older cluster run files remain compatible.
DGSF_TRAIN_CSV=data/Dev3_instances_2m_60_theta_mid_4Itau_train_10k_new_dev2.csv \
DGSF_LABELS_PKL=data/Dev3_2m_60_theta_mid_4Itau_10k_dispatch_labels.pkl \
DGSF_SAVE_PATH=models/Dev3_2m_60_theta_mid_4Itau_10k_dev9dyn_identical.pth \
python src/train_dynamic.pyUseful overrides:
DGSF_EPOCHSDGSF_BATCH_SIZEDGSF_LRDGSF_LAM_RANKDGSF_NUM_WORKERSDGSF_BUILD_LABELS
DGSF_TEST_CSV=data/Dev3_instances_2m_60_theta_mid_4Itau_test_new_dev2.csv \
DGSF_MODEL_PATH=models/Dev3_2m_60_theta_mid_4Itau_10k_dev9dyn_identical.pth \
DGSF_OUTPUT_CSV=data/Dev3_instances_2m_60_theta_mid_4Itau_test_new_dev2_dyn_m9.csv \
python src/evaluate_dynamic.pyDGSF_DATA_DIR=data DGSF_RESULTS_DIR=results python src/reconstruct_results.py
python src/plot_gap_summary.pyThe paper gap is:
gap (%) = 100 * (TT_policy - TT_opt) / TT_opt
All benchmark instances used in the reported gap calculations have TT_opt > 0.
- Figure 1 uses 60-job trained SetDispatch models for the reported cells.
- MDD, ATC, and NDPRTT are recomputed with the same release-gated non-delay dispatching logic.
- Full Excel sheets and large model/data files are stored at the Google Drive Link.