Я вдохновлен возможностями TensorFlow и хочу написать ИИ с нейронной сетью, который оптимизирует стратегию для однопользовательской настольной игры. Я запускаю код, но стратегии не улучшаются. Кажется, что моя игра импелментации работает нормально. (сейчас все просто: получите ресурс A, или ресурс B, или обменяйте все ресурсы на victoryPoints, так что разумнее было бы собрать некоторые ресурсы, которые их обменивают.)
Думаю, я не тренирую модель.
Я пытался понять примеры кода, но это немного для начинающего Python.
Итак, что я знаю, так это то, что я хочу иметь модель, которая оценивает состояние, чтобы оно получало состояние в качестве входных данных, а выходные данные представляли собой только одно значение: насколько хорошее состояние, так сколько ожидаемых баллов должно быть набрано ,
Это я использую для прогнозирования следующих ~ 3 раундов, а затем выбираю действие, которое приводит к наилучшему результату в ~ 3 раундах в соответствии с NeuralNetwork (и в начале вместо этого используется случайный выбор, получая меньше); и начать все сначала.
Я действительно не уверен, как это «предсказать» (я думаю, это оценка) и «обновление» (я надеюсь, это тренинг) должно работать.
class NeuralNet():
def __init__(self):
# Placeholders for inputs (x) and outputs(y)
self.x_pl = tf.placeholder(tf.float32, shape=[None, game.getStateSize(game())], name='X')
self.y_pl = tf.placeholder(shape=[None], dtype=tf.float32, name="y")
self.fc1 = tf.contrib.layers.fully_connected(self.x_pl, 64)
self.fc2 = tf.contrib.layers.fully_connected(self.fc1, 64)
self.output = tf.contrib.layers.fully_connected(self.fc2, 1)
self.value = self.output[0]
self.loss = tf.reduce_sum(tf.square(self.y_pl-self.output))
self.train = tf.train.GradientDescentOptimizer(1.0).minimize(self.loss)
def predict(self, sess, s):
"""
Predicts value of state(?).
Args:
sess: Tensorflow session
s: State input of shape [batch_size, 4, 160, 160, 3]
Returns:
Tensor containing the estimated
state value.
"""
s = np.expand_dims(s, 0)
return sess.run(self.value, {self.x_pl: s})
def update(self, sess, s, y):
"""
Updates the NeuralNet so its predicting better(?).
Args:
sess: Tensorflow session object
s: State of game
y: VictoryPoints Actualy Earned at the end
Returns:
nothing yet
"""
s = np.expand_dims(s, 0)
y = np.expand_dims(y, 0)
feed_dict = {self.x_pl: s, self.y_pl: y}
sess.run([WHAT_TO_PUT_HERE, tf.contrib.framework.get_global_step(), self.train, self.loss], feed_dict)
в основном классе называется следующее:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
deep_q_learning(sess)
и затем я в основном прохожу через множество эпох / эпизодов и играю по одной игре в каждую эпоху. для прогнозов, которые мне нужны, я использую
neurnet.predict(sess, g.getGameState())
и я пытаюсь использовать
nn.update(sess, state, game.points)
в конце эпохи обновления, но сейчас это не работает технически (TypeError: Аргумент Fetch. Нет, недопустимый тип).
(
Как и без строки обновления, код проходит, но стратегии настолько плохи, что едва ли дают какие-либо победные очки (я думаю, что случайные стратегии были бы лучше). (
Большое спасибо за вашу помощь заранее!