love_search — генеративная анимация на R. Две тысяч точек изображают восемь миллиардов людей; одна из них ищет «того самого» среди серой толпы, ничего не зная наперёд. 100 шагов, случайность и вес расстояния — и вопрос, который остаётся после: была ли встреча удачей или условием, прописанным в коде.
Две тысячи точек — вместо восьми миллиардов людей на планете. Все серые, кроме двух: ищущий и тот самый, вдалеке. Ищущий не видит цель, а только тех, кто рядом. Сто шагов, сто попыток, взвешенных расстоянием и подправленных случаем. Никого не посещает дважды: красная нить — это не память о встреченных, а мера того, как долго он искал.
На сотом кадре пунктирная линия стягивает разрыв, но точки не сходятся. Между ними остаётся зазор — минимальный, но не нулевой.
Симуляция не умеет отрендерить только одно — любовь. Она способна показать лишь то, как далеко готова пройти точка ради неё. А в конце пути между двумя огоньками остаётся не линия,
а пунктир.

Скрипт на R создаёт 2000 точек == «толпу» со случайными координатами, размером и яркостью. Две особенные: искатель и «тот самый». 100 итераций искатель ходит по толпе: ближние точки получают больший вес (1 / (d + 1)), шум ±20% сохраняет случайность, никто не посещается дважды. Каждый шаг есть отдельный кадр ggplot2 с растущим красным следом; пакет animation склеивает их в GIF. Когда путь достигает цели, дистанцию замыкает пунктир и подпись меняется на CONNECTION FOUND, чего к сожалению так и не удается увидеть.
А что, если это просто баг?
В исходнике есть строка:
iterations increased to ensure connection — число шагов увеличено, чтобы встреча случилась наверняка. Встреча здесь не удача, а инвариант: сколько бы точка ни блуждала, код не даст ей не дойти. Тогда пунктир — не зазор, а черновик линии, которая дала точкам соединиться. И пессимизм — это лишь ошибка интерпретации, а не свойство мира: connection found == True.




тогда и вывод в этой истории может стать иным:
Судьбу и вероятность встречи можно нарисовать. Но только в коде их можно запрограммировать: задать вес, условие, порог, при котором «встреча» становится возможной.
Мы живём так же — по жёстким установкам: кого искать, каким должен быть тот самый, сколько попыток дать себе до того, как сдаться. Мы не замечаем этот код, пока не случится баг: точка, которой полагалось вечно кружить рядом, вдруг оказывается в шаге. Зовём это случайностью — не готовы признать: это исключение из правила, которое сами написали.
love_search мог жить только в коде — только он способен удержать условие, которое почти никогда не выполняется, и строку, что рано или поздно всё равно его выполнит. Ведь в нем был единственный баг, ради которого стоило писать весь остальной код и проект в целом.




