2022-09-13 19:29:14 +00:00
<!doctype html>
< html class = "no-js" lang = "en" >
< head > < meta charset = "utf-8" / >
< meta name = "viewport" content = "width=device-width,initial-scale=1" / >
< meta name = "color-scheme" content = "light dark" > < meta name = "generator" content = "Docutils 0.18.1: http://docutils.sourceforge.net/" / >
< link rel = "index" title = "Index" href = "../../../genindex/" / > < link rel = "search" title = "Search" href = "../../../search/" / > < link rel = "next" title = "Cart Pole" href = "../cart_pole/" / > < link rel = "prev" title = "Classic Control" href = "../" / >
< link rel = "canonical" href = "https://gymnasium.farama.org/environments/classic_control/acrobot.html" / >
< link rel = "shortcut icon" href = "../../../_static/favicon.png" / > < meta name = "generator" content = "sphinx-5.1.1, furo 2022.06.21" / >
< title > Acrobot - Gymnasium Documentation< / title >
< link rel = "stylesheet" type = "text/css" href = "../../../_static/pygments.css" / >
< link rel = "stylesheet" type = "text/css" href = "../../../_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" / >
< link rel = "stylesheet" type = "text/css" href = "../../../_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" / >
< link rel = "stylesheet" type = "text/css" href = "../../../_static/css/custom.css" / >
< style >
body {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
}
< / style > < / head >
< body >
< script >
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
< / script >
< svg xmlns = "http://www.w3.org/2000/svg" style = "display: none;" >
< symbol id = "svg-toc" viewBox = "0 0 24 24" >
< title > Contents< / title >
< svg stroke = "currentColor" fill = "currentColor" stroke-width = "0" viewBox = "0 0 1024 1024" >
< path d = "M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z" / >
< / svg >
< / symbol >
< symbol id = "svg-menu" viewBox = "0 0 24 24" >
< title > Menu< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
< line x1 = "3" y1 = "12" x2 = "21" y2 = "12" > < / line >
< line x1 = "3" y1 = "6" x2 = "21" y2 = "6" > < / line >
< line x1 = "3" y1 = "18" x2 = "21" y2 = "18" > < / line >
< / svg >
< / symbol >
< symbol id = "svg-arrow-right" viewBox = "0 0 24 24" >
< title > Expand< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
< polyline points = "9 18 15 12 9 6" > < / polyline >
< / svg >
< / symbol >
< symbol id = "svg-sun" viewBox = "0 0 24 24" >
< title > Light mode< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
< circle cx = "12" cy = "12" r = "5" > < / circle >
< line x1 = "12" y1 = "1" x2 = "12" y2 = "3" > < / line >
< line x1 = "12" y1 = "21" x2 = "12" y2 = "23" > < / line >
< line x1 = "4.22" y1 = "4.22" x2 = "5.64" y2 = "5.64" > < / line >
< line x1 = "18.36" y1 = "18.36" x2 = "19.78" y2 = "19.78" > < / line >
< line x1 = "1" y1 = "12" x2 = "3" y2 = "12" > < / line >
< line x1 = "21" y1 = "12" x2 = "23" y2 = "12" > < / line >
< line x1 = "4.22" y1 = "19.78" x2 = "5.64" y2 = "18.36" > < / line >
< line x1 = "18.36" y1 = "5.64" x2 = "19.78" y2 = "4.22" > < / line >
< / svg >
< / symbol >
< symbol id = "svg-moon" viewBox = "0 0 24 24" >
< title > Dark mode< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
< path stroke = "none" d = "M0 0h24v24H0z" fill = "none" / >
< path d = "M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" / >
< / svg >
< / symbol >
< symbol id = "svg-sun-half" viewBox = "0 0 24 24" >
< title > Auto light/dark mode< / title >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
< path stroke = "none" d = "M0 0h24v24H0z" fill = "none" / >
< circle cx = "12" cy = "12" r = "9" / >
< path d = "M13 12h5" / >
< path d = "M13 15h4" / >
< path d = "M13 18h1" / >
< path d = "M13 9h4" / >
< path d = "M13 6h1" / >
< / svg >
< / symbol >
< / svg >
< input type = "checkbox" class = "sidebar-toggle" name = "__navigation" id = "__navigation" >
< input type = "checkbox" class = "sidebar-toggle" name = "__toc" id = "__toc" >
< label class = "overlay sidebar-overlay" for = "__navigation" >
< div class = "visually-hidden" > Hide navigation sidebar< / div >
< / label >
< label class = "overlay toc-overlay" for = "__toc" >
< div class = "visually-hidden" > Hide table of contents sidebar< / div >
< / label >
< div class = "page" >
< header class = "mobile-header" >
< div class = "header-left" >
< label class = "nav-overlay-icon" for = "__navigation" >
< div class = "visually-hidden" > Toggle site navigation sidebar< / div >
< i class = "icon" > < svg > < use href = "#svg-menu" > < / use > < / svg > < / i >
< / label >
< / div >
< div class = "header-center" >
< a href = "../../../" > < div class = "brand" > Gymnasium Documentation< / div > < / a >
< / div >
< div class = "header-right" >
< div class = "theme-toggle-container theme-toggle-header" >
< button class = "theme-toggle" >
< div class = "visually-hidden" > Toggle Light / Dark / Auto color theme< / div >
< svg class = "theme-icon-when-auto" > < use href = "#svg-sun-half" > < / use > < / svg >
< svg class = "theme-icon-when-dark" > < use href = "#svg-moon" > < / use > < / svg >
< svg class = "theme-icon-when-light" > < use href = "#svg-sun" > < / use > < / svg >
< / button >
< / div >
< label class = "toc-overlay-icon toc-header-icon" for = "__toc" >
< div class = "visually-hidden" > Toggle table of contents sidebar< / div >
< i class = "icon" > < svg > < use href = "#svg-toc" > < / use > < / svg > < / i >
< / label >
< / div >
< / header >
< aside class = "sidebar-drawer" >
< div class = "sidebar-container" >
< div class = "sidebar-sticky" > < a class = "sidebar-brand" href = "../../../" >
< div class = "sidebar-logo-container" >
< img class = "sidebar-logo only-light" src = "../../../_static/img/gymnasium_black.svg" alt = "Light Logo" / >
< img class = "sidebar-logo only-dark" src = "../../../_static/img/gymnasium_white.svg" alt = "Dark Logo" / >
< / div >
< span class = "sidebar-brand-text" > Gymnasium Documentation< / span >
< / a > < form class = "sidebar-search-container" method = "get" action = "../../../search/" role = "search" >
< input class = "sidebar-search" placeholder = Search name = "q" aria-label = "Search" >
< input type = "hidden" name = "check_keywords" value = "yes" >
< input type = "hidden" name = "area" value = "default" >
< / form >
< div id = "searchbox" > < / div > < div class = "sidebar-scroll" > < div class = "sidebar-tree" >
< p class = "caption" role = "heading" > < span class = "caption-text" > Introduction< / span > < / p >
< ul >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../content/basic_usage/" > Basic Usage< / a > < / li >
< / ul >
< p class = "caption" role = "heading" > < span class = "caption-text" > API< / span > < / p >
< ul >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../api/core/" > Core< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../api/spaces/" > Spaces< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../api/spaces_utils/" > Spaces Utils< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../api/wrappers/" > Wrappers< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../api/vector/" > Vector< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../api/utils/" > Utils< / a > < / li >
< / ul >
< p class = "caption" role = "heading" > < span class = "caption-text" > Environments< / span > < / p >
< ul class = "current" >
< li class = "toctree-l1 has-children" > < a class = "reference internal" href = "../../atari/" > Atari< / a > < input class = "toctree-checkbox" id = "toctree-checkbox-1" name = "toctree-checkbox-1" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-1" > < div class = "visually-hidden" > Toggle child pages in navigation< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/adventure/" > Adventure< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/air_raid/" > Air Raid< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/alien/" > Alien< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/amidar/" > Amidar< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/assault/" > Assault< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/asterix/" > Asterix< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/asteroids/" > Asteroids< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/atlantis/" > Atlantis< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/bank_heist/" > Bank Heist< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/battle_zone/" > Battle Zone< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/beam_rider/" > Beam Rider< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/berzerk/" > Berzerk< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/bowling/" > Bowling< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/boxing/" > Boxing< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/breakout/" > Breakout< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/carnival/" > Carnival< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/centipede/" > Centipede< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/chopper_command/" > Chopper Command< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/crazy_climber/" > Crazy Climber< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/defender/" > Defender< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/demon_attack/" > Demon Attack< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/double_dunk/" > Double Dunk< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/elevator_action/" > Elevator Action< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/enduro/" > Enduro< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/fishing_derby/" > FishingDerby< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/freeway/" > Freeway< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/frostbite/" > Frostbite< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/gopher/" > Gopher< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/gravitar/" > Gravitar< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/hero/" > Hero< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/ice_hockey/" > IceHockey< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/jamesbond/" > Jamesbond< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/journey_escape/" > JourneyEscape< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/kangaroo/" > Kangaroo< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/krull/" > Krull< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/kung_fu_master/" > Kung Fu Master< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/montezuma_revenge/" > Montezuma Revenge< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/ms_pacman/" > Ms Pacman< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/name_this_game/" > Name This Game< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/phoenix/" > Phoenix< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/pitfall/" > Pitfall< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/pong/" > Pong< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/pooyan/" > Pooyan< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/private_eye/" > PrivateEye< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/qbert/" > Qbert< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/riverraid/" > Riverraid< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/road_runner/" > Road Runner< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/robotank/" > Robot Tank< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/seaquest/" > Seaquest< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/skiing/" > Skiings< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/solaris/" > Solaris< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/space_invaders/" > SpaceInvaders< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/star_gunner/" > StarGunner< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/tennis/" > Tennis< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/time_pilot/" > TimePilot< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/tutankham/" > Tutankham< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/up_n_down/" > Up n’ Down< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/venture/" > Venture< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/video_pinball/" > Video Pinball< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/wizard_of_wor/" > Wizard of Wor< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../atari/zaxxon/" > Zaxxon< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l1 has-children" > < a class = "reference internal" href = "../../mujoco/" > MuJoCo< / a > < input class = "toctree-checkbox" id = "toctree-checkbox-2" name = "toctree-checkbox-2" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-2" > < div class = "visually-hidden" > Toggle child pages in navigation< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/ant/" > Ant< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/half_cheetah/" > Half Cheetah< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/hopper/" > Hopper< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/humanoid_standup/" > Humanoid Standup< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/humanoid/" > Humanoid< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/inverted_double_pendulum/" > Inverted Double Pendulum< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/inverted_pendulum/" > Inverted Pendulum< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/reacher/" > Reacher< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/swimmer/" > Swimmer< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../mujoco/walker2d/" > Walker2D< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l1 has-children" > < a class = "reference internal" href = "../../toy_text/" > Toy Text< / a > < input class = "toctree-checkbox" id = "toctree-checkbox-3" name = "toctree-checkbox-3" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-3" > < div class = "visually-hidden" > Toggle child pages in navigation< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../toy_text/blackjack/" > Blackjack< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../toy_text/taxi/" > Taxi< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../toy_text/cliff_walking/" > Cliff Walking< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../toy_text/frozen_lake/" > Frozen Lake< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l1 current has-children" > < a class = "reference internal" href = "../" > Classic Control< / a > < input checked = "" class = "toctree-checkbox" id = "toctree-checkbox-4" name = "toctree-checkbox-4" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-4" > < div class = "visually-hidden" > Toggle child pages in navigation< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul class = "current" >
< li class = "toctree-l2 current current-page" > < a class = "current reference internal" href = "#" > Acrobot< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../cart_pole/" > Cart Pole< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../mountain_car_continuous/" > Mountain Car Continuous< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../mountain_car/" > Mountain Car< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../pendulum/" > Pendulum< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l1 has-children" > < a class = "reference internal" href = "../../box2d/" > Box2D< / a > < input class = "toctree-checkbox" id = "toctree-checkbox-5" name = "toctree-checkbox-5" role = "switch" type = "checkbox" / > < label for = "toctree-checkbox-5" > < div class = "visually-hidden" > Toggle child pages in navigation< / div > < i class = "icon" > < svg > < use href = "#svg-arrow-right" > < / use > < / svg > < / i > < / label > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../box2d/bipedal_walker/" > Bipedal Walker< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../box2d/car_racing/" > Car Racing< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../box2d/lunar_lander/" > Lunar Lander< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../third_party_environments/" > Third Party Environments< / a > < / li >
< / ul >
< p class = "caption" role = "heading" > < span class = "caption-text" > Tutorials< / span > < / p >
< ul >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../content/environment_creation/" > Make your own custom environment< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../content/vectorising/" > Vectorising your environments< / a > < / li >
< / ul >
< p class = "caption" role = "heading" > < span class = "caption-text" > Development< / span > < / p >
< ul >
< li class = "toctree-l1" > < a class = "reference external" href = "https://github.com/Farama-Foundation/gymnasium" > Github< / a > < / li >
< li class = "toctree-l1" > < a class = "reference external" href = "https://farama.org/donations" > Donate< / a > < / li >
< / ul >
< / div >
< / div >
< / div >
< / div >
< / aside >
< div class = "main" >
< div class = "content" >
< div class = "article-container" >
< a href = "#" class = "back-to-top muted-link" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >
< path d = "M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z" > < / path >
< / svg >
< span > Back to top< / span >
< / a >
< div class = "content-icon-container" >
< div class = "theme-toggle-container theme-toggle-content" >
< button class = "theme-toggle" >
< div class = "visually-hidden" > Toggle Light / Dark / Auto color theme< / div >
< svg class = "theme-icon-when-auto" > < use href = "#svg-sun-half" > < / use > < / svg >
< svg class = "theme-icon-when-dark" > < use href = "#svg-moon" > < / use > < / svg >
< svg class = "theme-icon-when-light" > < use href = "#svg-sun" > < / use > < / svg >
< / button >
< / div >
< label class = "toc-overlay-icon toc-content-icon" for = "__toc" >
< div class = "visually-hidden" > Toggle table of contents sidebar< / div >
< i class = "icon" > < svg > < use href = "#svg-toc" > < / use > < / svg > < / i >
< / label >
< / div >
< article role = "main" >
< section id = "acrobot" >
< h1 > Acrobot< a class = "headerlink" href = "#acrobot" title = "Permalink to this heading" > #< / a > < / h1 >
< figure class = "align-default" id = "id1" >
< a class = "reference internal image-reference" href = "../../../_images/acrobot.gif" > < img alt = "../../../_images/acrobot.gif" src = "../../../_images/acrobot.gif" style = "width: 200px;" / > < / a >
< / figure >
2022-09-15 08:51:21 +00:00
< p > This environment is part of the< a href = '..' > Classic Control environments< / a > .Please read that page first for general information.< / p >
2022-09-13 19:29:14 +00:00
< div class = "table-wrapper colwidths-auto docutils container" >
< table class = "docutils align-default" >
< thead >
< tr class = "row-odd" > < th class = "head" > < p > < / p > < / th >
< th class = "head" > < p > < / p > < / th >
< / tr >
< / thead >
< tbody >
< tr class = "row-even" > < td > < p > Action Space< / p > < / td >
< td > < p > Discrete(3)< / p > < / td >
< / tr >
< tr class = "row-odd" > < td > < p > Observation Shape< / p > < / td >
< td > < p > (6,)< / p > < / td >
< / tr >
< tr class = "row-even" > < td > < p > Observation High< / p > < / td >
< td > < p > [ 1. 1. 1. 1. 12.57 28.27]< / p > < / td >
< / tr >
< tr class = "row-odd" > < td > < p > Observation Low< / p > < / td >
< td > < p > [ -1. -1. -1. -1. -12.57 -28.27]< / p > < / td >
< / tr >
< tr class = "row-even" > < td > < p > Import< / p > < / td >
< td > < p > < code class = "docutils literal notranslate" > < span class = "pre" > gymnasium.make(" Acrobot-v1" )< / span > < / code > < / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< section id = "description" >
< h2 > Description< a class = "headerlink" href = "#description" title = "Permalink to this heading" > #< / a > < / h2 >
< p > The Acrobot environment is based on Sutton’ s work in
< a class = "reference external" href = "https://papers.nips.cc/paper/1995/hash/8f1d43620bc6bb580df6e80b0dc05c48-Abstract.html" > “Generalization in Reinforcement Learning: Successful Examples Using Sparse Coarse Coding”< / a >
and < a class = "reference external" href = "http://www.incompleteideas.net/book/the-book-2nd.html" > Sutton and Barto’ s book< / a > .
The system consists of two links connected linearly to form a chain, with one end of
the chain fixed. The joint between the two links is actuated. The goal is to apply
torques on the actuated joint to swing the free end of the linear chain above a
given height while starting from the initial state of hanging downwards.< / p >
< p > As seen in the < strong > Gif< / strong > : two blue links connected by two green joints. The joint in
between the two links is actuated. The goal is to swing the free end of the outer-link
to reach the target height (black horizontal line above system) by applying torque on
the actuator.< / p >
< / section >
< section id = "action-space" >
< h2 > Action Space< a class = "headerlink" href = "#action-space" title = "Permalink to this heading" > #< / a > < / h2 >
< p > The action is discrete, deterministic, and represents the torque applied on the actuated
joint between the two links.< / p >
< div class = "table-wrapper colwidths-auto docutils container" >
< table class = "docutils align-default" >
< thead >
< tr class = "row-odd" > < th class = "head" > < p > Num< / p > < / th >
< th class = "head" > < p > Action< / p > < / th >
< th class = "head" > < p > Unit< / p > < / th >
< / tr >
< / thead >
< tbody >
< tr class = "row-even" > < td > < p > 0< / p > < / td >
< td > < p > apply -1 torque to the actuated joint< / p > < / td >
< td > < p > torque (N m)< / p > < / td >
< / tr >
< tr class = "row-odd" > < td > < p > 1< / p > < / td >
< td > < p > apply 0 torque to the actuated joint< / p > < / td >
< td > < p > torque (N m)< / p > < / td >
< / tr >
< tr class = "row-even" > < td > < p > 2< / p > < / td >
< td > < p > apply 1 torque to the actuated joint< / p > < / td >
< td > < p > torque (N m)< / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< / section >
< section id = "observation-space" >
< h2 > Observation Space< a class = "headerlink" href = "#observation-space" title = "Permalink to this heading" > #< / a > < / h2 >
< p > The observation is a < code class = "docutils literal notranslate" > < span class = "pre" > ndarray< / span > < / code > with shape < code class = "docutils literal notranslate" > < span class = "pre" > (6,)< / span > < / code > that provides information about the
two rotational joint angles as well as their angular velocities:< / p >
< div class = "table-wrapper colwidths-auto docutils container" >
< table class = "docutils align-default" >
< thead >
< tr class = "row-odd" > < th class = "head" > < p > Num< / p > < / th >
< th class = "head" > < p > Observation< / p > < / th >
< th class = "head" > < p > Min< / p > < / th >
< th class = "head" > < p > Max< / p > < / th >
< / tr >
< / thead >
< tbody >
< tr class = "row-even" > < td > < p > 0< / p > < / td >
< td > < p > Cosine of < code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > < / p > < / td >
< td > < p > -1< / p > < / td >
< td > < p > 1< / p > < / td >
< / tr >
< tr class = "row-odd" > < td > < p > 1< / p > < / td >
< td > < p > Sine of < code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > < / p > < / td >
< td > < p > -1< / p > < / td >
< td > < p > 1< / p > < / td >
< / tr >
< tr class = "row-even" > < td > < p > 2< / p > < / td >
< td > < p > Cosine of < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > < / p > < / td >
< td > < p > -1< / p > < / td >
< td > < p > 1< / p > < / td >
< / tr >
< tr class = "row-odd" > < td > < p > 3< / p > < / td >
< td > < p > Sine of < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > < / p > < / td >
< td > < p > -1< / p > < / td >
< td > < p > 1< / p > < / td >
< / tr >
< tr class = "row-even" > < td > < p > 4< / p > < / td >
< td > < p > Angular velocity of < code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > < / p > < / td >
< td > < p > ~ -12.567 (-4 * pi)< / p > < / td >
< td > < p > ~ 12.567 (4 * pi)< / p > < / td >
< / tr >
< tr class = "row-odd" > < td > < p > 5< / p > < / td >
< td > < p > Angular velocity of < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > < / p > < / td >
< td > < p > ~ -28.274 (-9 * pi)< / p > < / td >
< td > < p > ~ 28.274 (9 * pi)< / p > < / td >
< / tr >
< / tbody >
< / table >
< / div >
< p > where< / p >
< ul class = "simple" >
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > is the angle of the first joint, where an angle of 0 indicates the first link is pointing directly
downwards.< / p > < / li >
< li > < p > < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > is < em > < strong > relative to the angle of the first link.< / strong > < / em >
An angle of 0 corresponds to having the same angle between the two links.< / p > < / li >
< / ul >
< p > The angular velocities of < code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > and < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > are bounded at ±4π, and ±9π rad/s respectively.
A state of < code class = "docutils literal notranslate" > < span class = "pre" > [1,< / span > < span class = "pre" > 0,< / span > < span class = "pre" > 1,< / span > < span class = "pre" > 0,< / span > < span class = "pre" > ...,< / span > < span class = "pre" > ...]< / span > < / code > indicates that both links are pointing downwards.< / p >
< / section >
< section id = "rewards" >
< h2 > Rewards< a class = "headerlink" href = "#rewards" title = "Permalink to this heading" > #< / a > < / h2 >
< p > The goal is to have the free end reach a designated target height in as few steps as possible,
and as such all steps that do not reach the goal incur a reward of -1.
Achieving the target height results in termination with a reward of 0. The reward threshold is -100.< / p >
< / section >
< section id = "starting-state" >
< h2 > Starting State< a class = "headerlink" href = "#starting-state" title = "Permalink to this heading" > #< / a > < / h2 >
< p > Each parameter in the underlying state (< code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > , < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > , and the two angular velocities) is initialized
uniformly between -0.1 and 0.1. This means both links are pointing downwards with some initial stochasticity.< / p >
< / section >
< section id = "episode-end" >
< h2 > Episode End< a class = "headerlink" href = "#episode-end" title = "Permalink to this heading" > #< / a > < / h2 >
< p > The episode ends if one of the following occurs:< / p >
< ol class = "arabic simple" >
< li > < p > Termination: The free end reaches the target height, which is constructed as:
< code class = "docutils literal notranslate" > < span class = "pre" > -cos(theta1)< / span > < span class = "pre" > -< / span > < span class = "pre" > cos(theta2< / span > < span class = "pre" > +< / span > < span class = "pre" > theta1)< / span > < span class = "pre" > > < / span > < span class = "pre" > 1.0< / span > < / code > < / p > < / li >
< li > < p > Truncation: Episode length is greater than 500 (200 for v0)< / p > < / li >
< / ol >
< / section >
< section id = "arguments" >
< h2 > Arguments< a class = "headerlink" href = "#arguments" title = "Permalink to this heading" > #< / a > < / h2 >
< p > No additional arguments are currently supported.< / p >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > env< / span > < span class = "o" > =< / span > < span class = "n" > gymnasium< / span > < span class = "o" > .< / span > < span class = "n" > make< / span > < span class = "p" > (< / span > < span class = "s1" > ' Acrobot-v1' < / span > < span class = "p" > )< / span >
< / pre > < / div >
< / div >
< p > By default, the dynamics of the acrobot follow those described in Sutton and Barto’ s book
< a class = "reference external" href = "http://incompleteideas.net/book/11/node4.html" > Reinforcement Learning: An Introduction< / a > .
However, a < code class = "docutils literal notranslate" > < span class = "pre" > book_or_nips< / span > < / code > parameter can be modified to change the pendulum dynamics to those described
in the original < a class = "reference external" href = "https://papers.nips.cc/paper/1995/hash/8f1d43620bc6bb580df6e80b0dc05c48-Abstract.html" > NeurIPS paper< / a > .< / p >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "c1" > # To change the dynamics as described above< / span >
< span class = "n" > env< / span > < span class = "o" > .< / span > < span class = "n" > env< / span > < span class = "o" > .< / span > < span class = "n" > book_or_nips< / span > < span class = "o" > =< / span > < span class = "s1" > ' nips' < / span >
< / pre > < / div >
< / div >
2022-09-15 08:51:21 +00:00
< p > See the following note for details:< / p >
2022-09-13 19:29:14 +00:00
< blockquote >
< div > < p > The dynamics equations were missing some terms in the NIPS paper which
are present in the book. R. Sutton confirmed in personal correspondence
that the experimental results shown in the paper and the book were
generated with the equations shown in the book.
However, there is the option to run the domain with the paper equations
by setting < code class = "docutils literal notranslate" > < span class = "pre" > book_or_nips< / span > < span class = "pre" > =< / span > < span class = "pre" > 'nips'< / span > < / code > < / p >
< / div > < / blockquote >
< / section >
< section id = "version-history" >
< h2 > Version History< a class = "headerlink" href = "#version-history" title = "Permalink to this heading" > #< / a > < / h2 >
< ul class = "simple" >
< li > < p > v1: Maximum number of steps increased from 200 to 500. The observation space for v0 provided direct readings of
< code class = "docutils literal notranslate" > < span class = "pre" > theta1< / span > < / code > and < code class = "docutils literal notranslate" > < span class = "pre" > theta2< / span > < / code > in radians, having a range of < code class = "docutils literal notranslate" > < span class = "pre" > [-pi,< / span > < span class = "pre" > pi]< / span > < / code > . The v1 observation space as described here provides the
sine and cosine of each angle instead.< / p > < / li >
< li > < p > v0: Initial versions release (1.0.0) (removed from gymnasium for v1)< / p > < / li >
< / ul >
< / section >
< section id = "references" >
< h2 > References< a class = "headerlink" href = "#references" title = "Permalink to this heading" > #< / a > < / h2 >
< ul class = "simple" >
< li > < p > Sutton, R. S. (1996). Generalization in Reinforcement Learning: Successful Examples Using Sparse Coarse Coding.
In D. Touretzky, M. C. Mozer, & M. Hasselmo (Eds.), Advances in Neural Information Processing Systems (Vol. 8).
MIT Press. https://proceedings.neurips.cc/paper/1995/file/8f1d43620bc6bb580df6e80b0dc05c48-Paper.pdf< / p > < / li >
< li > < p > Sutton, R. S., Barto, A. G. (2018 ). Reinforcement Learning: An Introduction. The MIT Press.< / p > < / li >
< / ul >
< / section >
< / section >
< / article >
< / div >
< footer >
< div class = "related-pages" >
< a class = "next-page" href = "../cart_pole/" >
< div class = "page-info" >
< div class = "context" >
< span > Next< / span >
< / div >
< div class = "title" > Cart Pole< / div >
< / div >
< svg class = "furo-related-icon" > < use href = "#svg-arrow-right" > < / use > < / svg >
< / a >
< / div >
< div class = "bottom-of-page" >
< div class = "left-details" >
< div class = "copyright" >
Copyright © 2022, Farama Foundation
< / div >
Made with < a href = "https://www.sphinx-doc.org/" > Sphinx< / a > and < a class = "muted-link" href = "https://pradyunsg.me" > @pradyunsg< / a > 's
< a href = "https://github.com/pradyunsg/furo" > Furo< / a >
< / div >
< div class = "right-details" >
< div class = "icons" >
< / div >
< / div >
< / div >
< / footer >
< / div >
< aside class = "toc-drawer" >
< div class = "toc-sticky toc-scroll" >
< div class = "toc-title-container" >
< span class = "toc-title" >
On this page
< / span >
< / div >
< div class = "toc-tree-container" >
< div class = "toc-tree" >
< ul >
< li > < a class = "reference internal" href = "#" > Acrobot< / a > < ul >
< li > < a class = "reference internal" href = "#description" > Description< / a > < / li >
< li > < a class = "reference internal" href = "#action-space" > Action Space< / a > < / li >
< li > < a class = "reference internal" href = "#observation-space" > Observation Space< / a > < / li >
< li > < a class = "reference internal" href = "#rewards" > Rewards< / a > < / li >
< li > < a class = "reference internal" href = "#starting-state" > Starting State< / a > < / li >
< li > < a class = "reference internal" href = "#episode-end" > Episode End< / a > < / li >
< li > < a class = "reference internal" href = "#arguments" > Arguments< / a > < / li >
< li > < a class = "reference internal" href = "#version-history" > Version History< / a > < / li >
< li > < a class = "reference internal" href = "#references" > References< / a > < / li >
< / ul >
< / li >
< / ul >
< / div >
< / div >
< / div >
< / aside >
< / div >
< / div > < script data-url_root = "../../../" id = "documentation_options" src = "../../../_static/documentation_options.js" > < / script >
< script src = "../../../_static/jquery.js" > < / script >
< script src = "../../../_static/underscore.js" > < / script >
< script src = "../../../_static/_sphinx_javascript_frameworks_compat.js" > < / script >
< script src = "../../../_static/doctools.js" > < / script >
< script src = "../../../_static/scripts/furo.js" > < / script >
< script >
(() => {
if (!localStorage.getItem("shownCookieAlert")) {
const boxElem = document.createElement("div");
boxElem.classList.add("cookie_alert");
const containerElem = document.createElement("div");
containerElem.classList.add("cookie_container");
const textElem = document.createElement("p");
textElem.innerHTML = `This page uses < a href = "https://analytics.google.com/" >
Google Analytics< / a > to collect statistics. You can disable it by blocking
the JavaScript coming from www.google-analytics.com.`;
containerElem.appendChild(textElem);
const closeBtn = document.createElement("button");
closeBtn.innerHTML = `<?xml version="1.0" ?> < svg viewBox = "0 0 32 32" xmlns = "http://www.w3.org/2000/svg" > < defs > < style > . cls-1 { fill : none ; stroke : #000 ; stroke-linecap : round ; stroke-linejoin : round ; stroke-width : 2 px ; } < / style > < / defs > < title / > < g id = "cross" > < line class = "cls-1" x1 = "7" x2 = "25" y1 = "7" y2 = "25" / > < line class = "cls-1" x1 = "7" x2 = "25" y1 = "25" y2 = "7" / > < / g > < / svg > `
closeBtn.onclick = () => {
localStorage.setItem("shownCookieAlert", "true");
boxElem.style.display = "none";
}
containerElem.appendChild(closeBtn);
boxElem.appendChild(containerElem);
document.body.appendChild(boxElem);
}
})()
< / script >
<!-- Google tag (gtag.js) -->
< script async src = "https://www.googletagmanager.com/gtag/js?id=G-JGXSLW7N06" > < / script >
< script >
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-JGXSLW7N06');
< / script > < / body >
< / html >