Алгоритм решения вдохновлен этой статьей.
Взаимодействие котов между собой определяется по следующим правилам:
-
Если два кота находятся на расстоянии не превышающем
RADIUS_0
, то они пытаются начать драку с вероятностью 1. -
Если два кота находятся на расстоянии
RADIUS_1
, там, чтоRADIUS_1 > RADIUS_0
, они начинают шипеть с вероятностью обратно пропорциональной квадрату расстояния между ними. -
Если вокруг кота нет соперников он перемещается согласно текущему правилу.
Перемещение котов картой размера PLATE_WIDTH
на PLATE_HEIGHT
-
Возможность использования различных функций расстояния:
EUCLIDEAN_DISTANCE
MANHATTAN_DISTANCE
CHEBYSHEV_DISTANCE
-
Поддержка до
5*10^5
котов с минимальной возможно частотой7 FPS
- ВАЖНО: эти показатели сильно зависят от:
- размеров кота и радиуса его взаимодействия (
RADIUS_1
,MOVE_RADIUS
) - от машины, на которой это запускается
Тесты проводились на:
- ОС -
6.1.71-1-MANJARO
. - Процессор -
11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
. - Размер
L1d
-384 Kib
- размеров кота и радиуса его взаимодействия (
Пример конфига находится в файле
./examples/cfg_500_000.py
- ВАЖНО: эти показатели сильно зависят от:
-
Возможность выбирать паттерны поведения
- Отражение от стенок с потерей скорости
MOVE_PATTERN_PHIS_ID
- Изменения направления и скорости движения при столкновении со стенкой
MOVE_PATTERN_LINE_ID
- Случайное перемещение в рамках 'MOVE_RADIUS'
MOVE_PATTERN_RANDOM_ID
Пример конфига находится в файле
./examples/cfg_beutiful.py
- Отражение от стенок с потерей скорости
rye sync && rye run pre-commit install
rye run python -m src.catsim
На текущий момент настройка параметров запуска происходит только через конфигурационный файл (
run_config.py
)Пример:
PLATE_WIDTH, PLATE_HEIGHT = 2000, 2000 CATS_N = 500000 ...
rye test
Код распространяется под лицензией MIT. Подробнее в файле LICENCE.