{"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/transform2act-learning-a-transform-and","title":"Transform2Act: Learning a Transform-and-Control Policy for Efficient Agent Design","arxiv_id":"2110.03659","date":"2021-10-07","proceeding":"ICLR 2022 4","authors":["Ye Yuan","Yuda Song","Zhengyi Luo","Wen Sun","Kris Kitani"],"abstract":"An agent's functionality is largely determined by its design, i.e., skeletal structure and joint attributes (e.g., length, size, strength). However, finding the optimal agent design for a given function is extremely challenging since the problem is inherently combinatorial and the design space is prohibitively large. Additionally, it can be costly to evaluate each candidate design which requires solving for its optimal controller. To tackle these problems, our key idea is to incorporate the design procedure of an agent into its decision-making process. Specifically, we learn a conditional policy that, in an episode, first applies a sequence of transform actions to modify an agent's skeletal structure and joint attributes, and then applies control actions under the new design. To handle a variable number of joints across designs, we use a graph-based policy where each graph node represents a joint and uses message passing with its neighbors to output joint-specific actions. Using policy gradient methods, our approach enables joint optimization of agent design and control as well as experience sharing across different designs, which improves sample efficiency substantially. Experiments show that our approach, Transform2Act, outperforms prior methods significantly in terms of convergence speed and final performance. Notably, Transform2Act can automatically discover plausible designs similar to giraffes, squids, and spiders. Code and videos are available at https://sites.google.com/view/transform2act.","url_abs":"https://arxiv.org/abs/2110.03659v3","url_pdf":"https://arxiv.org/pdf/2110.03659v3.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":"transform2act-learning-a-transform-and","repo_url":"https://github.com/Khrylx/Transform2Act","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"decision-making","task_name":"Decision Making"},{"task_slug":"policy-gradient-methods","task_name":"Policy Gradient Methods"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2110.03659","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2110.03659"}},"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/Khrylx/Transform2Act","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":7},"by_repo_kind":{"official":{"samples":7,"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":"e80e9b137849e33a","entry":"create_logger","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/utils/logger.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/utils/logger.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":"e80e9b137849e33a"}},{"code_sha256_prefix":"8dca878ea5e97bf4","entry":"get_single_body_qposaddr","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/utils/mujoco.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/utils/mujoco.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":"8dca878ea5e97bf4"}},{"code_sha256_prefix":"8eee684b0bb59dbf","entry":"normal_entropy","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/utils/math.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/utils/math.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":"8eee684b0bb59dbf"}},{"code_sha256_prefix":"b9112c793778d273","entry":"normal_log_density","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/utils/math.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/utils/math.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":"b9112c793778d273"}},{"code_sha256_prefix":"5e0c4aa3258c0ef5","entry":"normalize_range","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/robot/xml_robot.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/robot/xml_robot.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":"5e0c4aa3258c0ef5"}},{"code_sha256_prefix":"9ce3c0fc66cce890","entry":"parse_fromto","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/robot/xml_robot.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/robot/xml_robot.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":"9ce3c0fc66cce890"}},{"code_sha256_prefix":"96ecda6cfeb2c3b1","entry":"parse_vec","repo":"Khrylx/Transform2Act","repo_kind":"official","path":"khrylib/robot/xml_robot.py","file_url":"https://github.com/Khrylx/Transform2Act/blob/HEAD/khrylib/robot/xml_robot.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":"96ecda6cfeb2c3b1"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}