Автор: Я.
Эбстракт
Здоровеньки булы, пацаны, как гритса!
Предупреждаю, из этой статьи вы узнаете Истину, но она не сделает вас Свободными. За Свободой к Бахтиярову, а здесь только тотальная обусловленность и Правда Жизни.
Итак, что мы имеем на планете Земля? Маск продолжает клепать свою марсианскую ракету, брокерня забирать у вас деньги, а святой Путин заботиться о Расеюшке. Всё идёт своим чередом прямиком к третьей мировой, которая неизбежна, как коммунизм в мечтах Ивана Ефремова. А пока не началось, я расскажу вам, куда двигать, чтобы просирание вашей никчёмной жизни происходило с особенным смыслом. Со времён царя Соломона известно, что во многой мудрости — много печали, и кто умножает познания, умножает скорбь. Этим мы и займёмся. К делу.
Постановка задачи
Задумывались ли вы когда нибудь, как далеко можно уйти в жизни? Допустим, если повезёт, вы проживёте ещё 40 лет и будете делать один маленький шаг в день, ну или один большой в год. Где вы окажетесь через 40 лет? Теоретически, если двигать пердячим паром всё врямя в одну сторону, то ваш путь будет выглядеть, как стрела, упирающаяся в надгробный камушек. Но то теория, а на практике никто по прямой не ходит. Путь большинства людишек напоминает случайные блуждания броуновской частицы в Великих просторах Вселенной (рис.1).
Рис.1. Вселенная и Путь Человека.
Путь 2 тоже упирается в гробовой камень, только маленький, он на картинке не показан.
Ладно, изучим как далеко можно уйти в обоих случаях.
1. Первый случай, линейного движения, абсолютно нереален, но наиболее прост для оценки: 40 лет, 40 больших шагов, длина вектора 40 шагов и конец.
2. Второй случай — это сосика Винера — ваша жизнь. Математическая теория случайного блуждания неплохо проработана (см. например
Спицер Ф. Принципы случайного блуждания, М. Мир, 1969, 471 с., — я сам её не читал, пацаны, поэтому рекомендовать не могу, но если вы прочтёте, расскажите потом, про что там).
Ясно одно, Теория — это для ботанов. Наш рабочий метод — Эксперимент. Лучше всего было бы, конечно, прожить жизнь хотя бы миллион раз, измерить пройденное расстояние, навести статистику, опубликоваться в Нэйче, получить грант на исследование ещё ста миллионов жизней и дальше ничего не делать, один хер конец один. Но это долго. Нам надо получить результат побыстрее, поскольку эволюция не ждёт, надо ещё успеть оплодотворить максимальное кол-во самок, а пока в Нэйче опубликуешься уже стоять не будет, там всё схвачено, но не нами. Поэтому будем использовать другой подход. Берём Microsoft Visual C++ Express (он халявный), качаем библиотеки OpenGL, FreeGLUT, ACML (всё халява), пишем симулятор жизни, прогоняем мильён раз и дело с концом. Бинго!
Симуляция Жизни
Пацаны, я вам так скажу, это только кажется, что симулировать Жизнь человека сложно. На самом деле, вся симуляция укладывается в 7(семь!) строчек кода:
switch (dir)
{
case 0: pos[i].x += step; break;
case 1: pos[i].y += step; break;
case 2: pos[i].x -= step; break;
case 3: pos[i].y -= step; break;
}
dir — это направление, а pos[] — ваша жизненная координата. Остальное — техника, надо повыделять память, задать начальные условия, запустить циклы, сгенирировать рандомно направление dir, подсчитать дистанцию, навести статистику, визуализировать людишек графически через OpenGL, сохранить и обработать результаты и т.д. Короче, рутина, 95-и процентам из вас недоступная, впрочем. Поэтому специально для вас, простого народа от сохи, я записал видеоролик про вашу жизнь. Каждый человечек на видео — отдельная точка и жизнь его подчиняется случаю.
Куда пойти, куда податься? Куда кривая жизни занесёт? Куда генератор случайных чисел скажет — туда и занесёт. Сначала все точки (людишки) случайно распределены в отцентрированном квадрате 40 на 40, затем начинают двигаться по Жизни. В любом случае, шаг будет один и тот же = 1(единица), а вот направление… ну тут как повезёт.
37 секунд красоты:
Поглядев на этот шедевр, я подумал: «Шо за херня?».
Откуда узоры? Людишки — толпа баранов, которая должна лениво разбредаться во все стороны, воплощая в жизнь идею винеровского процесса.
Поигравшись с числом людишек, я впрочем, быстро смекнул, шо узоры — не настоящие. Подделка это, пацаны. Рандом палёный. В смысле, функция генерации случайных чисел rand() из стандартной Си-библиотеки math.h оказалась голимой нерандомной хернёй, абсолютно непригодной для симуляции Жизни. На этом видео жизнь 400 тыщ людишек — всего лишь средний город. Период повторения оказался слишком маленький, что мы и видим в виде калейдоскопа. Так рождаются научные артефакты, пацаны. Запоминайте. Сколько дисеров, на подобном артефактном шлаке было сделано — одному ВАК известно...
Ладно, подумал, я. Придётся генерировать вашу никчёмную жизнь получше и открыл мануал по ACML. Там оказалось 28 генераторов на все случаи Жизни. Для ваших простых судеб я взял самый простой базовый генератор с периодом повторения около 2^57, вам пока хватит. И вот что получилось.
Смотреть 46 секунд красоты:
Первоначально равномерно распределённые в квадрате 40 на 40 людишки начали активно жить, деловито передвигаясь то туда, то сюда, но как видно далеко не ушли. В этом вся суть человеческого Бытия, пацаны: хочешь жни, а хочешь куй — всё равно получишь xyi. Это и есть Правда.
Высокая Теория, которую я упоминал выше, учит, что при случайном блуждании на N шагов, дистанция смещения от начала движения будет пропорциональна корню из N. Первым это объяснил Эйнштейн в 1905 году, у нас тогда как раз была первая революция: «On the motion of small particles suspended in a stationary liquid demanded by the molecular-kinetic theory of heat» (Ann. Phys. Ser 4, 7 (1905), 549–560). Символично, не правда ли? Людишки в Петрограде хаотично слонялись от Зимнего к Пивной и обратно, но ушли недалеко. Почему? Эйнштейна не читали. Тот ясно объяснил, что пройденная дистанция, в случае хаотичного процесса, будет пропорциональна корню из времени. Ленин — иное дело. Мы достоверно не знаем, читал ли он работу Эйнштейна 1905 года, но двигался он целенаправленно, а не хаотично, как работяги с путиловского. Вот и результат. М-да… но мы отвлеклись.
Ладно, подумал я, глядя на хаотичное движение ваших жизней, ну а как далеко вы уйдёте от своих стартовых позиций? Имеет ли вообще смысл дёргаться в жизни или всё тлен?
Эйнштейн говорит, что смысл имеет, но мало. Но то Эйнштейн, его светлая голова — дело тёмное, а наше дело — экспериментальная Эволюция, подумал я, и добавил в симулятор модуль статистики:
if (dcount < dmaxcount)
{
dist[dcount] += sqrt(pos[i].x * pos[i].x + pos[i].y * pos[i].y);
}
Прогнав ваши Жизни через Симулятор ещё раз и скинув результаты на диск, я приступил к анализу результатов.
Обсуждение результатов
На рисунке 2 изображена Истина ваших Жизней:
Рисунок 2. Зависимость пройденной дистанции от количества шагов.
Синяя линия — это чёртова теория, чёрная — это тысячи точек ваших жизней слились в одну кривулину, ну а красная, это rand()-артефакт.
Сначала давайте поржём над квази-рандомной функцией rand() из math.h — её результаты изображены красным цветом. На самом деле, пацаны, это очень важный и серьёзный результат. Когда вы будете тестировать ваши жизненные или биржевые стратегии, вам нужно очень внимательно относиться к генераторам случайных чисел. Дело в том, что большинство программ и пакетов для анализа пишется на языках C/C++, и потому, с высочайшей вероятностью, наследуют херовый рандом из math.h
Поэтому, если в ваших тестах с участием рандом-генератора попёрла P/L и эквити улетело в космос, то глядите в оба: хороший рандом в космос летит медленно, как завещал лохматый Эйнштейн.
Чёрные точки наших жизней идеально ложатся на синюю теор.кривую с коэффициентом 0.888. Красиво, правда? На графике синяя линяя без коэффициента, чтобы разнести её с чёрной, но если умножить, то она идеально ложится на чёрные точки. На сколько идеально? Не знаю, пацаны, мне чё то лень проверять. Качественно и количественно с точностью около одной тысячной симуляция подтверждает теорию. Ну а если вам нужно точное значение невязки — пишите свой симулятор и считайте. Бох в помощь, как гритса.
Для нас наибольшую ценность представляет начало этого графика в диапазоне N:0-50 шагов, столько сколько можно пройти за человеческую жизнь. Я специально увеличил его, чтобы было удобнее рассматривать цифры.
Рисунок 3. То же, что рис.2, увеличенный график.
Какой вывод может сделать простой пацан, глядя на этот график? А такой, что за 40 лет блужданий, космическая пылинка — человек, сдвинется примерно на 5-6 шагов от исходной точки! И если ты будешь двигать осмысленно в одну сторону, то за 7 лет линейного движения уйдёшь дальше, чем хаотичный человек в среднем за ВСЮ жизнь! Двигаясь однонаправленно более 10 лет, ты оставишь далеко позади подавляющее большинство популяции людей. Теоретически, этот вывод не имеет специализации, ты можешь заняться чем угодно и через 6 лет будешь так же далеко, как и средний по популяции человек. Ты будешь не хуже.
Выводы
Общий вывод такой: симуляция утверждает, что за N шагов вашей бессмысленной жизни вы сместитесь от первоначальной позиции на 0.88*корень_из(N).
Двигай в ОДНУ И ТУ ЖЕ сторону ЦЕЛЕНАПРАВЛЕННО больше 6 лет и обойдёшь большинство своих сородичей!
На этом всё, пацаны. Экскурс в теорию случайного движения и практическую симуляцию Жизни завершён.
Теперь вы вооружены Знанием.
А Знание — Сила!
Да пребудет с вами Сила!
Аминь.
Пришел примерно к тому же выводу, что они все (каждый) потихоньку, по чуть -чуть двигают свой мир но в одном направлении. Все! начиная от государства и заканчивая простой уборщицей. Мы же все в поту — но все в разных направлениях.
Сразу вспомнил Крылова...
За исследования спасибо отдельное.
Удачи!
Поздравляю с освоением методов графической визуализации в C
Как я понял, топик об этом :)
Kapeks, с «симуляцией» тут моя бабушка справится
К слову о «симуляции» в c и функции rand(), стоит ознакомиться с матчастью https://www.geeksforgeeks.org/rand-and-srand-in-ccpp/
1. Постановка задачи не Полна: Не указано где Цель?
Если, например, статичная Цель в начальной точке, у Вас под ногами, то Выигрывают, те кто блуждает близко к начальной точке.
Так что бежать от начала «куда глаза глядят» со скоростью распространения электромагнитного излучения в вакууме без Цели и чувствовать себя Чемпионом не всегда полезно.
Ведь, как в песне поется «Там За горизонтом Там, ТамТарам, ТамТарам»
А нам такой хоккей ТамТарам не нужен.
Как в «Алхимике» Чувак «сто верст» исколесил, вернулся домой еле живой, а «сокровище» было на чердаке его дома (в начальной точке ).
Цель надо поставить.
Также не рассмотрен случай блуждающей по разным законам Цели.
2. Почему в коде симулятора нет case-ов «отсутствие смещения» по X или Y ?
Вообщем одни вопросы.
1. Цель всегда одна и та же. Оттрахать максимальное кол-во баб.
2. Да, это так. Такая модель. На каждом шаге куда-то смещаемся. На месте остаётся только покойник. Живой чек всё равно куда то смещается, хотя бы просто по течению Жизни.