[PYTHON] Ouvrez AI Gym pour apprendre avec le poteau de chariot contrôlé par PD

Je l'ai posté car cela fonctionnait bien lorsque j'ai déplacé CartPole-v0 d'OpenAI Gym avec contrôle PD. L'utilisation est trop différente, mais je pense que c'est suffisant en tant que démo pour apprendre à l'utiliser.

L'algorithme de contrôle est un contrôle PD avec des applaudissements positifs et négatifs (c'est-à-dire -1 ou +1).

Le code est ci-dessous. Toutes les explications détaillées sont écrites dans le code. Il est également répertorié sur github.

cart_pole_pd.py


# coding : utf-8

#CartPole utilisant un agent de contrôle PD a applaudi positif et négatif-Démonstration de la v0

#Signification de la valeur
#  observation : [Position du chariot(Unité inconnue),Vitesse du chariot(Unité inconnue),Angle de pôle(Radian),Vitesse angulaire du pôle(Unité inconnue)]
#  action : 0->-1, 1->+1
#  step : 100step =1 seconde
#Conditions de sortie:Inclinaison de plus de 15 degrés ou 2.4(Unité inconnue)Déplacez-vous du centre ou 200 étapes

import agents
import gym
from gym import wrappers

video_path = './video' #Chemin pour enregistrer la vidéo
n_episode = 1 #Nombre d'épisodes
n_step = 200 #Nombre d'étapes
#Paramètres de contrôle PD(Au fait, cela ne fonctionne pas si seul le contrôle P est utilisé.)
#* Puisqu'il est applaudi en positif et en négatif, seul le ratio est significatif
kp = 0.1
kd = 0.01

myagent = agents.PDAgent(kp, kd) #Agent de contrôle PD applaudi par positif et négatif
env = gym.make('CartPole-v0') #Création d'environnement
#Classe Wrap pour l'environnement qui enregistre les vidéos dans le répertoire spécifié
# force=Vrai: efface automatiquement le fichier du moniteur précédent
env = wrappers.Monitor(env, video_path, force=True)
for i_episode in range(n_episode):
    observation = env.reset() #Initialisation environnementale et acquisition d'observation initiale
    for t in range(n_step):
        env.render() #Afficher l'environnement(Mais il s'affiche sans utiliser Monitor)
        print(observation)
        action = myagent.action(observation) #Obtenir une action de la classe d'agent
        observation, reward, done, info = env.step(action) #Faites un pas
        if done: #Drapeau de fin
            print('Episode finished after {} timesteps'.format(t+1))
            break

agents.py


# coding: utf-8

import random

#Agent aléatoire
class RandomAgent():
    def action(self):
        return random.randint(0, 1) #Renvoie un nombre aléatoire entier compris entre 0 ou plus et 1 ou moins

#Agent de contrôle PD applaudi par positif et négatif
class PDAgent():
    def __init__(self, kp, kd):
        self.kp = kp
        self.kd = kd

    def action(self, observation):
        m = self.kp * observation[2] + self.kd * observation[3] #Calculer le montant de l'opération
        if m >= 0:
            return 1
        if m < 0:
            return 0

Recommended Posts

Ouvrez AI Gym pour apprendre avec le poteau de chariot contrôlé par PD
Résolvez OpenAI Gym Copy-v0 avec Q Learning
Résolvez OpenAI Gym Copy-v0 avec Sarsa
Apprenez à coloriser les images monochromes avec Chainer
Défiez DQN (Modoki) avec Chainer ✕ Open AI Gym!
Se préparer à apprendre les indicateurs techniques avec TFlearn
[Computer Vision] Géométrie épipolaire apprise avec des chats
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
Apprenez à reconnaître les nombres manuscrits (MNIST) avec Caffe
Comment développer une application de panier avec Django
AWS Step Functions pour apprendre avec un exemple
Comment entraîner Kaldi avec JUST Corpus
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
Résumé du site pour apprendre l'apprentissage automatique avec une vidéo en anglais
Créez un environnement Open AI Gym avec Bash sur Windows 10
Comment apprendre le SVM structuré de ChainCRF avec PyStruct
[Comment!] Apprenez et jouez à Super Mario avec Tensorflow !!
MVC - Édition de modèle pour apprendre de 0 avec un biais uniquement