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 CHANGED
@@ -5,4 +5,4 @@ register(
5
5
  entry_point="gym_examples.envs:WSNRoutingEnv",
6
6
  )
7
7
 
8
- __version__ = "3.0.283"
8
+ __version__ = "3.0.284"
@@ -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 = - max_reward
122
- # rewards = 0
123
- dones = False
124
- actions = np.array([self.current_sensor, actions])
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
- next_sensor = self.find_next_sensor()
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 = rewards.item() if isinstance(rewards, torch.Tensor) else rewards # Convert the reward to a float
218
- if not dones:
219
- dones = all(self.remaining_energy[i] <= 0 or self.number_of_packets[i] == 0 for i in range(self.n_sensors))
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gym-examples
3
- Version: 3.0.283
3
+ Version: 3.0.284
4
4
  Summary: A custom environment for multi-agent reinforcement learning focused on WSN routing.
5
5
  Home-page: https://github.com/gedji/CODES.git
6
6
  Author: Georges Djimefo
@@ -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,,