{"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/learning-latent-dynamics-for-planning-from","title":"Learning Latent Dynamics for Planning from Pixels","arxiv_id":"1811.04551","date":"2018-11-12","proceeding":null,"authors":["Danijar Hafner","Timothy Lillicrap","Ian Fischer","Ruben Villegas","David Ha","Honglak Lee","James Davidson"],"abstract":"Planning has been very successful for control tasks with known environment dynamics. To leverage planning in unknown environments, the agent needs to learn the dynamics from interactions with the world. However, learning dynamics models that are accurate enough for planning has been a long-standing challenge, especially in image-based domains. We propose the Deep Planning Network (PlaNet), a purely model-based agent that learns the environment dynamics from images and chooses actions through fast online planning in latent space. To achieve high performance, the dynamics model must accurately predict the rewards ahead for multiple time steps. We approach this using a latent dynamics model with both deterministic and stochastic transition components. Moreover, we propose a multi-step variational inference objective that we name latent overshooting. Using only pixel observations, our agent solves continuous control tasks with contact dynamics, partial observability, and sparse rewards, which exceed the difficulty of tasks that were previously solved by planning with learned models. PlaNet uses substantially fewer episodes and reaches final performance close to and sometimes higher than strong model-free algorithms.","url_abs":"https://arxiv.org/abs/1811.04551v5","url_pdf":"https://arxiv.org/pdf/1811.04551v5.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":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/google-research/planet","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/Kaixhin/PlaNet","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/Yizhao111/dreamer-pytorch","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/chandar-lab/LoCA2","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":null},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/cross32768/PlaNet_PyTorch","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/juliuskunze/cwvae-jax","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"jax","reach":{"status":"unanswered"}},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/simonzhan-code/step-wise_saferl_pixel","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/vaibhavsaxena11/cwvae","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"unanswered"}},{"paper_slug":"learning-latent-dynamics-for-planning-from","repo_url":"https://github.com/xingyu-lin/softagent","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"continuous-control","task_name":"Continuous Control"},{"task_slug":"motion-planning","task_name":"Motion Planning"},{"task_slug":"variational-inference","task_name":"Variational Inference"},{"task_slug":"continuous-control","task_name":"continuous-control"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/continuous-control-on-deepmind-cup-catch","task":"Continuous Control","dataset":"DeepMind Cup Catch (Images)","model":"PlaNet","rank_in_archive_order":2,"of":2,"metrics":{"Return":"914"},"uses_additional_data":false},{"leaderboard":"/sota/continuous-control-on-deepmind-walker-walk","task":"Continuous Control","dataset":"DeepMind Walker Walk (Images)","model":"PlaNet","rank_in_archive_order":2,"of":2,"metrics":{"Return":"890"},"uses_additional_data":false}],"syntology":{"syntology_url":"https://syntology.ai/paper/1811.04551","atlas_url":"https://app.syntology.ai/?focus=1811.04551","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1811.04551"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/cross32768/PlaNet_PyTorch","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/vaibhavsaxena11/cwvae","reach":{"status":"unanswered"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Yizhao111/dreamer-pytorch","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/juliuskunze/cwvae-jax","reach":{"status":"unanswered"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Kaixhin/PlaNet","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/google-research/planet","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/simonzhan-code/step-wise_saferl_pixel","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/chandar-lab/LoCA2","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/xingyu-lin/softagent","reach":null}],"summary":{"ran":2,"unverified":5},"by_repo_kind":{"official":{"samples":3,"ran":0,"repositories":1},"listed":{"samples":4,"ran":2,"repositories":4}},"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":1,"samples":[{"code_sha256_prefix":"5c38c6ed046ae967","entry":"RecurrentStateSpaceModel","repo":"cross32768/PlaNet_PyTorch","repo_kind":"listed","path":"model.py","file_url":"https://github.com/cross32768/PlaNet_PyTorch/blob/HEAD/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5c38c6ed046ae967"}},{"code_sha256_prefix":"efe7f713034a1846","entry":"TransitionModel","repo":"xingyu-lin/softagent","repo_kind":"listed","path":"planet/models.py","file_url":"https://github.com/xingyu-lin/softagent/blob/HEAD/planet/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"efe7f713034a1846"}},{"code_sha256_prefix":"c2d4d65f835c80d5","entry":"TransitionModel","repo":"Kaixhin/PlaNet","repo_kind":"listed","path":"models.py","file_url":"https://github.com/Kaixhin/PlaNet/blob/HEAD/models.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":"c2d4d65f835c80d5"}},{"code_sha256_prefix":"c2cbf0fc5d0dc1a5","entry":"TransitionModel","repo":"Yizhao111/dreamer-pytorch","repo_kind":"listed","path":"models.py","file_url":"https://github.com/Yizhao111/dreamer-pytorch/blob/HEAD/models.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":"c2cbf0fc5d0dc1a5"}},{"code_sha256_prefix":"e0037b2b9ff475af","entry":"discounted_return","repo":"google-research/planet","repo_kind":"official","path":"planet/control/temporal_difference.py","file_url":"https://github.com/google-research/planet/blob/HEAD/planet/control/temporal_difference.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e0037b2b9ff475af"}},{"code_sha256_prefix":"5ebd8ca0b33c28d7","entry":"fixed_step_return","repo":"google-research/planet","repo_kind":"official","path":"planet/control/temporal_difference.py","file_url":"https://github.com/google-research/planet/blob/HEAD/planet/control/temporal_difference.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5ebd8ca0b33c28d7"}},{"code_sha256_prefix":"e437c521c0aeb696","entry":"lambda_return","repo":"google-research/planet","repo_kind":"official","path":"planet/control/temporal_difference.py","file_url":"https://github.com/google-research/planet/blob/HEAD/planet/control/temporal_difference.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e437c521c0aeb696"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}