gym-examples 3.0.283__py3-none-any.whl → 3.0.284__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gym_examples/__init__.py +1 -1
- gym_examples/envs/wsn_env.py +28 -38
- {gym_examples-3.0.283.dist-info → gym_examples-3.0.284.dist-info}/METADATA +1 -1
- gym_examples-3.0.284.dist-info/RECORD +7 -0
- gym_examples-3.0.283.dist-info/RECORD +0 -7
- {gym_examples-3.0.283.dist-info → gym_examples-3.0.284.dist-info}/WHEEL +0 -0
- {gym_examples-3.0.283.dist-info → gym_examples-3.0.284.dist-info}/top_level.txt +0 -0
gym_examples/__init__.py
CHANGED
gym_examples/envs/wsn_env.py
CHANGED
@@ -74,7 +74,6 @@ class WSNRoutingEnv(gym.Env):
|
|
74
74
|
self.episode_count = 0
|
75
75
|
self.scale_displacement = 0.01 * (upper_bound - lower_bound) # scale of the random displacement of the sensors
|
76
76
|
self.epsilon = 1e-10 # small value to avoid division by zero
|
77
|
-
self.current_sensor = 0 # Index of the current sensor
|
78
77
|
|
79
78
|
# Define observation space
|
80
79
|
self.observation_space = Tuple(
|
@@ -84,7 +83,8 @@ class WSNRoutingEnv(gym.Env):
|
|
84
83
|
# self.action_space = Tuple(tuple([Discrete(self.n_sensors + 1)] * self.n_agents))
|
85
84
|
# self.action_space = MultiDiscrete([self.n_sensors + 1] * self.n_agents)
|
86
85
|
# self.action_space = MultiDiscrete([self.n_agents, self.n_sensors + 1])
|
87
|
-
self.action_space = Discrete(self.n_sensors + 1) # +1 for the base station
|
86
|
+
# self.action_space = Discrete(self.n_sensors + 1) # +1 for the base station
|
87
|
+
self.action_space = Discrete((self.n_sensors + 1)**self.n_agents)
|
88
88
|
|
89
89
|
self.reset()
|
90
90
|
|
@@ -118,11 +118,10 @@ class WSNRoutingEnv(gym.Env):
|
|
118
118
|
|
119
119
|
def step(self, actions):
|
120
120
|
self.steps += 1
|
121
|
-
rewards = -
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
for i, action in [actions]:
|
121
|
+
rewards = [-max_reward] * self.n_sensors
|
122
|
+
dones = [False] * self.n_sensors
|
123
|
+
actions = self.to_base_n(actions, self.n_sensors + 1)
|
124
|
+
for i, action in enumerate(actions):
|
126
125
|
if self.remaining_energy[i] <= 0 or self.number_of_packets[i] <= 0:
|
127
126
|
continue # Skip if sensor has no energy left or no packets to transmit
|
128
127
|
|
@@ -137,11 +136,6 @@ class WSNRoutingEnv(gym.Env):
|
|
137
136
|
transmission_energy = self.transmission_energy(self.number_of_packets[i], self.distance_to_base[i])
|
138
137
|
if self.remaining_energy[i] < transmission_energy:
|
139
138
|
self.remaining_energy[i] = 0
|
140
|
-
next_sensor = self.find_next_sensor()
|
141
|
-
if next_sensor is None:
|
142
|
-
dones = True
|
143
|
-
else:
|
144
|
-
self.current_sensor = next_sensor
|
145
139
|
continue # Skip if the sensor does not have enough energy to transmit data to the base station
|
146
140
|
|
147
141
|
self.update_sensor_energies(i, transmission_energy)
|
@@ -153,12 +147,8 @@ class WSNRoutingEnv(gym.Env):
|
|
153
147
|
self.total_latency += self.packet_latency[i] + latency_per_hop
|
154
148
|
self.packet_latency[i] = 0
|
155
149
|
|
156
|
-
rewards = max_reward # Reward for transmitting data to the base station
|
157
|
-
|
158
|
-
if next_sensor is None:
|
159
|
-
dones = True
|
160
|
-
else:
|
161
|
-
self.current_sensor = next_sensor
|
150
|
+
rewards[i] = max_reward # Reward for transmitting data to the base station
|
151
|
+
dones[i] = True
|
162
152
|
else:
|
163
153
|
distance = np.linalg.norm(self.sensor_positions[i] - self.sensor_positions[action])
|
164
154
|
if distance > self.coverage_radius:
|
@@ -167,21 +157,11 @@ class WSNRoutingEnv(gym.Env):
|
|
167
157
|
transmission_energy = self.transmission_energy(self.number_of_packets[i], distance)
|
168
158
|
reception_energy = self.reception_energy(self.number_of_packets[i])
|
169
159
|
if self.remaining_energy[i] < transmission_energy:
|
170
|
-
self.remaining_energy[i] = 0
|
171
|
-
next_sensor = self.find_next_sensor()
|
172
|
-
if next_sensor is None:
|
173
|
-
dones = True
|
174
|
-
else:
|
175
|
-
self.current_sensor = next_sensor
|
160
|
+
self.remaining_energy[i] = 0
|
176
161
|
continue # Skip if the sensor does not have enough energy to transmit data to the next hop
|
177
162
|
if self.remaining_energy[action] < reception_energy:
|
178
163
|
self.number_of_packets[i] = 0
|
179
164
|
self.remaining_energy[action] = 0
|
180
|
-
next_sensor = self.find_next_sensor()
|
181
|
-
if next_sensor is None:
|
182
|
-
dones = True
|
183
|
-
else:
|
184
|
-
self.current_sensor = next_sensor
|
185
165
|
continue # Skip if the next hop does not have enough energy to receive data
|
186
166
|
|
187
167
|
self.update_sensor_energies(i, transmission_energy)
|
@@ -198,7 +178,6 @@ class WSNRoutingEnv(gym.Env):
|
|
198
178
|
# Update the number of packets
|
199
179
|
self.number_of_packets[action] += self.number_of_packets[i]
|
200
180
|
|
201
|
-
self.current_sensor = action
|
202
181
|
self.number_of_packets[i] = 0 # Reset the number of packets of the sensor i
|
203
182
|
# Calculate final reward
|
204
183
|
# rewards[i] = self.compute_attention_rewards(rewards[i])
|
@@ -214,9 +193,10 @@ class WSNRoutingEnv(gym.Env):
|
|
214
193
|
|
215
194
|
self.get_metrics()
|
216
195
|
|
217
|
-
rewards =
|
218
|
-
|
219
|
-
|
196
|
+
rewards = [reward.item() if isinstance(reward, torch.Tensor) else reward for reward in rewards] # Convert the reward to a float
|
197
|
+
for i in range(self.n_sensors):
|
198
|
+
if not dones[i]:
|
199
|
+
dones[i] = self.remaining_energy[i] <= 0 or self.number_of_packets[i] == 0
|
220
200
|
|
221
201
|
return self._get_obs(), rewards, dones, self.get_metrics()
|
222
202
|
|
@@ -225,8 +205,7 @@ class WSNRoutingEnv(gym.Env):
|
|
225
205
|
return [{'remaining_energy': np.array([e]),
|
226
206
|
'consumption_energy': np.array([initial_energy - e]),
|
227
207
|
'sensor_positions': p,
|
228
|
-
'number_of_packets': np.array([d])
|
229
|
-
'curent_sensor': np.array([self.current_sensor])
|
208
|
+
'number_of_packets': np.array([d])
|
230
209
|
} for e, p, d in zip(self.remaining_energy, self.sensor_positions, self.number_of_packets)]
|
231
210
|
|
232
211
|
|
@@ -235,8 +214,7 @@ class WSNRoutingEnv(gym.Env):
|
|
235
214
|
('remaining_energy', Box(low=0, high=initial_energy, shape=(1,), dtype=np.float64)),
|
236
215
|
('consumption_energy', Box(low=0, high=initial_energy, shape=(1,), dtype=np.float64)),
|
237
216
|
('sensor_positions', Box(low=lower_bound, high=upper_bound, shape=(2,), dtype=np.float64)),
|
238
|
-
('number_of_packets', Box(low=0, high=self.n_sensors * initial_number_of_packets + 1, shape=(1,), dtype=int))
|
239
|
-
('current_sensor', Box(low=0, high=self.n_sensors - 1, shape=(1,), dtype=int))
|
217
|
+
('number_of_packets', Box(low=0, high=self.n_sensors * initial_number_of_packets + 1, shape=(1,), dtype=int))
|
240
218
|
]))
|
241
219
|
|
242
220
|
|
@@ -498,4 +476,16 @@ class WSNRoutingEnv(gym.Env):
|
|
498
476
|
next_index = (self.current_sensor + offset) % self.n_sensors
|
499
477
|
if self.remaining_energy[next_index] > 0 and self.number_of_packets[next_index] > 0:
|
500
478
|
return next_index
|
501
|
-
return None # If no such sensor is found
|
479
|
+
return None # If no such sensor is found
|
480
|
+
|
481
|
+
|
482
|
+
def to_base_n(self, number, base):
|
483
|
+
"""Convert a number to a base-n number."""
|
484
|
+
if number == 0:
|
485
|
+
return [0] * (base - 1)
|
486
|
+
|
487
|
+
digits = []
|
488
|
+
while number:
|
489
|
+
digits.append(number % base)
|
490
|
+
number //= base
|
491
|
+
return digits[::-1] # Reverse the list to get the correct order
|
@@ -0,0 +1,7 @@
|
|
1
|
+
gym_examples/__init__.py,sha256=SbYVbDAngXH8S9SM6aQijqGwMUt-FSXYtOV00-_0ahI,166
|
2
|
+
gym_examples/envs/__init__.py,sha256=lgMe4pyOuUTgTBUddM0iwMlETsYTwFShny6ifm8PGM8,53
|
3
|
+
gym_examples/envs/wsn_env.py,sha256=VzbARUwPIdS6-RkQND3dxx0lLheFpP6NqaBwT5JY91o,23503
|
4
|
+
gym_examples-3.0.284.dist-info/METADATA,sha256=U9huJCLpn-NIXHhbpD97MFIY_WpCrOxX7ebSgLBsf_w,412
|
5
|
+
gym_examples-3.0.284.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
6
|
+
gym_examples-3.0.284.dist-info/top_level.txt,sha256=rJRksoAF32M6lTLBEwYzRdo4PgtejceaNnnZ3HeY_Rk,13
|
7
|
+
gym_examples-3.0.284.dist-info/RECORD,,
|
@@ -1,7 +0,0 @@
|
|
1
|
-
gym_examples/__init__.py,sha256=B6nFhjmZ3o9wglL3vYZps18eP8W7b436z2-pBFs_-2w,166
|
2
|
-
gym_examples/envs/__init__.py,sha256=lgMe4pyOuUTgTBUddM0iwMlETsYTwFShny6ifm8PGM8,53
|
3
|
-
gym_examples/envs/wsn_env.py,sha256=pi4-ErjIpxM1jrWjMr8vbUHmp0YSY9YaGSTXsL2k50I,24121
|
4
|
-
gym_examples-3.0.283.dist-info/METADATA,sha256=0J7nhDUnmHi_7HwHNYycQqRikH_nlbSNNGmVVf6ujm0,412
|
5
|
-
gym_examples-3.0.283.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
6
|
-
gym_examples-3.0.283.dist-info/top_level.txt,sha256=rJRksoAF32M6lTLBEwYzRdo4PgtejceaNnnZ3HeY_Rk,13
|
7
|
-
gym_examples-3.0.283.dist-info/RECORD,,
|
File without changes
|
File without changes
|