Сегодня я начинаю свои упражнения на Усиление укрепления Использование Tensorflow 2.0. То же самое, что и многие парни в этом домене, я использую знаменитый Картполь Игра (см. Рисунок ниже) Симпатийный зал Openai Для реализации и тестирования моих Rl. алгоритм. Можно проверить официальное введение CartPole на Эта страница Отказ
Этот пост покажет сырьевую структуру моей реализации. Я представлю основной цикл тренировочного процесса и основных концепций игры TF2, RL и Carthpole. Подробности алгоритмической работы будут представлены в следующем посте.
Подготовка пакета
Убедитесь, что Tensorflow .0), numpy и тренажерный зал были установлены.
Теперь импортируйте важные модули.
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = "2" import tensorflow as tf if tf.__version__.startswith("1."): raise RuntimeError("Error!! You are using tensorflow-v1") import numpy as np import gym import tensorflow.keras as keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation import tensorflow.keras.backend as K
Политическая градиентная сеть
Я буду использовать метод градиента политики для решения этой проблемы RL. Таким образом я определяю первым классом для этого метода. На данный момент этот класс почти пуст. Я заполню его всеми необходимыми функциями позже.
Этот класс состоит из последовательной нейронной сети. Ввод этой сети должен быть вектор состояния наблюдения и вывода уникального индекса действия. Он должен предоставить некоторые важные функции для расчета градиентов, обновление градиентов модели, вычисления моделей награды и сохранения/перезагрузки.
# a class of Policy Gradient Neural Network class PolicyGradientNet: def __init__(self): self.model = None self.gradients = [] self.optimizer = None def create_model(self): self.model = Sequential() ## TODO: fulfill the neural netwrok model self.optimizer = keras.optimizers.Adam(self.model.variables, lr=0.01) pass def calc_grad(self): pass def update_gradient(self): ### apply new gradient pass def get_gradients(self): return self.gradients def get_variable(self): return self.model.variables def calc_rewards(self): pass def save_model(self): pass def load_model(self): pass
Подготовка керпола
Эта часть кода будет вызывать спортивную среду и печатает свои параметры для получения информации.
ENV_SEED = 1024 ## Reproducibility of the game NP_SEED = 1024 ## Reproducibility of numpy random env = gym.make('CartPole-v0') env.seed(ENV_SEED) np.random.seed(NP_SEED) ### The Discrete space allows a fixed range of non-negative numbers, so in this case valid actions are either 0 or 1. ### The Box space represents an n-dimensional box, so valid observations will be an array of 4 numbers. print(env.action_space) print(env.observation_space) ### We can also check the Box's bounds: print(env.observation_space.high) print(env.observation_space.low)
Главная петля
Это главный цикл для обучения. Поскольку класс PolicyGradEtnet не был закончен, так что здесь я ухожу СДЕЛАТЬ Ключевые слова для указания места, где мне нужно реализовать алгоритмический код RL.
В каждом эпизоде между Env и Agent существует множество циклов взаимодействия между Env и Agent. Учитывая текущее состояние, мой агент рассчитывает действие (0 или 1), которое применяется на тележке, то окружающая среда будет соответственно обновлять, поэтому наблюдается новое состояние, поэтому мой агент снова будет рассчитать действие для применения и т. Д. Отказ
Ниже приведен скриншот официальной презентации взаимодействия агента-енд:
Текущий код этой части:
# define firstly an instance of PolicyGradientNet agent = PolicyGradientNet() update_step = 5 # number of episodes for updating the network's gradient limit_train = 1000 # training episode limit for stopping i = 0 # episode counter max_step = 0 # record the maximum steps in all episodes while i < limit_train: step = 0 state_current = env.reset() ## reset the game so it will play from its initial state while True: env.render() ## refreshing of visual result step += 1 ## calculate an action ## TODO: use agent.model to calculate the optimal action a = np.random.choice([0, 1], p=[0.5, 0.5]) ## env.step() shall return: observation(object), reward(float), done(boolean),info(dict) ## check more info at https://gym.openai.com/docs/ state_obs, reward, done, info = env.step(a) state_current = state_obs ## update current state vector x, x_prime, theta, theta_prime = state_obs ## state_obs consists of : current x position, velocity, current pole orientation (about vertical axis) and current angular velocity if done: # done being True indicates the episode has terminated. ## TODO: launch agent training if max_step < step: max_step = step print("Step: ", step) ## TODO: update gradients break if i % 100 == 0: print("Max step is {} until episode {} ".format(max_step, i)) i += 1
Теперь симуляция является чем-то вроде этого:
Полная программа будет представлена в следующем посте.
Оригинал: “https://dev.to/jemaloqiu/reinforcement-learning-with-tf2-and-gym-part-i-2j5”