gym-examples 3.0.48__py3-none-any.whl → 3.0.50__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 +16 -15
- {gym_examples-3.0.48.dist-info → gym_examples-3.0.50.dist-info}/METADATA +1 -1
- gym_examples-3.0.50.dist-info/RECORD +7 -0
- gym_examples-3.0.48.dist-info/RECORD +0 -7
- {gym_examples-3.0.48.dist-info → gym_examples-3.0.50.dist-info}/WHEEL +0 -0
- {gym_examples-3.0.48.dist-info → gym_examples-3.0.50.dist-info}/top_level.txt +0 -0
gym_examples/__init__.py
CHANGED
gym_examples/envs/wsn_env.py
CHANGED
@@ -10,7 +10,7 @@ import torch.nn as nn
|
|
10
10
|
import torch.nn.functional as F
|
11
11
|
|
12
12
|
# Define the network parameters for the final reward function
|
13
|
-
|
13
|
+
input_dim = 4 # length of the individual rewards vector
|
14
14
|
output_dim = 1 # final reward
|
15
15
|
|
16
16
|
Eelec = 50e-9 # energy consumption per bit in joules
|
@@ -121,7 +121,8 @@ class WSNRoutingEnv(gym.Env):
|
|
121
121
|
self.total_latency += self.packet_latency[i] + latency_per_hop
|
122
122
|
self.packet_latency[i] = 0
|
123
123
|
|
124
|
-
rewards[i] = self.compute_individual_rewards(i, action)
|
124
|
+
# rewards[i] = self.compute_individual_rewards(i, action)
|
125
|
+
rewards[i] = np.ones(input_dim) # Reward for transmitting data to the base station
|
125
126
|
dones[i] = True
|
126
127
|
else:
|
127
128
|
distance = np.linalg.norm(self.sensor_positions[i] - self.sensor_positions[action])
|
@@ -253,7 +254,7 @@ class WSNRoutingEnv(gym.Env):
|
|
253
254
|
max_transmission_energy = self.transmission_energy(self.n_sensors * initial_number_of_packets, self.coverage_radius)
|
254
255
|
max_reception_energy = self.reception_energy(self.n_sensors * initial_number_of_packets)
|
255
256
|
max_total_energy = max_transmission_energy + max_reception_energy
|
256
|
-
normalized_total_energy = total_energy / max_total_energy
|
257
|
+
normalized_total_energy = total_energy / (max_total_energy + self.epsilon)
|
257
258
|
|
258
259
|
return np.clip(1 - normalized_total_energy, 0, 1)
|
259
260
|
|
@@ -264,7 +265,7 @@ class WSNRoutingEnv(gym.Env):
|
|
264
265
|
dispersion_remaining_energy = np.std(self.remaining_energy)
|
265
266
|
# Normalize the standard deviation of the remaining energy
|
266
267
|
max_dispersion_remaining_energy = initial_energy / 2 # maximum standard deviation of the remaining energy if n_sensors is even
|
267
|
-
normalized_dispersion_remaining_energy = dispersion_remaining_energy / max_dispersion_remaining_energy
|
268
|
+
normalized_dispersion_remaining_energy = dispersion_remaining_energy / (max_dispersion_remaining_energy + self.epsilon)
|
268
269
|
|
269
270
|
return np.clip(1 - normalized_dispersion_remaining_energy, 0, 1)
|
270
271
|
|
@@ -276,7 +277,7 @@ class WSNRoutingEnv(gym.Env):
|
|
276
277
|
if action == self.n_sensors:
|
277
278
|
normalized_number_of_packets = 0
|
278
279
|
else:
|
279
|
-
normalized_number_of_packets = self.number_of_packets[action] / max_number_of_packets
|
280
|
+
normalized_number_of_packets = self.number_of_packets[action] / (max_number_of_packets + self.epsilon)
|
280
281
|
|
281
282
|
return np.clip(1 - normalized_number_of_packets, 0, 1)
|
282
283
|
|
@@ -310,7 +311,7 @@ class WSNRoutingEnv(gym.Env):
|
|
310
311
|
dispersion_remaining_energy = np.std(self.remaining_energy)
|
311
312
|
# Normalize the standard deviation of the remaining energy
|
312
313
|
max_dispersion_remaining_energy = initial_energy / 2 # maximum standard deviation of the remaining energy if n_sensors is even
|
313
|
-
normalized_dispersion_remaining_energy = dispersion_remaining_energy / max_dispersion_remaining_energy
|
314
|
+
normalized_dispersion_remaining_energy = dispersion_remaining_energy / (max_dispersion_remaining_energy + self.epsilon)
|
314
315
|
|
315
316
|
return np.clip(1 - normalized_dispersion_remaining_energy, 0, 1)
|
316
317
|
|
@@ -321,7 +322,7 @@ class WSNRoutingEnv(gym.Env):
|
|
321
322
|
total_energy = self.n_sensors * initial_energy - np.sum(self.remaining_energy)
|
322
323
|
# Normalize the total energy consumption
|
323
324
|
max_total_energy = self.n_sensors * initial_energy
|
324
|
-
normalized_total_energy = total_energy / max_total_energy
|
325
|
+
normalized_total_energy = total_energy / (max_total_energy + self.epsilon)
|
325
326
|
|
326
327
|
return np.clip(1 - normalized_total_energy, 0, 1)
|
327
328
|
|
@@ -329,7 +330,7 @@ class WSNRoutingEnv(gym.Env):
|
|
329
330
|
'''
|
330
331
|
Compute the reward based on the packet delivery ratio
|
331
332
|
'''
|
332
|
-
packet_delivery_ratio = self.packets_delivered / self.total_packets_sent_by_sensors if self.total_packets_sent_by_sensors > 0 else 0
|
333
|
+
packet_delivery_ratio = self.packets_delivered / (self.total_packets_sent_by_sensors + self.epsilon) if self.total_packets_sent_by_sensors > 0 else 0
|
333
334
|
return np.clip(packet_delivery_ratio, 0, 1)
|
334
335
|
|
335
336
|
def compute_reward_latency(self):
|
@@ -338,7 +339,7 @@ class WSNRoutingEnv(gym.Env):
|
|
338
339
|
'''
|
339
340
|
# Normalize the average latency
|
340
341
|
max_latency = self.n_sensors * self.steps
|
341
|
-
normalized_latency = self.total_latency / max_latency
|
342
|
+
normalized_latency = self.total_latency / (max_latency + self.epsilon)
|
342
343
|
|
343
344
|
return np.clip(1 - normalized_latency, 0, 1)
|
344
345
|
|
@@ -346,9 +347,9 @@ class WSNRoutingEnv(gym.Env):
|
|
346
347
|
'''
|
347
348
|
Compute the reward based on the network throughput
|
348
349
|
'''
|
349
|
-
network_throughput = self.packets_delivered / self.steps if self.steps > 0 else 0
|
350
|
+
network_throughput = self.packets_delivered / (self.steps + self.epsilon) if self.steps > 0 else 0
|
350
351
|
maximum_throughput = self.n_sensors * initial_number_of_packets
|
351
|
-
normalized_throughput = network_throughput / maximum_throughput
|
352
|
+
normalized_throughput = network_throughput / (maximum_throughput + self.epsilon)
|
352
353
|
return np.clip(normalized_throughput, 0, 1)
|
353
354
|
|
354
355
|
|
@@ -382,15 +383,15 @@ class WSNRoutingEnv(gym.Env):
|
|
382
383
|
|
383
384
|
def get_metrics(self):
|
384
385
|
# Calculate network throughput
|
385
|
-
self.network_throughput = self.packets_delivered / self.steps if self.steps > 0 else 0
|
386
|
+
self.network_throughput = self.packets_delivered / (self.steps + self.epsilon) if self.steps > 0 else 0
|
386
387
|
# Calculate energy efficiency
|
387
|
-
self.energy_efficiency = self.packets_delivered / self.total_energy_consumed if self.total_energy_consumed > 0 else 0
|
388
|
+
self.energy_efficiency = self.packets_delivered / (self.total_energy_consumed + self.epsilon) if self.total_energy_consumed > 0 else 0
|
388
389
|
# Calculate packet delivery ratio
|
389
|
-
self.packet_delivery_ratio = self.packets_delivered / self.total_packets_sent_by_sensors if self.total_packets_sent_by_sensors > 0 else 0
|
390
|
+
self.packet_delivery_ratio = self.packets_delivered / (self.total_packets_sent_by_sensors + self.epsilon) if self.total_packets_sent_by_sensors > 0 else 0
|
390
391
|
# Calculate network lifetime
|
391
392
|
self.network_lifetime = self.first_node_dead_time if self.first_node_dead_time is not None else self.steps
|
392
393
|
# Calculate average latency
|
393
|
-
self.average_latency = self.total_latency / self.packets_delivered if self.packets_delivered > 0 else 0
|
394
|
+
self.average_latency = self.total_latency / (self.packets_delivered + self.epsilon) if self.packets_delivered > 0 else 0
|
394
395
|
|
395
396
|
return {
|
396
397
|
"network_throughput": self.network_throughput,
|
@@ -0,0 +1,7 @@
|
|
1
|
+
gym_examples/__init__.py,sha256=5bGZE79MM87Lsi9G4pt9pzYriZjrdSe-u9MppmESRFY,193
|
2
|
+
gym_examples/envs/__init__.py,sha256=lgMe4pyOuUTgTBUddM0iwMlETsYTwFShny6ifm8PGM8,53
|
3
|
+
gym_examples/envs/wsn_env.py,sha256=S4HYOGOsORx63BvKGPwYhDlRnVITWU6cY1ZN2lZLzDQ,19947
|
4
|
+
gym_examples-3.0.50.dist-info/METADATA,sha256=nUkf1NtLaCSfGMpgdwb7IzO_HIVUrbS5EfFsDFCzUtE,411
|
5
|
+
gym_examples-3.0.50.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
6
|
+
gym_examples-3.0.50.dist-info/top_level.txt,sha256=rJRksoAF32M6lTLBEwYzRdo4PgtejceaNnnZ3HeY_Rk,13
|
7
|
+
gym_examples-3.0.50.dist-info/RECORD,,
|
@@ -1,7 +0,0 @@
|
|
1
|
-
gym_examples/__init__.py,sha256=ZehSlz7OTIZqRjGB9S80rgzaj53-KcgOU7ejr9ugqts,193
|
2
|
-
gym_examples/envs/__init__.py,sha256=lgMe4pyOuUTgTBUddM0iwMlETsYTwFShny6ifm8PGM8,53
|
3
|
-
gym_examples/envs/wsn_env.py,sha256=E8T8JqXFAQDfCrgBwVk4bibgg7v3d5pqNhxCM-aZXDo,19625
|
4
|
-
gym_examples-3.0.48.dist-info/METADATA,sha256=_bmDbz-c9noRL-J7USttwAi02WKWq13A-fiq6JpPA2s,411
|
5
|
-
gym_examples-3.0.48.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
6
|
-
gym_examples-3.0.48.dist-info/top_level.txt,sha256=rJRksoAF32M6lTLBEwYzRdo4PgtejceaNnnZ3HeY_Rk,13
|
7
|
-
gym_examples-3.0.48.dist-info/RECORD,,
|
File without changes
|
File without changes
|