{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2605-18454","title":"Scheduling That Speaks: An Interpretable Programmatic Reinforcement Learning Framework","arxiv_id":"2605.18454","date":"2026-05-18","proceeding":null,"authors":["Chengpeng Hu","Yingqian Zhang","Hendrik Baier"],"abstract":"Deep reinforcement learning (DRL) has recently emerged as a promising approach to solve combinatorial optimization problems such as job shop scheduling. However, the policies learned by DRL are typically represented by deep neural networks (DNNs), whose opaque neural architectures and non-interpretable policy decisions can lead to critical trust and usability concerns for human decision makers. In addition, the computational requirements of DNNs can further hinder practical deployment in resource constrained environments. In this work, we propose ProRL, a novel interpretable programmatic reinforcement learning framework that achieves high-performance scheduling with human-readable and editable programmatic policies (i.e., programs). We first introduce a domain-specific language for scheduling (DSL-S) to represent scheduling strategies as structured programs. ProRL then explores the program space defined by DSL-S using local search to identify incomplete programs, which are subsequently completed by learning their parameters via Bayesian optimization. ProRL learns which scheduling heuristic rules to select, and hence, it naturally incorporates existing heuristics already used in industrial scenarios. Experiments on widely used benchmark instances demonstrate the strong performance of ProRL against existing heuristics and DRL baselines. Furthermore, ProRL performs well under strongly constrained computational resources, such as training with only 100 episodes. Our code is available at https://github.com/HcPlu/ProRL.","url_abs":"https://arxiv.org/abs/2605.18454","url_pdf":"https://arxiv.org/pdf/2605.18454","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2605.18454","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2605.18454"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/HcPlu/ProRL","reach":null}],"summary":{"ran":7,"unverified":3},"by_repo_kind":{"found_in_text":{"samples":10,"ran":7,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":10,"samples":[{"code_sha256_prefix":"ebf5b59fae22c901","entry":"boundary_hit_details","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/local_search/ops.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/local_search/ops.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"ebf5b59fae22c901"}},{"code_sha256_prefix":"e968e814a65d4c48","entry":"create_logger","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/local_search/run_ls.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/local_search/run_ls.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e968e814a65d4c48"}},{"code_sha256_prefix":"45681b788e776b19","entry":"estimate_feature_stats","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/local_search/run_ls.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/local_search/run_ls.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"45681b788e776b19"}},{"code_sha256_prefix":"9a81f9a376bd234e","entry":"eval_bayesian_opt_program","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/local_search/mthread.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/local_search/mthread.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"9a81f9a376bd234e"}},{"code_sha256_prefix":"0e7463a19a318383","entry":"expanded_bounds_for_boundary_hits","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/local_search/ops.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/local_search/ops.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"0e7463a19a318383"}},{"code_sha256_prefix":"948517dad8d0fdab","entry":"run_episode","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/pdr/evaluate.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/pdr/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"948517dad8d0fdab"}},{"code_sha256_prefix":"85182968ef17a36e","entry":"split_boundary_refit_budget","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"optimisation/local_search/ops.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/optimisation/local_search/ops.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"85182968ef17a36e"}},{"code_sha256_prefix":"84b3cdc1f0acb7ff","entry":"get_linear_param_vector","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"representation/dsl/program_helper.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/representation/dsl/program_helper.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"84b3cdc1f0acb7ff"}},{"code_sha256_prefix":"ba85087ce6d01abb","entry":"linear_param_map_from_program","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"representation/dsl/program_helper.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/representation/dsl/program_helper.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"ba85087ce6d01abb"}},{"code_sha256_prefix":"8690a94953013eba","entry":"merge_param_dict_parent_into_child","repo":"HcPlu/ProRL","repo_kind":"found_in_text","path":"representation/dsl/program_helper.py","file_url":"https://github.com/HcPlu/ProRL/blob/HEAD/representation/dsl/program_helper.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"8690a94953013eba"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}