Изображения и основной контент основаны на этом официальном руководстве AWS DeepRacer, но адаптированы и расширены для Студенческой лиги DeepRacer, которую можно найти здесь. Все фрагменты кода и примеры были удалены, но их можно найти в исходной документации.

Добро пожаловать в мой гайд по параметрам, предусмотренным для Студенческой лиги DeepRacer! Несмотря на то, что AWS проделал хорошую работу с базовым описанием этих параметров, существуют «скрытые» элементы и ограничения для многих из них, которые невозможно найти с помощью студенческой консоли. Все, что взято непосредственно из старого руководства, отформатировано так:

Дипрейсер - это...

Кроме того, в этом руководстве я буду добавлять свои мысли по поводу многих из этих параметров ниже, например:
Мои мысли: …

Входной словарь

Ваша функция вознаграждения имеет один вход: словарь, обычно называемый params. Он содержит все параметры в парах ключ-значение, где ключ всегда является строкой.

В словаре params есть следующие пары ключ-значение:

{
    "all_wheels_on_track": Boolean,        # flag to indicate if the agent is on the track
    "x": float,                            # agent's x-coordinate in meters
    "y": float,                            # agent's y-coordinate in meters
    "closest_waypoints": [int, int],       # indices of the two nearest waypoints.
    "distance_from_center": float,         # distance in meters from the track center 
    "is_left_of_center": Boolean,          # Flag to indicate if the agent is on the left side to the track center or not. 
    "is_offtrack": Boolean,                # Boolean flag to indicate whether the agent has gone off track.
    "is_reversed": Boolean,                # flag to indicate if the agent is driving clockwise (True) or counter clockwise (False).
    "heading": float,                      # agent's yaw in degrees
    "progress": float,                     # percentage of track completed
    "speed": float,                        # agent's speed in meters per second (m/s)
    "steering_angle": float,               # agent's steering angle in degrees
    "steps": int,                          # number steps completed
    "track_length": float,                 # track length in meters.
    "track_width": float,                  # width of the track
    "waypoints": [(float, float), ]        # list of (x,y) as milestones along the track center
}

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

all_wheels_on_track

Тип:Boolean

Диапазон:(True:False)

Флаг Boolean, указывающий, находится ли агент в пути или вне пути. Он находится вне колеи (False), если какое-либо из его колес выходит за границы гусеницы. Он находится на пути (True), если все колеса находятся внутри двух границ пути. На следующем рисунке показано, что агент находится в рабочем состоянии.

На следующем рисунке показано, что агент сбился с пути.

Мои мысли: мне очень нравится этот параметр, и почти во всех функциях вознаграждения я использую этот параметр. Я предпочитаю его намного больше, чем параметр «is_offtrack», потому что я чувствую, что когда агент уже сбился с пути, уже слишком поздно исправлять курс. Я думаю, что «all_wheels_on_track» дает агенту гораздо больше времени, чтобы среагировать на отклонение от маршрута.

ближайшие_путевые точки

Тип: [int, int]

Диапазон: [(0:Max-1),(1:Max-1)]

Отсчитываемые от нуля индексы двух соседних waypoints, ближайших к текущей позиции агента (x, y). Расстояние измеряется евклидовым расстоянием от центра агента. Первый элемент относится к ближайшей путевой точке позади агента, а второй элемент относится к ближайшей путевой точке перед агентом. Max — длина списка путевых точек. На иллюстрации, показанной в путевых точках, closest_waypoints будет [16, 17].​

расстояние_от_центра

Тип: float

Диапазон: 0:~track_width/2

Смещение в метрах между центром агента и центром пути. Наблюдаемое максимальное смещение происходит, когда любое из колес агента находится за пределами границы дорожки и, в зависимости от ширины границы дорожки, может быть чуть меньше или больше половины track_width.

Мои мысли: этот параметр обычно используется в сочетании с track_width, чтобы нормализовать, насколько далеко от центра находится пользовательский агент, выполнив «1-[distance_from_center / (track_width/2)]». Эта формула возвращает 0, когда автомобиль находится в центре пути, и 1, когда он находится на краю пути.

заголовок

Тип: float

Диапазон: -180:+180

Направление движения агента относительно оси x системы координат в градусах.

Мои мысли: этот параметр обычно используется в сочетании с «closest_waypoints» и «waypoints», чтобы увидеть, указывает ли автомобиль между двумя следующими путевыми точками.

is_left_of_center

Тип: Boolean

Диапазон: [True : False]

Флаг Boolean, указывающий, находится ли агент слева от центра трека (True) или справа (False).

Мои мысли: некоторые люди проделывали интересные вещи с этим параметром, например, используя координаты (x, y) или путевые точки, чтобы определить, должна ли машина быть слева или справа от центра. Кажется, это нечто среднее между моделью поощрений, в которой больше внимания уделяется невмешательству, и тем, чтобы она следовала гоночной трассе, и я никогда не использовал ее по-настоящему.

is_offtrack

