{"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/slm-lab-a-comprehensive-benchmark-and-modular-1","title":"SLM Lab: A Comprehensive Benchmark and Modular Software Framework for Reproducible Deep Reinforcement Learning","arxiv_id":"1912.12482","date":"2019-12-28","proceeding":null,"authors":["Keng Wah Loon","Laura Graesser","Milan Cvitkovic"],"abstract":"We introduce SLM Lab, a software framework for reproducible reinforcement learning (RL) research. SLM Lab implements a number of popular RL algorithms, provides synchronous and asynchronous parallel experiment execution, hyperparameter search, and result analysis. RL algorithms in SLM Lab are implemented in a modular way such that differences in algorithm performance can be confidently ascribed to differences between algorithms, not between implementations. In this work we present the design choices behind SLM Lab and use it to produce a comprehensive single-codebase RL algorithm benchmark. In addition, as a consequence of SLM Lab's modular design, we introduce and evaluate a discrete-action variant of the Soft Actor-Critic algorithm (Haarnoja et al., 2018) and a hybrid synchronous/asynchronous training method for RL agents.","url_abs":"https://arxiv.org/abs/1912.12482v1","url_pdf":"https://arxiv.org/pdf/1912.12482v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"slm-lab-a-comprehensive-benchmark-and-modular-1","repo_url":"https://github.com/kengz/SLM-Lab","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"atari-games","task_name":"Atari Games"},{"task_slug":"deep-reinforcement-learning","task_name":"Deep Reinforcement Learning"},{"task_slug":"openai-gym","task_name":"OpenAI Gym"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"}],"methods":[{"method_slug":"a2c","method_name":"A2C"},{"method_slug":"adam","method_name":"Adam"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dqn","method_name":"DQN"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"double-dqn","method_name":"Double DQN"},{"method_slug":"double-q-learning","method_name":"Double Q-learning"},{"method_slug":"entropy-regularization","method_name":"Entropy Regularization"},{"method_slug":"experience-replay","method_name":"Experience Replay"},{"method_slug":"ppo","method_name":"PPO"},{"method_slug":"q-learning","method_name":"Q-Learning"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"soft-actor-critic","method_name":"Soft Actor Critic"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=1912.12482","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1912.12482"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/kengz/SLM-Lab","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":13},"by_repo_kind":{"official":{"samples":13,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"c8a23a02f10e731a","entry":"batch_get","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/ml_util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/ml_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c8a23a02f10e731a"}},{"code_sha256_prefix":"1ec1b8f00401ef84","entry":"calc_srs_mean_std","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1ec1b8f00401ef84"}},{"code_sha256_prefix":"1ca922f73a40acc4","entry":"calc_ts_diff","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/util.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1ca922f73a40acc4"}},{"code_sha256_prefix":"0a3721d2e176a664","entry":"center_mean","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/math_util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/math_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0a3721d2e176a664"}},{"code_sha256_prefix":"7f74c5c43dd38d97","entry":"concat_batches","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/ml_util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/ml_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7f74c5c43dd38d97"}},{"code_sha256_prefix":"dc69a6b4b1eb2489","entry":"critical","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/logger.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/logger.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dc69a6b4b1eb2489"}},{"code_sha256_prefix":"b5c2a41c3a816ab2","entry":"debug","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/logger.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/logger.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b5c2a41c3a816ab2"}},{"code_sha256_prefix":"529e682f71230b22","entry":"epi_done","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/ml_util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/ml_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"529e682f71230b22"}},{"code_sha256_prefix":"ac80a904d8e853b1","entry":"error","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/logger.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/logger.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ac80a904d8e853b1"}},{"code_sha256_prefix":"2b7e1db927d58735","entry":"format_metrics","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2b7e1db927d58735"}},{"code_sha256_prefix":"b68ae619f0cef90a","entry":"set_from_cli","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/env_var.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/env_var.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b68ae619f0cef90a"}},{"code_sha256_prefix":"840248f6e820c2cf","entry":"symexp","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/math_util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/math_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"840248f6e820c2cf"}},{"code_sha256_prefix":"bb21890c6aa0c40e","entry":"symlog","repo":"kengz/SLM-Lab","repo_kind":"official","path":"slm_lab/lib/math_util.py","file_url":"https://github.com/kengz/SLM-Lab/blob/HEAD/slm_lab/lib/math_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bb21890c6aa0c40e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}