add num_max_agents, cleanup
This commit is contained in:
parent
a8cb347e4a
commit
30661542b5
16
agent.py
16
agent.py
@ -88,6 +88,7 @@ class RandomWalkerAnt(Agent):
|
|||||||
for neighbor in self.front_neighbors:
|
for neighbor in self.front_neighbors:
|
||||||
if self.model.grid.is_food(neighbor):
|
if self.model.grid.is_food(neighbor):
|
||||||
self.drop_pheromone = "B"
|
self.drop_pheromone = "B"
|
||||||
|
self.look_for_pheromone = "A"
|
||||||
self.sensitivity = self.sensitivity_0
|
self.sensitivity = self.sensitivity_0
|
||||||
|
|
||||||
self.prev_pos = neighbor
|
self.prev_pos = neighbor
|
||||||
@ -100,17 +101,16 @@ class RandomWalkerAnt(Agent):
|
|||||||
self.drop_pheromone = "A"
|
self.drop_pheromone = "A"
|
||||||
self.sensitivity = self.sensitivity_0
|
self.sensitivity = self.sensitivity_0
|
||||||
|
|
||||||
#TODO: Do we flip the ant here or reset prev pos?
|
|
||||||
# For now, flip ant just like at food
|
|
||||||
self.prev_pos = neighbor
|
self.prev_pos = neighbor
|
||||||
self._next_pos = self.pos
|
self._next_pos = self.pos
|
||||||
|
|
||||||
# recruit new ants
|
# recruit new ants
|
||||||
for agent_id in self.model.get_unique_ids(self.model.num_new_recruits):
|
for agent_id in self.model.get_unique_ids(self.model.num_new_recruits):
|
||||||
agent = RandomWalkerAnt(unique_id=agent_id, model=self.model, look_for_pheromone="B", drop_pheromone="A")
|
if self.model.schedule.get_agent_count() < self.model.num_max_agents:
|
||||||
agent._next_pos = self.pos
|
agent = RandomWalkerAnt(unique_id=agent_id, model=self.model, look_for_pheromone="B", drop_pheromone="A")
|
||||||
self.model.schedule.add(agent)
|
agent._next_pos = self.pos
|
||||||
self.model.grid.place_agent(agent, pos=neighbor)
|
self.model.schedule.add(agent)
|
||||||
|
self.model.grid.place_agent(agent, pos=neighbor)
|
||||||
|
|
||||||
# follow positive gradient
|
# follow positive gradient
|
||||||
if self.look_for_pheromone is not None:
|
if self.look_for_pheromone is not None:
|
||||||
@ -176,7 +176,9 @@ class RandomWalkerAnt(Agent):
|
|||||||
assert(self.prev_pos is not None)
|
assert(self.prev_pos is not None)
|
||||||
all_neighbors = self.neighbors()
|
all_neighbors = self.neighbors()
|
||||||
neighbors_at_the_back = self.neighbors(pos=self.prev_pos, include_center=True)
|
neighbors_at_the_back = self.neighbors(pos=self.prev_pos, include_center=True)
|
||||||
return list(filter(lambda i: i not in neighbors_at_the_back, all_neighbors))
|
front_neighbors = list(filter(lambda i: i not in neighbors_at_the_back, all_neighbors))
|
||||||
|
assert(len(front_neighbors) == 3) # not sure whether always the case, used for debugging
|
||||||
|
return front_neighbors
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def front_neighbor(self):
|
def front_neighbor(self):
|
||||||
|
21
main.py
21
main.py
@ -11,6 +11,7 @@ from agent import RandomWalkerAnt
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from mesa.space import Coordinate
|
from mesa.space import Coordinate
|
||||||
|
from mesa.datacollection import DataCollector
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
check_pheromone_exponential_decay()
|
check_pheromone_exponential_decay()
|
||||||
@ -22,9 +23,6 @@ def check_pheromone_exponential_decay():
|
|||||||
Check whether wanted exponential decay of pheromones on grid is done correctly
|
Check whether wanted exponential decay of pheromones on grid is done correctly
|
||||||
shows plot of pheromone placed on grid vs. equivalent exponential decay function
|
shows plot of pheromone placed on grid vs. equivalent exponential decay function
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from mesa.datacollection import DataCollector
|
|
||||||
|
|
||||||
width = 21
|
width = 21
|
||||||
height = width
|
height = width
|
||||||
num_initial_roamers = 0
|
num_initial_roamers = 0
|
||||||
@ -46,9 +44,6 @@ def check_pheromone_exponential_decay():
|
|||||||
model.run_model()
|
model.run_model()
|
||||||
a_test = model.datacollector.get_model_vars_dataframe()["pheromone_a"]
|
a_test = model.datacollector.get_model_vars_dataframe()["pheromone_a"]
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
plt.figure()
|
plt.figure()
|
||||||
xx = np.linspace(0,1000, 10000)
|
xx = np.linspace(0,1000, 10000)
|
||||||
yy = a_test[0]*np.exp(-model.decay_rates["A"]*xx)
|
yy = a_test[0]*np.exp(-model.decay_rates["A"]*xx)
|
||||||
@ -66,8 +61,6 @@ def check_ant_sensitivity_linear_decay():
|
|||||||
shows plot of ant sensitivity placed on grid vs. equivalent linear decay function
|
shows plot of ant sensitivity placed on grid vs. equivalent linear decay function
|
||||||
not food sources are on the grid for this run to not reset sensitivities
|
not food sources are on the grid for this run to not reset sensitivities
|
||||||
"""
|
"""
|
||||||
from mesa.datacollection import DataCollector
|
|
||||||
|
|
||||||
width = 50
|
width = 50
|
||||||
height = width
|
height = width
|
||||||
num_initial_roamers = 1
|
num_initial_roamers = 1
|
||||||
@ -91,9 +84,6 @@ def check_ant_sensitivity_linear_decay():
|
|||||||
model.run_model()
|
model.run_model()
|
||||||
a_test = model.datacollector.get_agent_vars_dataframe().reset_index()["sensitivity"]
|
a_test = model.datacollector.get_agent_vars_dataframe().reset_index()["sensitivity"]
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
plt.figure()
|
plt.figure()
|
||||||
xx = np.linspace(0,1000, 10000)
|
xx = np.linspace(0,1000, 10000)
|
||||||
yy = a_test[0] - start*xx
|
yy = a_test[0] - start*xx
|
||||||
@ -109,9 +99,6 @@ def check_ant_pheromone_exponential_decay():
|
|||||||
Check whether wanted exponential decay of pheromone drop rate for ants is correctly modeled
|
Check whether wanted exponential decay of pheromone drop rate for ants is correctly modeled
|
||||||
shows plot of pheromone placed on grid vs. equivalent exponential decay function
|
shows plot of pheromone placed on grid vs. equivalent exponential decay function
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from mesa.datacollection import DataCollector
|
|
||||||
|
|
||||||
width = 50
|
width = 50
|
||||||
height = width
|
height = width
|
||||||
num_initial_roamers = 1
|
num_initial_roamers = 1
|
||||||
@ -134,10 +121,6 @@ def check_ant_pheromone_exponential_decay():
|
|||||||
model.run_model()
|
model.run_model()
|
||||||
a_test = model.datacollector.get_agent_vars_dataframe().reset_index()["pheromone_drop_rate"]
|
a_test = model.datacollector.get_agent_vars_dataframe().reset_index()["pheromone_drop_rate"]
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
|
|
||||||
plt.figure()
|
plt.figure()
|
||||||
xx = np.linspace(0,1000, 10000)
|
xx = np.linspace(0,1000, 10000)
|
||||||
yy = a_test[0]*np.exp(-model.schedule.agents[0].betas["A"]*xx)
|
yy = a_test[0]*np.exp(-model.schedule.agents[0].betas["A"]*xx)
|
||||||
@ -148,8 +131,6 @@ def check_ant_pheromone_exponential_decay():
|
|||||||
|
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
7
model.py
7
model.py
@ -39,9 +39,10 @@ class ActiveWalkerModel(Model):
|
|||||||
}
|
}
|
||||||
|
|
||||||
for agent_id in self.get_unique_ids(num_initial_roamers):
|
for agent_id in self.get_unique_ids(num_initial_roamers):
|
||||||
agent = RandomWalkerAnt(unique_id=agent_id, model=self, look_for_pheromone="A", drop_pheromone="A")
|
if self.schedule.get_agent_count() < self.num_max_agents:
|
||||||
self.schedule.add(agent)
|
agent = RandomWalkerAnt(unique_id=agent_id, model=self, look_for_pheromone="A", drop_pheromone="A")
|
||||||
self.grid.place_agent(agent, pos=nest_position)
|
self.schedule.add(agent)
|
||||||
|
self.grid.place_agent(agent, pos=nest_position)
|
||||||
|
|
||||||
for _ in range(num_food_sources):
|
for _ in range(num_food_sources):
|
||||||
self.grid.add_food(food_size)
|
self.grid.add_food(food_size)
|
||||||
|
@ -23,9 +23,9 @@ def setup(params=None):
|
|||||||
if params is None:
|
if params is None:
|
||||||
params = {
|
params = {
|
||||||
"width": 50, "height": 50,
|
"width": 50, "height": 50,
|
||||||
"num_max_agents" : 100,
|
"num_max_agents" : 1000,
|
||||||
"nest_position" : (25,25),
|
"nest_position" : (25,25),
|
||||||
"num_initial_roamers" : 5,
|
"num_initial_roamers" : 20,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user