Программа проживает жизнь индивида в условном мире и проверяет, непротиворечивы ли механизмы, описанные в Causa Sui (графы, матрицы, способность рождать новое в агонии), и что они меняют. Это замороженная эталонная версия: на ней получены все числа и рисунки главы 32 книги 3. Это модель механизмов, а не субъект (см. главу 31). Описание алгоритма простыми словами — docs/АЛГОРИТМ_RU.md (английский: docs/ALGORITHM_EN.md). Код и комментарии в нём — на английском.

Что нужно

Python 3.11 или новее (проверено на 3.13), numpy (проверено 2.5), matplotlib (3.11, только для рисунков), scipy (1.18, по желанию: критерий Уилкоксона). Graphviz dot — только чтобы перерисовать рисунок 32.0а.

pip install numpy matplotlib scipy

Файлы

Файл Что это
world.py условный мир и тело индивида; паспорт мира (WorldParams)
individual.py графы с памятью, графы без памяти (для сравнения), рождение графа в агонии, исполнитель
main.py главный цикл: одна жизнь, один такт = один час
signals.py, noise.py что передают друг другу части программы; аппаратный источник шума
tests.py 18 контрольных случаев с заранее известным ответом
experiments/ опыты и рисунки главы 32
data/ опубликованные серии (жизни индивидов, по которым построены таблица 32.1 и рисунок 32.1)
docs/ алгоритм простыми словами (RU, EN); исходники рисунков 32.0а, 32.0б
figures/ рисунки 32.0а–32.3, русские и английские, под страницу A5

Проверить программу

python3 tests.py                  # должно пройти 18 из 18
python3 main.py                   # одна жизнь; журнал в journal.txt

Повторить главу 32 (запускать в папке experiments/)

Каждая жизнь получает свежий аппаратный шум, поэтому числа от серии к серии немного разные (примерно ±10 %); качественные результаты — нет.

Глава 32 Команда Опубликованные значения
Сколько пережили первые–четвёртые трудные времена (таблица, рис. 32.1) python3 hard_times.py memory 100; ... nomemory 100; ... nobirth 100 (опубликованные серии по 200 — два прогона по 100, сложенные вместе) находит своё и помнит (200): 60 / 86 / 88 / 88 %, дожили до конца срока 52 из 200; не помнит (200): 29–38 / 0 %; только подсмотренное (100): 47 / 38 / 0 %
Рисунок 32.1 python3 figures.py survival ru / en (читает ../data или ваши hard_times_*.json)
Проверка мира python3 birth_in_agony.py c1_good 100; c2_hard; c3_oracle в благополучии 100 из 100 доживают до старости; в трудные времена без нового первые не переживает никто (0 из 100); знающий выход заранее переживает первые 77 из 100, доживает до старости 37 из 100
Рождение в агонии, прилив сил python3 birth_in_agony.py full 100; insight; adrenaline; nostress; nobirth пережили первые / дожили до конца срока: 59/20, 61/22, 56/14, 57/8, 48/0
Опыт или отбор python3 experience_vs_selection.py 90 наибольший голод у одних и тех же индивидов: в первые 0,74, во вторые 0,25 (медианы); ниже у 24 из 33, критерий Уилкоксона p ≈ 7·10⁻⁵
Рисунки 32.0а, 32.0б cd ../docs; dot -Tpng -Gdpi=300 structure_ru.dot -o fig32_0a_structure_ru.png; python3 simplex_fig.py ru
Рисунки 32.2, 32.3 (иллюстрации) python3 figures.py life ru; python3 figures.py lostlife ru (затем en: берётся та же жизнь) выбраны из нескольких жизней

Программы рисунков сохраняют PNG в текущую папку; чтобы заменить опубликованные, перенесите их в figures/.

Проценты для каждых трудных времён считаются от индивидов, доживших до их начала, а не от исходной сотни (например, 86 % во вторые трудные времена — это 79 из 92).

Случайность

Шум берётся из аппаратной энтропии операционной системы (os.urandom). Повторить целую жизнь в точности нельзя; отдельную часть программы — можно: записать её поток шума (NoiseSource("hw", record=True)) и подать его снова (NoiseSource("replay", replay=...)).

Целостность

SHA256SUMS содержит контрольную сумму каждого файла: sha256sum -c SHA256SUMS.

Происхождение

Замороженная эталонная версия «3к» (мир v6, графы v6), 3–4 октября 2026 года. Эта английская редакция кода сверена с исходной: при одинаковых записанных потоках шума обе программы проживают побитно одинаковые жизни.