mirror of
https://github.com/illiumst/marl-factory-grid.git
synced 2025-05-23 15:26:43 +02:00
updated base factory
This commit is contained in:
parent
ed10b3225d
commit
a4a4ab067e
@ -45,19 +45,16 @@ class BaseFactory(object):
|
|||||||
collisions_vec = self.state[:, x, y].copy() # otherwise you overwrite the grid/state
|
collisions_vec = self.state[:, x, y].copy() # otherwise you overwrite the grid/state
|
||||||
collisions_vec[i+1] = 0 # no self-collisions
|
collisions_vec[i+1] = 0 # no self-collisions
|
||||||
collision_vecs.append(collisions_vec)
|
collision_vecs.append(collisions_vec)
|
||||||
self.handle_collisions(collisions_vec)
|
reward, info = self.step_core(collisions_vec, actions, r)
|
||||||
r += self.step_core(collisions_vec, actions, r)
|
r += reward
|
||||||
if self.steps >= self.max_steps:
|
if self.steps >= self.max_steps:
|
||||||
self.done = True
|
self.done = True
|
||||||
return self.state, r, self.done, {}
|
return self.state, r, self.done, info
|
||||||
|
|
||||||
def make_move(self, agent_i, old_pos, new_pos):
|
def make_move(self, agent_i, old_pos, new_pos):
|
||||||
(x, y), (x_new, y_new) = old_pos, new_pos
|
(x, y), (x_new, y_new) = old_pos, new_pos
|
||||||
self.state[agent_i+1, x, y] = 0
|
self.state[agent_i+1, x, y] = 0
|
||||||
self.state[agent_i+1, x_new, y_new] = 1
|
self.state[agent_i+1, x_new, y_new] = 1
|
||||||
|
|
||||||
def handle_collisions(self, vecs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def step_core(self, collisions_vec, actions, r):
|
def step_core(self, collisions_vec, actions, r):
|
||||||
return 0
|
return 0, {}
|
||||||
|
@ -11,13 +11,17 @@ class SimpleFactory(BaseFactory):
|
|||||||
super().reset()
|
super().reset()
|
||||||
dirt_slice = np.zeros((1, *self.state.shape[1:]))
|
dirt_slice = np.zeros((1, *self.state.shape[1:]))
|
||||||
self.state = np.concatenate((self.state, dirt_slice)) # dirt is now the last slice
|
self.state = np.concatenate((self.state, dirt_slice)) # dirt is now the last slice
|
||||||
free_for_dirt = self.state.sum(0)
|
free_for_dirt = self.free_for_dirt()
|
||||||
free_for_dirt = np.argwhere(free_for_dirt == 0)
|
|
||||||
np.random.shuffle(free_for_dirt)
|
|
||||||
for x, y in free_for_dirt[:self.max_dirt]:
|
for x, y in free_for_dirt[:self.max_dirt]:
|
||||||
self.state[-1, x, y] = 1
|
self.state[-1, x, y] = 1
|
||||||
print(self.state)
|
print(self.state)
|
||||||
|
|
||||||
|
def free_for_dirt(self):
|
||||||
|
free_for_dirt = self.state.sum(0)
|
||||||
|
free_for_dirt = np.argwhere(free_for_dirt == 0)
|
||||||
|
np.random.shuffle(free_for_dirt)
|
||||||
|
return free_for_dirt
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
factory = SimpleFactory(n_agents=1, max_dirt=8)
|
factory = SimpleFactory(n_agents=1, max_dirt=8)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user