У меня проблемы с FQL (Fuzzy Q-Learning). Я реализовал свой алгоритм на Matlab. На самом деле довольно просто кодировать FQL. Нужно просто пройти различные этапы (слои) от фаззификации до дефаззификации, а затем обновить.
Однако мой FQL-код не сходится. На самом деле, я копирую работу, сделанную другими, которые получили хорошее сближение.
Я подведу итог моей модели и шагов, которые я сделал в следующем:
- Мой вектор состояния содержит 4 значения s (C, B, R, P)
- Я отображаю вышеупомянутый вектор s в соответствующий нечеткий вектор sbar
- У меня есть 4 лингвистические переменные, каждая из которых определяется в наборе следующим образом: C = {Выкл, холостой ход, LM, H}, B = {VL, L, M, H, VH}, R = {L, M, H} и P = {L, M, H}.
- Я вычисляю значения истинности каждой комбинации (узла). Здесь у меня 4x5x3x3 = 180 узлов, что является не чем иным, как произведением четырех значений членства для каждого узла.
- Для каждого узла я выбираю действие (на основе эпсилон-жадного алгоритма). Затем я вычисляю взвешенное действие и взвешенное значение q для каждого узла.
- Дефаззификация: я вычисляю действие А путем суммирования по взвешенному действию. Аналогично значению Q.
- Я обновляю свои q-значения.
Во всех ссылках, которые я прочитал, это естественные шаги. И было доказано, что система будет сходиться. Однако у меня нет.
Я понял, что при вычислении будущего значения q я должен сначала выполнить действие A, рассчитанное на шаге дефаззификации выше. Затем используйте его, чтобы перейти в новое состояние. После этого я повторяю и нахожу веса нечетких узлов. Затем для каждого узла я нахожу оптимальное значение q, чтобы наконец получить значение Q следующего состояния.
Что-то мне не хватает? Я не мог придумать причину, по которой она не должна сходиться.
Я могу при необходимости расширить эпланацию.
Большое спасибо заранее.