Структура данных для Марковского процесса принятия решений

Я реализовал алгоритм итерации значения для простого процесса принятия решения по методу Маркова Wikipedia в Python. Чтобы сохранить структуру (состояния, действия, переходы, награды) конкретного марковского процесса и перебрать его, я использовал следующие структуры данных:

  • словарь для состояний и действий, доступных для этих состояния:

    SA = { 'state A': {' action 1', 'action 2', ..}, ...}

  • словарь для вероятностей перехода:

    T = {('state A', 'action 1'): {'state B': probability}, ...}

    Словарь
  • для вознаграждений:

    R = {('state A', 'action 1'): {'state B': reward}, ...}.

Мой вопрос: правильно ли это? Каковы наиболее подходящие структуры данных (в Python) для MDP?

Ответ 1

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

Переходы в марковских процессах часто моделируются матричными умножениями. Вероятности перехода Pa(s1,s2) и вознаграждения Ra(s1,s2) могут быть описаны (потенциально разреженными) матрицами Pa и Ra, индексированными состояниями. Я думаю, что это будет иметь несколько преимуществ:

  • Если вы используете массивы numpy для этого, индексирование, вероятно, будет быстрее, чем со словарями.
  • Также состояние переходов может быть просто описано с помощью матричного умножения.
  • Моделирование процесса, например, с выбором колеса рулетки, будет выполняться быстрее и более четко, так как вам просто нужно выбрать соответствующий столбец матрицы перехода.

Ответ 2

Я реализовал Марковские процессы принятия решений на Python раньше и нашел следующий код полезным.

http://aima.cs.berkeley.edu/python/mdp.html

Этот код взят из "Искусственного интеллекта: современный подход" Стюарта Рассела и Питера Норвига.

Ответ 3

Существует реализация MDP с python под названием pymdptoolbox. Он разработан на основе реализации с Matlab под названием MDPToolbox. Оба стоит отметить.

В принципе, матрица перехода вероятности представляется как массив (A × S × S) и вознаграждается как матрица (S × A), где S и A представляют количество состояний и количество действий. В пакете также есть специальная обработка для разреженной матрицы.