Документация Engee

ReinforcementLearningEnvironments.jl

Встроенные среды

Traits12345678910111213
ActionStyleMinimalActionSet
FullActionSet
ChanceStyleStochastic
Deterministic
ExplicitStochastic
DefaultStateStyleObservation
InformationSet
DynamicStyleSimultaneous
Sequential
InformationStylePerfectInformation
ImperfectInformation
NumAgentStyleMultiAgent
SingleAgent
RewardStyleTerminalReward
StepReward
StateStyleObservation
InformationSet
InternalState
UtilityStyleGeneralSum
ZeroSum
ConstantSum
IdenticalUtility

Примечание. Многие признаки взяты из набора данных OpenSpiel.

Сторонние среды

Имя среды Имя зависимого пакета Описание

AtariEnv

ArcadeLearningEnvironment.jl

GymEnv

PyCall.jl

OpenSpielEnv

OpenSpiel.jl

SnakeGameEnv

SnakeGames.jl

SingleAgent/Multi-Agent, FullActionSet/MinimalActionSet

#list-of-environments

GridWorlds.jl

Среды в этом пакете поддерживают интерфейсы, определенные в RLBase.

# ReinforcementLearningEnvironments.KUHN_POKER_REWARD_TABLEConstant

Kuhn poker tree

# ReinforcementLearningEnvironments.ActionTransformedEnvMethod

ActionTransformedEnv(env;action_space_mapping=identity, action_mapping=identity)

action_space_mapping применяется к action_space(env) и legal_action_space(env). action_mapping применяется к действию action перед его подачей в env.

# ReinforcementLearningEnvironments.BitFlippingEnvType

В среде с инвертированием битов имеется n битов. При выполнении i-го из n действий инвертируется i-й бит состояния. В каждом эпизоде выборка производится равномерно как из начального, так и из конечного состояния.

Назначение этой среды описывается в статье Hindsight Experience Replay.

# ReinforcementLearningEnvironments.CartPoleEnvMethod

CartPoleEnv(;kwargs...)

