Ich habe es gepostet, weil es gut funktioniert hat, als ich CartPole-v0 von OpenAI Gym mit PD-Steuerung verschoben habe. Die Verwendung ist zu unterschiedlich, aber ich denke, es reicht als Demo aus, um zu lernen, wie man es verwendet.
Der Steueralgorithmus ist eine PD-Steuerung mit positiven und negativen Klatschen (dh -1 oder +1).
Der Code ist unten. Alle detaillierten Erklärungen sind im Code geschrieben. Es ist auch auf github aufgeführt.
cart_pole_pd.py
# coding : utf-8
#CartPole mit PD-Kontrollmittel klatschte positiv und negativ-Demonstration von v0
#Bedeutung des Wertes
# observation : [Wagenposition(Einheit unbekannt),Wagengeschwindigkeit(Einheit unbekannt),Polwinkel(Radian),Polwinkelgeschwindigkeit(Einheit unbekannt)]
# action : 0->-1, 1->+1
# step : 100step =1 Sekunde
#Ausgangsbedingungen:Neigen Sie mehr als 15 Grad oder 2.4(Einheit unbekannt)Bewegen Sie sich von der Mitte oder 200 Stufen
import agents
import gym
from gym import wrappers
video_path = './video' #Pfad zum Speichern des Videos
n_episode = 1 #Anzahl der Folgen
n_step = 200 #Anzahl der Schritte
#PD-Steuerparameter(Übrigens funktioniert es nicht, wenn nur die P-Steuerung verwendet wird.)
#* Da es positiv und negativ geklatscht ist, ist nur das Verhältnis von Bedeutung
kp = 0.1
kd = 0.01
myagent = agents.PDAgent(kp, kd) #PD-Kontrollmittel durch positiv und negativ geklatscht
env = gym.make('CartPole-v0') #Schaffung einer Umgebung
#Wrap-Klasse für eine Umgebung, in der Videos im angegebenen Verzeichnis gespeichert werden
# force=True: Vorherige Überwachungsdatei automatisch löschen
env = wrappers.Monitor(env, video_path, force=True)
for i_episode in range(n_episode):
observation = env.reset() #Umgebungsinitialisierung und erste Beobachtungserfassung
for t in range(n_step):
env.render() #Umgebung anzeigen(Es wird jedoch ohne Verwendung von Monitor angezeigt)
print(observation)
action = myagent.action(observation) #Holen Sie sich die Aktion von der Agentenklasse
observation, reward, done, info = env.step(action) #Mach einen Schritt
if done: #Flag beenden
print('Episode finished after {} timesteps'.format(t+1))
break
agents.py
# coding: utf-8
import random
#Zufälliger Agent
class RandomAgent():
def action(self):
return random.randint(0, 1) #Gibt eine ganzzahlige Zufallszahl im Bereich von 0 oder mehr und 1 oder weniger zurück
#PD-Kontrollmittel durch positiv und negativ geklatscht
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] #Betriebsmenge berechnen
if m >= 0:
return 1
if m < 0:
return 0
Recommended Posts