Skip to main content

Group Selection

Status

Python-backed. This page describes the moran_models/nowak_mechanisms/group_selection/ package in the sibling EvolvedCooperation repository. It is not yet a browser replay case study.

Group selection adds a second level of selection on top of individual competition. Groups whose members cooperate more produce higher average fitness, and periodically the most successful group is copied into the least successful group — selection acts on groups as well as on individuals.

How It Is Implemented Here

Sites are partitioned into a fixed number of groups at initialisation. Within each step, individual Moran replacement proceeds normally based on individual fitness scores. Every group_selection_interval steps a between-group event fires: the group with the highest mean fitness is copied into the group with the lowest mean fitness, replacing all traits and lineage labels in the sink group with randomly sampled copies from the source group.

This implements a two-level selection process:

  • Within-group: individual Moran replacement based on individual scores
  • Between-group: periodic copying of the best group into the worst group

Key Parameters

ParameterDefaultRole
group_count8Number of groups the population is divided into
group_selection_interval25Steps between between-group selection events
group_selection_mode"copy_best_group_into_worst_group"Between-group replacement rule
B_plus_scale1.0Scales cooperative benefit produced per unit trait
C_scale0.2Private cost per unit trait

Python Module Layout

moran_models/nowak_mechanisms/group_selection/
__init__.py
group_selection_model.py
group_selection_pygame_ui.py
config/
group_selection_config.py

Usage

./.conda/bin/python -m moran_models.nowak_mechanisms.group_selection.group_selection_model

Live viewer:

./.conda/bin/python -m moran_models.nowak_mechanisms.group_selection.group_selection_pygame_ui

References