MCPcopy Create free account
hub / github.com/ahalev/python-microgrid / MicrogridStep

Class MicrogridStep

src/pymgrid/microgrid/utils/step.py:4–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2
3
4class MicrogridStep:
5 def __init__(self, reward_shaping_func=None, cost_info=None):
6 self._reward_shaping_func = reward_shaping_func
7 self.cost_info = cost_info
8 self._obs = dict()
9 self._reward = 0.0
10 self._done = False
11 self._info = dict(absorbed_energy=[], provided_energy=[])
12
13 def append(self, module_name, obs, reward, done, info):
14 try:
15 self._obs[module_name].append(obs)
16 except KeyError:
17 self._obs[module_name] = [obs]
18 self._reward += reward
19 if done:
20 self._done = True
21
22 try:
23 self._info[module_name].append(info)
24 except KeyError:
25 self._info[module_name] = [info]
26
27 for key, value in info.items():
28 try:
29 self._info[key].append(value)
30 except KeyError:
31 pass
32
33 def balance(self, shape_reward=False):
34 provided_energy = np.sum(self._info['provided_energy'])
35 absorbed_energy = np.sum(self._info['absorbed_energy'])
36
37 if shape_reward:
38 return provided_energy, absorbed_energy, self._reward, self.shaped_reward()
39
40 return provided_energy, absorbed_energy, self._reward, None
41
42 def output(self):
43 return self._obs, self.shaped_reward(), self._done, self._output_info()
44
45 def shaped_reward(self):
46 if self._reward_shaping_func is None:
47 return self._reward
48 elif not callable(self._reward_shaping_func):
49 raise TypeError(f'reward_shaping_func {self._reward_shaping_func} is not callable.')
50
51 assert isinstance(self.cost_info, dict)
52 return self._reward_shaping_func(self._reward, self._output_info(), self.cost_info)
53
54
55 def _output_info(self):
56 return {k: v for k, v in self._info.items() if k not in ('absorbed_energy', 'provided_energy')}
57
58 @property
59 def obs(self):
60 return self._obs
61

Callers 1

stepMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected