class Pendulum_1(OpenAIGym):
"A function that creates an runs the Pendulum-v1 environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function."
# from obs[0], indices
# 0 cos(theta) - +1 is up, -1 is down, 0 is left and right
# 1 sin(theta) - +1 is left, -1 is right, 0 is up and down
# 2 theta dot - +dot is anti-clockwise, -dot is clockwise
# 3 theta dot - normalised to +/- 1
# 4 theta +1/-1 (added here) 1 is pointing upwards, + is anti-clockwise, - is clockwise
# reward - -(theta^2 + 0.1*theta_dt^2 + 0.001*action^2)
def __init__(self, render=False, render_mode="rgb_array", video_wrap=False, value=0, name="Pendulum_1",
=None, links=None, new_name=True, namespace=None,**cargs):
seedsuper().__init__('Pendulum-v1', render=render, render_mode=render_mode, video_wrap=video_wrap, value=value, name=name, seed=seed,
=links, new_name=new_name, namespace=namespace, **cargs)
links
def process_hierarchy_values(self):
self.hierarchy_values = self.links[0].get_value()
def process_actions(self):
pass
def apply_actions_get_obs(self):
return self.env.step([self.hierarchy_values])
def parse_obs(self):
self.value = self.obs[0]
self.reward = -self.obs[1]
self.done = self.obs[2]
self.info = self.obs[3]
def process_values(self):
= self.obs[0][2]/8.0
vel self.value = np.append(self.value, vel)
= math.copysign(math.acos(self.obs[0][0]), self.obs[0][1])/math.pi
x #theta = 100 - (10 * math.copysign(1-abs(x), x))
= 100 - (10 * x)
theta self.value = np.append(self.value, theta)
class Factory:
def create(self, seed=None): return Pendulum_1(seed=seed)
class FactoryWithNamespace:
def create(self, namespace=None, seed=None): return Pendulum_1(namespace=namespace, seed=seed)
Environments
EnvironmentFactory
EnvironmentFactory ()
Initialize self. See help(type(self)) for accurate signature.
ControlEnvironment
ControlEnvironment (name=None, value=None, links=None, new_name=True, namespace=None)
Abstract ControlEnvironment
OpenAIGym
OpenAIGym (env_name=None, render=False, render_mode='rgb_array', video_wrap=False, value=0, name='gym', seed=None, links=None, new_name=True, early_termination=False, namespace=None, **cargs)
A function that creates and runs an environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function.
CartPoleV1
CartPoleV1 (render=False, render_mode='rgb_array', video_wrap=False, value=0, name='CartPoleV1', seed=None, links=None, new_name=True, namespace=None, **cargs)
A function that creates an runs the CartPole-v1 environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function.
CartPoleDV1
CartPoleDV1 (render=False, render_mode='rgb_array', video_wrap=False, value=0, name='CartPoleD-v1', seed=None, links=None, new_name=True, namespace=None, **cargs)
A function that creates an runs the CartPole-v1 environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function.
Pendulum
Pendulum (render=False, render_mode='rgb_array', video_wrap=False, value=0, name='Pendulum', seed=None, links=None, new_name=True, namespace=None, **cargs)
A function that creates an runs the Pendulum-v1 environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function.
MountainCarV0
MountainCarV0 (render=False, render_mode='rgb_array', video_wrap=False, value=0, name='MountainCarV0', seed=None, links=None, new_name=True, namespace=None, **cargs)
A function that creates and runs the MountainCar-v0 environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function.
MountainCarContinuousV0
MountainCarContinuousV0 (render=False, render_mode='rgb_array', video_wrap=False, value=0, name='MountainCarContinuousV0', seed=None, links=None, new_name=True, early_termination=True, namespace=None, **cargs)
A function that creates and runs the MountainCarContinuous-v0 environment from OpenAI Gym. Parameter: The environment name. Flag to display environment. Links: Link to the action function.
WindTurbine
WindTurbine (value=0, name='WindTurbine', links=None, new_name=True, namespace=None, seed=None, **cargs)
A function that creates and runs the YawEnv environment for a wind turbine. Indexes 0 - action, 1 - yaw error, 2 - wind direction, 3 - wind speed (ignore 0).
VelocityModel
VelocityModel (mass=50, value=0, name='VelocityModel', links=None, num_links=1, new_name=True, indexes=0, namespace=None, **cargs)
A simple model of a moving object of a particular mass. Parameters: The environment name, mass. Links: Link to the action function.
DummyModel
DummyModel (name='World', value=0, links=None, new_name=True, namespace=None, seed=None, **cargs)
Base class of a PCT function. This class is not used directly by developers, but defines the functionality common to all.
WebotsWrestler
WebotsWrestler (render=False, value=0, name='WebotsWrestler', seed=None, links=None, new_name=True, early_termination=True, namespace=None)
A function that creates and runs a Webots Wrestler robot.
WebotsWrestlerSupervisor
WebotsWrestlerSupervisor (render=False, value=0, name='WebotsWrestlerSupervisor', seed=None, links=None, new_name=True, early_termination=True, namespace=None)
A function that creates and runs a Webots Wrestler robot.
Bridge
Bridge (render=False, value=0, name='Bridge', seed=None, links=None, new_name=True, early_termination=True, namespace=None)
An environment function with sensors set by external system.
MicroGrid
MicroGrid (value=0, name='MicroGrid', links=None, new_name=True, namespace=None, seed=None, **cargs)
A function that creates and runs the microgrid environment for an energy management system.
‘Deep reinforcement learning for energy management in a microgrid with flexible demand.’
Taha Abdelhalim Nakabi, Pekka Toivanen.
https://doi.org/10.1016/j.segan.2020.100413
Inputs - st = [SoCt, BSCt, Cbt, Tt, Gt, Put, Lb,t, t].
0 - ISC - the average SoC (state-of-charge) of the TCLs,
1 - IL - the current load value of the daily consumption pattern.
2 - IPC - the pricing counter,
3 - IBS - the battery SoC,
4 - IEG - the energy generation,
5 - IT - the temparature,
6 - IEP - the electricty prices,
7 - ITS - the time step,
Actions:
0 - TCL action, Atcl,
1 - price action, Ap,
2 - energy deficiency action, Ad,
3 - energy excess action, Ae
from pct.microgrid import MicroGridEnv0Plus
= MicroGrid(seed=1)
env env.summary()
MicroGrid MicroGrid | 0
ARC
ARC
ARC (value:float=0, name:str='ARC', links:Optional[List]=None, new_name:bool=True, render:bool=False, seed:int=None, namespace:Optional[str]=None, **cargs:dict)
A function that creates and runs an ARC environment from a file given the rask code.
= ARC()
env 1))
env.add_link(Constant(# env.add_link(Constant(0))
= { 'dir': 'C:\\packages\\arc-prize-2024', 'file_prefix':'arc-agi_training_', 'code':'007bbfb7', 'dataset': 'train', 'control_set': ['dims'], 'input_set': ['env']}
properties # file_name = os.path.join(properties['dir'], properties['file_prefix']) + 'challenges.json'
# challenges_manager = ChallengesDataManager(file_name)
# data = challenges_manager.get_data_for_key(properties['code'])
# properties['data']=data
# env.set_properties(properties)
# env.set_render(True)
# env.reset()
# print(env.env.info)
# for i in range(6):
# state = env()
# env.summary()
# # print()
# print(env.get_config())
# print()
# print(env.output_string())
# print()
# print(state)
# env.close()
env.close()
OpenAI Gym
An example showing how to use an OpenAI Gym function. And how to have another function which accesses one of the values of the gym environment.
from pct.functions import Constant
from pct.functions import IndexedParameter
from pct.putils import FunctionsList
from pct.functions import Proportional
=False
renderprint(render)
= OpenAIGym("Acrobot-v1", render=render, seed=1)
acrobot =acrobot.namespace
namespace1, namespace=namespace))
acrobot.add_link(Constant(#acrobot.get_config()
False
#acrobot()
#print(acrobot.reward)
#print(getattr(acrobot, "reward"))
acrobot.output_string()
'0.000'
#acrobot.value[0]
The IndexedParameter type retrieves a value from a linked function based upon an index.
= IndexedParameter(0, name="cos_angle1", namespace=namespace)
cos_angle1
cos_angle1.add_link(acrobot)print(cos_angle1.get_config())
#cos_angle1()
{'type': 'IndexedParameter', 'name': 'cos_angle1', 'value': 0, 'links': {0: 'gym'}, 'index': 0}
acrobot.close()
= Pendulum(render=True, namespace=namespace, seed=1)
pen 1], namespace=namespace))
pen.add_link(Constant([print(pen.get_config())
#pen.run(steps=10, verbose=True)
# why TypeError: size must be two numbers?
{'type': 'Pendulum', 'name': 'Pendulum', 'value': 0, 'links': {0: 'constant1'}, 'env_name': 'Pendulum-v1', 'reward': 0, 'done': False, 'info': {}}
pen.close()
Velocity Model
= VelocityModel(name='VelocityModel', namespace=namespace)
vm 1, name='mycon'))
vm.add_link(Constant(print(vm.summary())
= vm.get_config()
config print(config)
assert config == {'type': 'VelocityModel', 'name': 'VelocityModel', 'value': 0, 'links': {0: 'mycon'}, 'mass': 50}
=10, verbose=True) vm.run(steps
VelocityModel VelocityModel | 0 | links mycon
None
{'type': 'VelocityModel', 'name': 'VelocityModel', 'value': 0, 'links': {0: 'mycon'}, 'mass': 50}
0.020 0.040 0.060 0.080 0.100 0.120 0.140 0.160 0.180 0.200
0.19999999999999998