def _reset(self): self.env.reset() self.model = Model( self.env) # warning: this breaks if env resets again start = self.Node(self.env._state, [], 0, False) frontier = PriorityQueue(key=self.eval_node( noisy=True)) # this is really part of the Meta Policy frontier.push(start) reward_to_state = defaultdict(lambda: -np.inf) best_done = None # Warning: state is mutable (and we mutate it!) self._state = self.State(frontier, reward_to_state, best_done) return self._state
def start_episode(self, state): self.history = Counter() self.model = Model(self.env) self.plan = iter(()) # start with no plan
# Update plots model.update_plots() model.remove_destroyed_agents() # TODO: Stop after 1000 iterations if model.agent_count() == 0: model.pause() def close(model): if file_handle: file_handle.close() stupid_model = Model( "StupidModel w. population graph (stupid13)", 100, 100, tile_size=5 ) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) stupid_model.line_chart(["current_bugs"], [(0, 0, 0)]) stupid_model.on_close(close) run(stupid_model)
for tile in model.tiles: tile.color = (tile.info["value"], tile.info["value"], 0) seekers = set([Seeker() for i in range(200)]) model.add_agents(seekers) def step(model): for tile in model.tiles: if tile.info["value"] > 255: tile.info["value"] = 0 tile.color = (tile.info["value"], tile.info["value"], 0) for agent in model.agents: agent.step(model) def invisible(model): model.invisible = not model.invisible if model.invisible: for a in model.agents: a.size = 0 else: for a in model.agents: a.size = 4 urban_model = Model("urban", 50, 50) urban_model.add_button("Setup", setup) urban_model.add_toggle_button("Go", step) urban_model.add_button("Invisible", invisible) run(urban_model)
model.update_plots() model.remove_destroyed_agents() # TODO: Stop after 1000 iterations if model.agent_count() == 0: model.pause() def close(model): if file_handle: file_handle.close() stupid_model = Model( "StupidModel w. gauss distribution of sizes (stupid14)", 100, 100, tile_size=5, ) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1) stupid_model.add_controller_row() stupid_model.add_slider("initialBugSizeMean", 1, 0, 10) stupid_model.add_slider("initialBugSizeSD", 5, 0, 10) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) stupid_model.line_chart(["current_bugs"], [(0, 0, 0)])
from agents import Model, Agent, run epidemic_model = Model("Epidemimodel", 100, 100) epidemic_model.add_agent(Agent()) run(epidemic_model)
other.update_visual() self.util = self.utility() def setup(model): model.reset() model.clear_plots() model.total_util = 0 model.movespeed = 0.2 people = set([Person() for i in range(20)]) model.add_agents(people) def step(model): model.total_util = 0 for a in model.agents: a.step(model) model.update_plots() model.remove_destroyed_agents() bnb_model = Model("Bread & butter economy", 50, 50) bnb_model.add_button("Setup", setup) bnb_model.add_button("Step", step) bnb_model.add_button("Go", step, toggle=True) bnb_model.add_controller_row() bnb_model.add_slider("movespeed", 0.1, 0.1, 1) bnb_model.line_chart(["total_util"], [(0, 0, 0)]) bnb_model.agent_line_chart("util") run(bnb_model)
# Food production for tile in model.tiles: food_prod = random.uniform(0, model.max_food_prod) tile.info["food"] += food_prod c = min(255, math.floor(tile.info["food"] * 255)) tile.color = (c, c, c) # Move all agents for agent in model.agents: agent.step(model) # Update plots model.update_plots() stupid_model = Model("StupidModel w. histograms (stupid06)", 100, 100, tile_size=5) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) run(stupid_model)
def step(model): # Food production for tile in model.tiles: food_prod = random.uniform(0, model.max_food_prod) tile.info["food"] += food_prod c = min(255, math.floor(tile.info["food"] * 255)) tile.color = (c, c, c) # Move all agents for agent in model.agents: agent.step(model) stupid_model = Model("StupidModel w. parameters and displays (stupid05)", 100, 100, tile_size=5) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider( "initial_bugs", 100, 10, 300, ) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1)
# Initialize tiles for tile in model.tiles: tile.info["food"] = 0.0 tile.color = (0, 0, 0) def step(model): # Food production for tile in model.tiles: food_prod = random.uniform(0, model.max_food_prod) tile.info["food"] += food_prod c = min(255, math.floor(tile.info["food"] * 255)) tile.color = (c, c, c) # Move all agents for agent in model.agents: agent.step(model) stupid_model = Model( "StupidModel w. habitat cells and resources (stupid03)", 100, 100, tile_size=5, ) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) run(stupid_model)
# Jump there if new_tile is not None: self.jump_to_tile(new_tile) # Does nothing, if all tiles are occupied def step(self, model): self.move() def setup(model): model.reset() model.initial_bugs = 100 # Create and add agents for i in range(int(model.initial_bugs)): model.add_agent(Bug()) def step(model): # Move all agents for agent in model.agents: agent.step(model) stupid_model = Model("Basic StupidModel (stupid01)", 100, 100, tile_size=5) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) run(stupid_model)
model.update_plots() model.remove_destroyed_agents() # TODO: Stop after 1000 iterations if model.agent_count() == 0: model.pause() def close(model): if file_handle: file_handle.close() stupid_model = Model( "StupidModel w. mortality and reproduction (stupid12)", 100, 100, tile_size=5, ) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) stupid_model.on_close(close) run(stupid_model)
model.remove_destroyed_agents() # TODO: Stop after 1000 iterations if model.agent_count() == 0: model.pause() def close(model): if file_handle: file_handle.close() stupid_model = Model( "StupidModel - reading habitat data from file (stupid15)", 100, 100, tile_size=3, cell_data_file="stupid.cell", ) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("initialBugSizeMean", 1, 0, 10) stupid_model.add_slider("initialBugSizeSD", 5, 0, 10) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) stupid_model.line_chart(["current_bugs"], [(0, 0, 0)])
model.remove_destroyed_agents() # TODO: Stop after 1000 iterations if model.agent_count() == 0: model.pause() def close(model): if file_handle: file_handle.close() stupid_model = Model( "StupidModel w. multiple agent types (stupid16)", 100, 100, tile_size=3, cell_data_file="stupid.cell", ) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 0.1, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("initialBugSizeMean", 1, 0, 10) stupid_model.add_slider("initialBugSizeSD", 5, 0, 10) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) stupid_model.line_chart(["current_bugs"], [(0, 0, 0)])
def start_episode(self, state): self.history = Counter() self.model = Model(self.env)
# Food production for tile in model.tiles: food_prod = random.uniform(0, model.max_food_prod) tile.info["food"] += food_prod c = min(255, math.floor(tile.info["food"] * 255)) tile.color = (c, c, c) # Move all agents for agent in model.agents: agent.step(model) # Update plots model.update_plots() stupid_model = Model("StupidModel w. stop condition (stupid07)", 100, 100, tile_size=5) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) run(stupid_model)
from random import randint from agents import Model, Agent, AgentShape, run miner_model = Model("MinerBots", 100, 100) class Robot(Agent): def setup(self, model): self.color = (100, 100, 100) self.direction = randint(0, 359) self.loaded = False self.x = model.width / 2 self.y = model.height / 2 def step(self, model): if self.loaded: self.point_towards(model.width / 2, model.height / 2) else: self.direction += randint(0, 20) - 10 self.forward() self.speed = model.speed_factor t = self.current_tile() if t.info["has_mineral"] and not self.loaded: t.info["has_mineral"] = False t.color = (200, 100, 0) self.color = (100, 100, 255) self.loaded = True class Homebase(Agent): def setup(self, model):
def setup(model): model.reset() model.clear_plots() model.total_util = 0 model.BNP = 0 people = set([Person() for i in range(20)]) model.add_agents(people) def step(model): model.BNP = 0 for a in model.agents: a.step(model) model.BNP += a.utility() model.update_plots() model.remove_destroyed_agents() bnb_model = Model("Bread & butter economy during pandemic", 50, 50) bnb_model.add_button("Setup", setup) bnb_model.add_button("Step", step) bnb_model.add_button("Go", step, toggle=True) bnb_model.add_controller_row() bnb_model.add_slider("movespeed", 0.5, 0.1, 1) bnb_model.add_checkbox("Decay") bnb_model.line_chart(["BNP"], [(0, 0, 0)]) bnb_model.show_direction = False run(bnb_model)
# Write min, average and max bug size to file file_handle.write( str(bug_min) + " " + str(bug_mean) + " " + str(bug_max) + "\n") # Update plots model.update_plots() def close(model): if file_handle: file_handle.close() stupid_model = Model("StupidModel w. file output (stupid08)", 100, 100, tile_size=5) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) stupid_model.add_controller_row() stupid_model.add_slider("initial_bugs", 100, 10, 300) stupid_model.add_controller_row() stupid_model.add_slider("max_food_eat", 1.0, 0.1, 1.0) stupid_model.add_controller_row() stupid_model.add_slider("max_food_prod", 0.01, 0.01, 0.1) stupid_model.histogram("grow_size", 0, 10, 5, (0, 0, 0)) stupid_model.on_close(close) run(stupid_model)
self.size_to_color() def step(self, model): self.grow() self.move() def setup(model): model.reset() model.initial_bugs = 100 # Create and add agents for i in range(int(model.initial_bugs)): model.add_agent(Bug()) def step(model): # Move all agents for agent in model.agents: agent.step(model) stupid_model = Model("StupidModel w. Bug Growth (stupid02)", 100, 100, tile_size=5) stupid_model.add_button("setup", setup) stupid_model.add_button("step", step) stupid_model.add_toggle_button("go", step) run(stupid_model)