diff --git a/benchmarks/configurations.py b/benchmarks/configurations.py index 95bb41c806a..7083900532e 100644 --- a/benchmarks/configurations.py +++ b/benchmarks/configurations.py @@ -35,7 +35,7 @@ "parameters": { "height": 40, "width": 40, - "homophily": 3, + "homophily_ratio": 0.3, "radius": 1, "density": 0.625, }, @@ -47,7 +47,7 @@ "parameters": { "height": 100, "width": 100, - "homophily": 8, + "homophily_ratio": 0.8, "radius": 2, "density": 0.8, }, diff --git a/mesa/examples/basic/schelling/agents.py b/mesa/examples/basic/schelling/agents.py index 67940b5654e..e6562989911 100644 --- a/mesa/examples/basic/schelling/agents.py +++ b/mesa/examples/basic/schelling/agents.py @@ -20,11 +20,19 @@ def step(self) -> None: self.pos, moore=True, radius=self.model.radius ) + type_of_neighbors = [neighbor.type == self.type for neighbor in neighbors] + # Count similar neighbors - similar = sum(neighbor.type == self.type for neighbor in neighbors) + similar = sum(type_of_neighbors) + + # Count total neighbors + total_neighbors = len(type_of_neighbors) # If unhappy, move to a random empty cell: - if similar < self.model.homophily: + if ( + total_neighbors != 0 + and similar / total_neighbors < self.model.homophily_ratio + ): self.model.grid.move_to_empty(self) else: self.model.happy += 1 diff --git a/mesa/examples/basic/schelling/app.py b/mesa/examples/basic/schelling/app.py index 56c0547ac6f..36b43fac7cf 100644 --- a/mesa/examples/basic/schelling/app.py +++ b/mesa/examples/basic/schelling/app.py @@ -26,7 +26,7 @@ def agent_portrayal(agent): }, "density": Slider("Agent density", 0.8, 0.1, 1.0, 0.1), "minority_pc": Slider("Fraction minority", 0.2, 0.0, 1.0, 0.05), - "homophily": Slider("Homophily", 3, 0, 8, 1), + "homophily_ratio": Slider("Homophily_ratio", 0.3, 0, 1, 0.1), "width": 20, "height": 20, } diff --git a/mesa/examples/basic/schelling/model.py b/mesa/examples/basic/schelling/model.py index 3ee0746c073..ab78f53bc48 100644 --- a/mesa/examples/basic/schelling/model.py +++ b/mesa/examples/basic/schelling/model.py @@ -13,7 +13,7 @@ def __init__( width: int = 40, density: float = 0.8, minority_pc: float = 0.5, - homophily: int = 3, + homophily_ratio: float = 0.3, radius: int = 1, seed=None, ): @@ -24,7 +24,7 @@ def __init__( height: Height of the grid density: Initial chance for a cell to be populated (0-1) minority_pc: Chance for an agent to be in minority class (0-1) - homophily: Minimum number of similar neighbors needed for happiness + homophily_ratio: Ratio of similar neighbors to total neighbors needed for happiness radius: Search radius for checking neighbor similarity seed: Seed for reproducibility """ @@ -35,7 +35,7 @@ def __init__( self.width = width self.density = density self.minority_pc = minority_pc - self.homophily = homophily + self.homophily_ratio = homophily_ratio self.radius = radius # Initialize grid