дискретизируется в регулярную сетку ячеек (ниш). Алгоритм инициализирует пустой архив, генерирует случайные решения, оценивает их приспособленность и поведенческий дескриптор, помещает в соответствующую ячейку. Затем в цикле выбирается случайное существующее решение из архива, мутируется (или скрещивается с другим случайным жителем), оценивается потомок и, если он попадает в ячейку, которая пуста или его приспособленность выше текущего обитателя, происходит замена. По завершении архив представляет собой карту элитных решений — по одному лучшему на нишу. В статье приведён пример реализации на Python для игрушечной задачи с функцией -(x²+y²)+5·sin(3x)·cos(3y), сеткой 20×20 и 5000 итераций. В результате было заполнено 379 из 400 ячеек, что иллюстрирует ограничения локальной гауссовской мутации — некоторые ниши остаются недостижимыми из-за отсутствия «мостов» между занятыми ячейками. Автор отмечает, что в реальных задачах цель не в заполнении всех ниш, а в покрытии достижимых ниш и разнообразии поведений. Современные реализации (CMA-ME, библиотеки pyribs, QDax) используют специализированные эмиттеры для генерации новых решений, отделяя механизм поиска от архива.