Я не могу понять следующие шаги для моей Deep Q Network. Я пытаюсь оптимизировать автобусные маршруты. У меня есть матрица расстояний и данные о стоп-популярности.
Матрица distance
представляет собой двумерный массив со всеми stop
, детализирующими расстояние между ними. Если есть 4 остановки, это будет выглядеть следующим образом:
distance=np.array[[0, stop1-stop2, stop1-stop3, stop1-stop4],
[stop2-stop1, 0, stop2-stop3, stop2-stop4],
[stop3-stop1, stop3-stop2, 0, stop3-stop4],
[stop4-stop1, stop4-stop2, stop4-stop3, 0]]
Матрица rewards
это просто:
(1/distance) * (percent of total riders who get on and off at specific stop)
Это делается для того, чтобы остановки с короткими расстояниями между ними и большим количеством гонщиков имели самые высокие значения вознаграждения.
Я сделал классы для каждого stop
. Они показывают, сколько людей ждут на каждой остановке, и регулярно обновляют остановки с большим количеством людей. Когда автобус достигает остановки, его значение waiters
становится 0
, и, следовательно, его вознаграждение становится 0
до тех пор, пока не прибудет больше людей.
Я настроил модель со следующим кодом:
import tensorflow as tf
# Current game states. Rows of the rewards matrix corresponding to the agent's current stop. Inputs to neural network.
observations = tf.placeholder('float32', shape=[None, num_stops])
# Actions. A number from 0-number of stops, denoting which stop the agent traveled to from its current location.
actions = tf.placeholder('int32',shape=[None])
# These are the rewards received by the agent for making its decisions. +1 if agent 'wins' the game (gets system score to 0 (this will only happen if bus stops are not updated periodically))
rewards = tf.placeholder('float32',shape=[None]) # +1, -1 with discounts
# Model
# This is first layer of neural network, takes the observations tensor as input and has '200' hidden layers. This number is arbitrary, I'm not sure how to adjust it for peak performance.
Y = tf.layers.dense(observations, 200, activation=tf.nn.relu)
Отсюда я не уверен, что делать. Я хочу запускать нейронную сеть партиями, не обновляя веса после каждого действия шины (переход от одной остановки к другой). Вместо этого я хочу дождаться завершения полной «игры», например, заданное количество действий, предпринимаемых автобусом до окончания игры. Если игра была выиграна, например, автобус побывал на каждой остановке в заранее установленное время, будет дано вознаграждение. Я думаю об использовании 1, чтобы все было просто. Ранее акции будут дисконтированы по учетной ставке.
Я так думаю, потому что хочу, чтобы агент видел долгосрочные последствия своих индивидуальных действий. Я видел это в статье об агенте, который учится играть в понг, и пытаюсь внедрить аналогичного агента для игры в мою систему. Заранее благодарю за любую помощь.