Учитывая, что уборочная машина всегда может видеть ближайшую шахту, это должно быть довольно легко. Из вашего вопроса я предполагаю, что ваша единственная проблема - найти хорошую функцию вознаграждения и представление состояния вашего агента.
Определение состояния
Абсолютные позиции редко полезны в случайной среде, особенно если средабесконечен, как в вашем примере (так как бот может проехать за границы и возродиться на другой стороне). Это означает, что размер среды не нужен для работы агента (нам на самом деле он понадобится для симуляции бесконечного пространства, tho).
Функция вознаграждения вычисляет свое возвращаемое значение на основе текущего состоянияагента по сравнению с его предыдущим состоянием. Но как мы определяем состояние? Давайте посмотрим, что нам действительно нужно для того, чтобы работать с агентом так, как мы хотим.
- Положение агента.
- Положение ближайшей шахты.
Это все, что нам нужно. Теперь я сказал, что абсолютные позиции плохие. Это потому, что это делает таблицу Q (вы называете это Q матрицей) статичной и очень хрупкой по случайности. Итак, давайте попробуем полностью исключить абозульские позиции из функции вознаграждения и заменить их относительными позициями. К счастью, в вашем случае это очень просто: вместо абсолютных позиций мы используем относительную позицию между ближайшей шахтой и агентом.
Теперь мы больше не имеем дело с координатами, а с векторами. Рассчитаем вектор между нашими точками: v = pos_mine - pos_agent
. Этот вектор дает нам две очень важные части информации:
- направление, в котором находится ближайшая шахта, и
- расстояние до ближайшей шахты.
И это все, что нам нужно, чтобы наш агент работал. Следовательно, состояние агента может быть определено как
State: Direction x Distance
, из которых расстояние является значением с плавающей запятой и направлением либо с плавающей запятой, которая описывает угол, либо нормализованный вектор.
Определение функции вознаграждения
Учитывая наше новое определенное состояние, единственное, что нас волнует в нашей функции вознаграждения, - это расстояние. Поскольку все, что мы хотим, - это переместить агента к минам, все, что имеет значение, это расстояние. Вот несколько предположений о том, как может работать функция вознаграждения:
- Если агент подметает мину (расстояние == 0), верните огромное вознаграждение (например, 100).
- Если агент движется к шахте (расстояние уменьшается), верните нейтральную (или небольшую) награду (например, 0).
- Если агент удаляется от шахты (расстояние увеличивается), отрицательная ретуаннаграда (напр. -1).
Теоретически, поскольку мы наказываем отход от шахты, нам здесь даже не нужно правило 1.
Заключение
Осталось только определить хорошую скорость обучения и скидку, чтобы ваш агент работал хорошо после 50 итераций. Но, учитывая простоту окружающей среды, это не должно иметь большого значения. Эксперимент.