Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
from mesa.time import RandomActivation
from mesa.visualization.TextVisualization import TextVisualization, TextGrid
from wolf_sheep.random_walk import RandomWalker
class WalkerAgent(RandomWalker):
'''
Agent which only walks around.
'''
def step(self):
self.random_move()
class WalkerWorld(Model):
'''
Random walker world.
'''
height = 10
width = 10
def __init__(self, height, width, agent_count):
'''
Create a new WalkerWorld.
Args:
height, width: World size.
agent_count: How many agents to create.
'''
self.height = height
self.width = width
class MockAgent(Agent):
"""
Minimalistic agent implementation for testing purposes
"""
def __init__(self, unique_id, model, val):
super().__init__(unique_id, model)
self.unique_id = unique_id
self.val = val
def step(self):
self.val += 1
class MockModel(Model):
"""
Minimalistic model for testing purposes
"""
def __init__(self, variable_model_param, variable_agent_param,
fixed_model_param=None, schedule=None, **kwargs):
super().__init__()
self.schedule = BaseScheduler(None) if schedule is None else schedule
self.variable_model_param = variable_model_param
self.variable_agent_param = variable_agent_param
self.fixed_model_param = fixed_model_param
self.n_agents = kwargs.get('n_agents', NUM_AGENTS)
self.running = True
self.init_agents()
def init_agents(self):
for i in range(self.n_agents):
import unittest
from mesa.time import RandomActivation
from mesa.datacollection import DataCollector
from mesa import Model, Agent
import numpy as np
class LifeTimeModel(Model):
'''Simple model for running models with a finite life'''
def __init__(self, agent_lifetime=1, n_agents=10):
super().__init__()
self.agent_lifetime = agent_lifetime
self.n_agents = n_agents
# keep track of the the remaining life of an agent and
# how many ticks it has seen
self.datacollector = DataCollector(
agent_reporters={"remaining_life": lambda a: a.remaining_life,
"steps": lambda a: a.steps})
self.current_ID = 0
self.schedule = RandomActivation(self)
self.advances = 0
def stage_one(self):
self.model.log.append(self.unique_id + "_1")
def stage_two(self):
self.model.log.append(self.unique_id + "_2")
def advance(self):
self.advances += 1
def step(self):
self.steps += 1
class MockModel(Model):
def __init__(self, shuffle=False, activation=STAGED):
'''
Creates a Model instance with a schedule
Args:
shuffle (Bool): whether or not to instantiate a scheduler
with shuffling.
This option is only used for
StagedActivation schedulers.
activation (str): which kind of scheduler to use.
'random' creates a RandomActivation scheduler.
'staged' creates a StagedActivation scheduler.
The default scheduler is a BaseScheduler.
'''
self.log = []
http://ccl.northwestern.edu/netlogo/models/Sugarscape2ConstantGrowback.
Center for Connected Learning and Computer-Based Modeling,
Northwestern University, Evanston, IL.
'''
import random
from mesa import Model
from mesa.space import MultiGrid
from mesa.datacollection import DataCollector
from .agents import SsAgent, Sugar
from .schedule import RandomActivationByBreed
class SugarscapeCg(Model):
'''
Sugarscape 2 Constant Growback
'''
verbose = True # Print-monitoring
def __init__(self, height=50, width=50,
initial_population=100):
'''
Create a new Constant Growback model with the given parameters.
Args:
initial_population: Number of population to start with
'''
# Set parameters
A Mesa implementation of Craig Reynolds's Boids flocker model.
Uses numpy arrays to represent vectors.
'''
import random
import numpy as np
from mesa import Model
from mesa.space import ContinuousSpace
from mesa.time import RandomActivation
from .boid import Boid
class BoidModel(Model):
'''
Flocker model class. Handles agent creation, placement and scheduling.
'''
def __init__(self,
population=100,
width=100,
height=100,
speed=1,
vision=10,
separation=2,
cohere=0.025,
separate=0.25,
match=0.04):
'''
Create a new Flockers model.
from mesa.time import RandomActivation
from mesa.space import MultiGrid
from mesa.datacollection import DataCollector
#Global variables
treasury = 0
def compute_gini(model):
agent_wealths = [agent.wealth for agent in model.schedule.agents]
x = sorted(agent_wealths)
N = model.num_agents
B = sum(xi * (N - i) for i, xi in enumerate(x)) / (N * sum(x))
return (1 + (1 / N) - 2 * B)
class WealthModel(Model):
"""A model with some number of agents."""
global treasury
def __init__(self, N, width, height):
self.num_agents = N
self.running = True
self.grid = MultiGrid(height, width, True)
self.schedule = RandomActivation(self)
self.datacollector = DataCollector(
model_reporters={"Gini": compute_gini},
agent_reporters={"Wealth": lambda a: a.wealth}
)
# Create agents
for i in range(self.num_agents):
a = WealthAgent(i, self)
self.schedule.add(a)
# Add the agent to a random grid cell
polled_opinions = neighbors_opinion.most_common()
tied_opinions = []
for neighbor in polled_opinions:
if neighbor[1] == polled_opinions[0][1]:
tied_opinions.append(neighbor)
self._next_state = random.choice(tied_opinions)[0]
def advance(self):
'''
Set the state of the agent to the next state
'''
self._state = self._next_state
class ColorPatches(Model):
'''
represents a 2D lattice where agents live
'''
def __init__(self, width=20, height=20):
'''
Create a 2D lattice with strict borders where agents live
The agents next state is first determined before updating the grid
'''
self._grid = Grid(width, height, torus=False)
self._schedule = SimultaneousActivation(self)
# self._grid.coord_iter()
# --> should really not return content + col + row
# -->but only col & row
'''
from __future__ import division # For Python 2.x compatibility
import random
from mesa import Model, Agent
from mesa.time import RandomActivation
from mesa.space import SingleGrid
from mesa.datacollection import DataCollector
from mesa.visualization.TextVisualization import (TextData, TextGrid,
TextVisualization)
class SchellingModel(Model):
'''
Model class for the Schelling segregation model.
'''
def __init__(self, height, width, density, minority_pc, homophily):
'''
'''
self.height = height
self.width = width
self.density = density
self.minority_pc = minority_pc
self.homophily = homophily
self.schedule = RandomActivation(self)
self.grid = SingleGrid(height, width, torus=True)
from mesa import Model
from mesa.time import BaseScheduler, RandomActivation, SimultaneousActivation
from mesa.space import SingleGrid
from mesa.datacollection import DataCollector
from .agent import PDAgent
class PdGrid(Model):
''' Model class for iterated, spatial prisoner's dilemma model. '''
schedule_types = {"Sequential": BaseScheduler,
"Random": RandomActivation,
"Simultaneous": SimultaneousActivation}
# This dictionary holds the payoff for this agent,
# keyed on: (my_move, other_move)
payoff = {("C", "C"): 1,
("C", "D"): 0,
("D", "C"): 1.6,
("D", "D"): 0}
def __init__(self, height=50, width=50, schedule_type="Random", payoffs=None):
'''