Ejemplo n.º 1
0
                BATCH_SIZE)

            #формируем ответы для батча
            y_train_batch = reward_batch
            for i, is_done in enumerate(done_batch):
                if not is_done:
                    y_train_batch[i] += GAMMA * argmaxQ(new_state_batch[i])

            #формируем обучающую выборку
            X_train_batch = np.concatenate(
                (state_batch, action_batch[np.newaxis, :].T), axis=1)

            #тренируем, learning rate еще не делился на len(batch)
            train_data_batch = [(x[:, np.newaxis], y)
                                for x, y in zip(X_train_batch, y_train_batch)]
            episode_network_change += Q.update_mini_batch(
                mini_batch=train_data_batch, eta=LEARNING_RATE)

        #накапливаем общую метрику
        episode_total_reward += reward

        #проверяем не достигли ли цели или закончилось время
        if done or episode_time == int(MAX_TIME):
            noise = UONoise()
            print('| Reward: {:.5} | Episode: {:} | Time: {:}'.format(
                episode_total_reward, episode, episode_time))
            break
    network_chages.append(episode_network_change)
    rewards_curve.append(episode_total_reward)
#закрываем окружение
env.close()
Ejemplo n.º 2
0
				factor *= REWARD_FACTOR
				k -= 1

		# Если у нас накопилось хоть чуть-чуть данных, потренируем нейросеть
		if history_buffer.size() >= BATCH_SIZE:

			#формируем батч
			state_batch, action_batch, reward_batch = history_buffer.sample_batch(BATCH_SIZE)

			#формируем обучающую выборку
			X_train = np.concatenate((state_batch, action_batch[np.newaxis, :].T), axis=1)
			Y_train = reward_batch

			#обучение
			train_data = [(x[:, np.newaxis], y) for x, y in zip(X_train, Y_train)]
			weight_bias_change_forsec = NN.update_mini_batch(mini_batch=train_data, eta=LEARNING_RATE)
			episode_weight_bias_change += weight_bias_change_forsec

		#накапливаем общую награду
		episode_reward += reward

		if done:
			#обновляем шум для отсутсвия антикорреляций
			noise = UONoise()
			print('Episode Reward: {:.5} , Episode: {:} , Time: {:}'.format(episode_reward, episode, episode_time))
			if episode_reward > max_total_reward:
				max_total_reward = episode_reward
				index_of_best_episode = episode
			break

	#добавляем очередную запись об изменении весов и наград