Именованные аргументы

  • T = Float64

  • continuous = false

  • rng = Random.default_rng()

  • gravity = T(9.8)

  • masscart = T(1.0)

  • masspole = T(0.1)

  • halflength = T(0.5)

  • forcemag = T(10.0)

  • max_steps = 200

  • dt = 0.02

  • thetathreshold = 12.0 # degrees

  • xthreshold = 2.4`

# ReinforcementLearningEnvironments.DefaultStateStyleEnvMethod

DefaultStateStyleEnv{S}(env::E)

Сбрасывает результат DefaultStateStyle, не изменяя исходное поведение.

# ReinforcementLearningEnvironments.GraphShortestPathEnvType

GraphShortestPathEnv([rng]; n=10, sparsity=0.1, max_steps=10)

Значится под номером A.3 в статье Decision Transformer:https://arxiv.org/abs/2106.01345[]Reinforcement Learning via Sequence Modeling.

Более развернуто разберем пример, приведенный во введении. Задача состоит в нахождении кратчайшего пути на фиксированном направленном графе. Ее можно сформулировать как задачу MDP с равной нулю наградой, когда агент находится в целевом узле, и наградой −1 в противном случае. Наблюдением является целочисленный индекс узла графа, в котором находится агент. Действием является целочисленный индекс узла графа, к которому нужно перейти на следующем шаге. Динамика переходов переводит агент в индекс узла действия, если в графе есть ребро; в противном случае агент остается в предыдущем узле. Возвраты к старту в этой задаче соответствуют отрицательным длинам путей, а их максимизация соответствует генерированию кратчайших путей.

# ReinforcementLearningEnvironments.KuhnPokerEnvMethod

KuhnPokerEnv()

Более подробное описание см. здесь.

Здесь демонстрируется написание типичной игры с ZERO_SUM и IMPERFECT_INFORMATION. В реализации имеется явный игрок CHANCE_PLAYER.

TODO: добавить общедоступное состояние для SPECTATOR. Справка: https://arxiv.org/abs/1906.11110

# ReinforcementLearningEnvironments.MaxTimeoutEnvMethod

MaxTimeoutEnv(env::E, max_t::Int; current_t::Int = 1)

Предписывает функции is_terminated(env) вернуть значение true после max_t взаимодействий.

# ReinforcementLearningEnvironments.MontyHallEnvMethod

MontyHallEnv(;rng=Random.default_rng())

Цитата из Википедии:

Представьте, что вы стали участником игры, в которой вам нужно выбрать одну из трех дверей. За одной из дверей находится автомобиль, за двумя другими дверями — козы. Вы выбираете одну из дверей, например номер 1, после этого ведущий, который знает, что находится за дверями, открывает одну из оставшихся дверей, например номер 3, за которой находится коза. После этого он спрашивает вас: «Не желаете ли вы изменить свой выбор на дверь номер 2?» Увеличатся ли ваши шансы выиграть автомобиль, если вы измените свой выбор?

Здесь мы представим первую среду в стиле FULL_ACTION_SET.

# ReinforcementLearningEnvironments.MountainCarEnvMethod

MountainCarEnv(;kwargs...)

Именованные аргументы

  • T = Float64

  • continuous = false

  • rng = Random.default_rng()

  • min_pos = -1.2

  • max_pos = 0.6

  • max_speed = 0.07

  • goal_pos = 0.5

  • max_steps = 200

  • goal_velocity = 0.0

  • power = 0.001

  • gravity = 0.0025

# ReinforcementLearningEnvironments.MultiArmBanditsEnvMethod

MultiArmBanditsEnv(;true_reward=0., k = 10,rng=Random.default_rng())

true_reward — ожидаемая награда. k — количество рук. В статье о многоруком бандите приводится более подробное объяснение.

Эта игра разовая. Выполнение среды завершается сразу после совершения действия. На этом примере демонстрируется написание настраиваемой среды с минимальным набором интерфейсов.

# ReinforcementLearningEnvironments.PendulumEnvMethod

PendulumEnv(;kwargs...)

Именованные аргументы

  • T = Float64

  • max_speed = T(8)

  • max_torque = T(2)

  • g = T(10)

  • m = T(1)

  • l = T(1)

  • dt = T(0.05)

  • max_steps = 200

  • continuous::Bool = true

  • n_actions::Int = 3

  • rng = Random.default_rng()

# ReinforcementLearningEnvironments.PendulumNonInteractiveEnvType

Неинтерактивная среда маятника.

Принимает только действия со значением nothing, из-за чего система моделируется один временной шаг. Устанавливает env.done в значение true по достижении maximum_time. Выполняет сброс в случайное положение и импульс. Всегда возвращает нулевые награды.

Полезно для отладки и разработки, особенно в обучении с подкреплением на основе модели.

# ReinforcementLearningEnvironments.PendulumNonInteractiveEnvMethod

PendulumNonInteractiveEnv(;kwargs...)

Именованные аргументы

  • float_type = Float64

  • gravity = 9.8

  • length = 2.0

  • mass = 1.0

  • step_size = 0.01

  • maximum_time = 10.0

  • rng = Random.default_rng()

# ReinforcementLearningEnvironments.PigEnvMethod

PigEnv(;n_players=2)

Объяснение этой игры см. в Википедии.

На этом примере демонстрируется написание игры с более чем двумя игроками.

# ReinforcementLearningEnvironments.RandomWalk1DType

RandomWalk1D(;rewards=-1. => 1.0, N=7, start_pos=(N+1) ÷ 2, actions=[-1,1])

Агент устанавливается в положение start_pos и может перемещаться влево или вправо (шаг указывается в действиях). Игра завершается, когда агент достигает одного из концов и получает соответствующую награду.

Сравнение с MultiArmBanditsEnv:

  1. Пространство состояний более сложное (хотя и не намного).

  2. Это последовательная игра со множеством шагов действий.

  3. Эта игра детерминированная, а не стохастическая.

# ReinforcementLearningEnvironments.RewardOverriddenEnvType

RewardOverriddenEnv(env, f)

Применяет функцию f к env для генерирования пользовательской награды.

# ReinforcementLearningEnvironments.RewardTransformedEnvType

RewardTransformedEnv(env, f)

Применяет функцию f к reward(env).

# ReinforcementLearningEnvironments.RockPaperScissorsEnvType

RockPaperScissorsEnv()

Камень, ножницы, бумага — это одновременная игра с нулевой суммой.

# ReinforcementLearningEnvironments.StateCachedEnvType

Кэширует состояние, так что state(env) всегда возвращает одинаковый результат до следующего взаимодействия с env. Полезность этой функции объясняется тем, что некоторые среды сохраняют состояние во время каждого state(env). Например: StateTransformedEnv(StackFrames(...)).

# ReinforcementLearningEnvironments.StateTransformedEnvMethod

StateTransformedEnv(env; state_mapping=identity, state_space_mapping=identity)

state_mapping применяется к исходному состоянию при вызове state(env), и, аналогичным образом, state_space_mapping применяется при вызове state_space(env).

# ReinforcementLearningEnvironments.StockTradingEnvMethod

StockTradingEnv(;kw...)

Эта среда изначально была представлена в работе Deep Reinforcement Learning for Automated Stock Trading:https://github.com/AI4Finance-Foundation/FinRL-Trading[]An Ensemble Strategy.

Именованные аргументы

  • initial_account_balance=1_000_000.

# ReinforcementLearningEnvironments.TicTacToeEnvMethod

TicTacToeEnv()

Создает экземпляр среды TicTacToe.

# ReinforcementLearningEnvironments.TigerProblemEnvType

TigerProblemEnv(;rng=Random>GLOBAL_RNG)

На примере задачи о тигре здесь демонстрируется решение задачи POMDP.

# ReinforcementLearningEnvironments.TinyHanabiEnvMethod

TinyHanabiEnv()

# Random.seed!Method

Среда многорукого бандита является стохастической. Итоговая награда может каждый раз отличаться, даже если были предприняты одни и те же действия. Поэтому для таких сред следует реализовать Random.seed!(env), чтобы повысить воспроизводимость, не создавая новый экземпляр того же генератора rng.

# ReinforcementLearningBase.act!Method

В нашей конфигурации результат выполнения действия в env будет неопределенным. Это основное отличие от интерфейсов, определенных в OpenAI/Gym. На наш взгляд, асинхронный подход лучше подходит для описания множества сложных сред. Однако есть и одно неудобство: приходится кэшировать некоторые промежуточные данные для будущих запросов. В данном случае необходимо сохранять reward и is_terminated в экземпляре env для будущих запросов.

# ReinforcementLearningBase.action_spaceMethod

Сначала необходимо определить пространство действий. В среде MultiArmBanditsEnv возможные действия простираются от 1 до k (что соответствует length(env.true_values)).

Хотя здесь мы решили возвращать пространство действий Base.OneTo, это не жесткое требование. Может возвращаться и другой объект (Tuple, Distribution и т. д.), если он лучше подходит для описания задачи и правильной ее обработки в функции you_env(action). Некоторые алгоритмы могут требовать, чтобы пространство действий было типа Base.OneTo. Однако за проверку и преобразование отвечает разработчик алгоритма.

# ReinforcementLearningBase.current_playerMethod

Обратите внимание: хотя в этой игре два игрока, текущим всегда является фиктивный одновременный игрок.

# ReinforcementLearningBase.legal_action_spaceMethod

В первом раунде у гостя есть три варианта действий, а во втором допустимы только два варианта, причем отличные от выбранного ведущим действия.

# ReinforcementLearningBase.legal_action_space_maskMethod

Для сред со стилем FULL_ACTION_SET эта функция должна быть реализована.

# ReinforcementLearningBase.rewardMethod

!!! warn Если среда env еще не запущена, возвращаемое значение не имеет смысла. Исключение не выдается здесь потому, что это позволяет упростить логику кода и обеспечить согласованность типов при сохранении значения в буферах.

# ReinforcementLearningBase.stateMethod

Так как MultiArmBanditsEnv — это разовая игра, состояние после каждого действия не имеет значения. Поэтому здесь ему можно присвоить константу 1.

# ReinforcementLearningBase.stateMethod

Для сред с несколькими агентами, как правило, реализуется максимально подробно.

# ReinforcementLearningBase.stateMethod

Основное отличие от других сред в том, что теперь мы имеем два вида состояний: наблюдение и внутреннее состояние. По умолчанию возвращается наблюдение.

# ReinforcementLearningBase.state_spaceMethod

Так как это разовая игра, пространство состояний не имеет особого смысла.

# ReinforcementLearningEnvironments.discrete2standard_discreteMethod

discrete2standard_discrete(env)

Преобразует среду env с дискретным пространством действий в стандартную форму:

  • Пространство действий имеет тип Base.OneTo.

  • Если среда env имеет стиль FULL_ACTION_SET, каждому действию в legal_action_space(env) также соответствует значение Int в пространстве действий.

Стандартная форма полезна для некоторых алгоритмов (таких как Q-обучение).