Тип: Boolean

Диапазон: (True:False)

Логический флаг, указывающий, имеет ли агент отклонение от маршрута (Истина) или нет (Ложь) в качестве статуса завершения.

Мои мысли: мне не нравится этот параметр. См. параметр all_wheels_on_track.

is_reversed

Тип: Boolean

Диапазон: [True:False]

Логический флаг, указывающий, движется ли агент по часовой стрелке (True) или против часовой стрелки (False).

Он используется, когда вы включаете изменение направления для каждого эпизода.

Мои мысли: этот параметр не относится к тому, является ли скорость вашего автомобиля отрицательной, чего я некоторое время не осознавал. Предполагается, что ваша модель может использовать другую функцию в зависимости от направления, что в контексте смоделированной модели, работающей в одном направлении, кажется немного бесполезным.

прогресс

Тип: float

Диапазон: 0:100

Процент прохождения трека.

Мои мысли: возможно, это один из самых важных параметров в сочетании с шагами, возможно, сразу после скорости. При разделении прогресса на шаги (то есть прогресс/шаги) это дает возможность измерить, насколько быстро ваша модель движется по трассе, при этом позволяя вашей модели замедляться на поворотах, если это необходимо (в отличие от прямой привязки вознаграждения к скорости) .

скорость

Тип: float

Диапазон: 0.0:5.0

Наблюдаемая скорость агента в метрах в секунду (м/с).

В области действия DeepRacer Student Console скорость ограничена 1 м/с, в отличие от указанных параметров.

Мои мысли: скорость важна. Позаботьтесь о скорости.

угол_руля

Тип: float

Диапазон: -30:30

Угол поворота передних колес относительно центральной линии агента в градусах. Знак минус (-) означает поворот вправо, а знак плюс (+) означает поворот влево. Осевая линия агента не обязательно параллельна осевой линии дорожки, как показано на следующем рисунке.

Мои мысли: этот параметр похож на параметр "left_of_center" в том смысле, что с ним происходят интересные вещи, но его сложно использовать. Как и left_of_center, он обычно используется в сочетании с координатами x, y или путевыми точками, чтобы стимулировать повороты (больший угол поворота) или движение прямо на длинных участках пути (меньший угол поворота).

шаги

Тип: int

Диапазон: 0:Nstep

Количество пройденных шагов. Шаг соответствует действию, предпринятому агентом в соответствии с текущей политикой.

Параметр «шаги» увеличивается на 1 каждый раз, когда запускается ваша функция вознаграждения (и весь окружающий вспомогательный код). Это происходит примерно каждые 1/15 секунды, то есть 1 секунда ≈ 15 ± 1 шаг. Кроме того, шаги сбрасываются на 0 каждый круг.

Мои мысли. Возможно, это один из самых важных параметров в сочетании с прогрессом. При разделении прогресса на шаги (прогресс/шаги) вы получаете меру прогресса, который вы делаете за шаг, и это, по сути, то, что вы хотите максимально увеличить в своей модели.

track_length

Тип: float

Диапазон: [0:Lmax]

Длина трассы в метрах. Lmax is track-dependent.

Ширина дорожки

Тип: float

Диапазон: 0:Dtrack

Ширина колеи в метрах.

Мои мысли: этот параметр обычно используется в сочетании с «distance_from_center», чтобы нормализовать, насколько далеко от центра находится пользовательский агент, выполнив «1-[distance_from_center / (track_width/2)]». Эта формула возвращает 0, когда автомобиль находится в центре пути, и 1, когда он находится на краю пути.

x, y

Тип: float

Диапазон: 0:N

Расположение в метрах центра агента по осям x и y моделируемой среды, содержащей дорожку. Исходная точка находится в левом нижнем углу моделируемой среды.

Мои мысли: эти параметры кажутся устаревшими, поскольку путевые точки — это более простой способ отследить, где находится ваша машина. Они могут быть полезны, но я никогда не видел, чтобы они использовались.

путевые точки

Тип: list из [float, float]

Диапазон: [[xw,0,yw,0] … [xw,Max-1, yw,Max-1]]

Упорядоченный список Max вех, зависящих от трека, вдоль центра трека. Каждая веха описывается координатой (xw,i, yw,i). Для закольцованного трека первая и последняя путевые точки совпадают. Для прямого или другого незацикленного трека первая и последняя путевые точки отличаются.

Мои мысли: В профессии DeepRacer (т.е. не студенческой лиге) это, пожалуй, самый важный параметр в сочетании со скоростью; в профессиональной лиге модели идеально подходят для трассы, а путевые точки — это способ подогнать модель к предварительно рассчитанной гоночной трассе. В студенческой лиге они менее важны, хотя по-прежнему широко используются, но их все же следует понять, прежде чем сбрасывать со счетов.

Заключение

Большинство параметров DeepRacer довольно просты, с ними легко начать работу новичкам. Однако некоторые из них бывает сложно понять без посторонней помощи (смотрят на вас, «шаги»).

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