green_fr: (Default)
[personal profile] green_fr
Rotor-router — удивительное дело, нельзя поставить ссылку на Википедию, придётся самому описывать. Представим себе бесконечное поле в клеточку. В одну из клеточек (центр, начало) ставим маркер направления, например «север». Затем в эту же точку запускаем «агента». Агент действует следующим образом: если на клеточке, куда он попал, стоим маркер направления, то он поворачивает маркер на 90° и идёт в указанном направлении. А если он попадает на клеточку, где нет маркера. то он ставит там маркер «север» и пропадает. Затем мы запускаем следующего агента в центр, и т.д.

Механизм прост как две копейки, но результат, мягко говоря, удивительный. Во-первых, все агенты рано или поздно пропадают, никто не крутится бесконечно. Во-вторых, все клеточки рано или поздно получают свои маркеры, ни одна не забыта. В-третьих — очень скоро занятая маркерами зона принимает форму круга, и чем дальше, тем ближе эта форма к идеальному кругу (вот здесь можно полюбоваться на результаты, позумить, поискать интересные шаблоны).

Хороший пример, зачем программисту нужна математика — для эффективного моделирования лучше использовать теорему о коммутативности: если запустить агента А1 в точку Т1, а после него агента А2 в точку Т2, то конечный результат будет в точности таким же, как если бы сначала запустили А2, а потом А1. То есть, можно запускать новых агентов, не дожидаясь, пока пропадут старые (если в этом месте вы задумались, а зачем вообще программисту может понадобиться моделировать всё это, авторы пишут, что этот механизм очень похож на то, как «общаются» муравьи / термиты при постройке муравейника — каждый муравей занят тем, о чём ему говорит его непосредственное окружение, но он же и изменяет это окружение таким образом, чтобы в итоге получалось что-то согласованное).

Ещё интересный вариант для графов. Берём произвольный связный граф, расставляем в каждой вершине по маркеру направления (на одно из рёбер, выходящих из этой вершины) и запускаем агента. После какого-то (конечного) периода брожения по графу агент приводит его в стационарное состояние, в котором начинает описывать полные круги. То есть, проходит по каждому ребру два и только два раза (в разных направлениях — если представить каждое ребро как два ориентированных, то за один цикл агент будет проходить по одному разу по каждому ребру). Прекрасная задачка по информатике для школьников — поиск выхода из лабиринта, например. Ну и в жизни может пригодиться — всегда носите с собой мелок в кармане!

Date: 2015-09-01 10:36 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
Кажется, раньше так решали дифференциальные уравнения.

Date: 2015-09-01 11:52 am (UTC)
From: [identity profile] green-fr.livejournal.com
Ты о чём? То ли я проспал самую интересную лекцию по дифурам, то ли успел забыть :-)

Date: 2015-09-01 11:57 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
Продолжали кривые маленькими стрелочками, которые все время куда-то загибались, а потом смотрели, что получится! По-моему, это метод Эйлера. У тебя уравнение спирали.

Date: 2015-09-01 01:12 pm (UTC)
From: [identity profile] bgmt.livejournal.com
Метод Эйлера - приближение дифура конечно-разностным уравнением, конкретно - линейная аппроксимация на каждом шаге. Число направлений потенциально бесконечно. Результат - одна ломаная линия.

Здесь - нет никакого дифура, есть алгоритм, похожий на машину Тюринга, но попроще, а вместо линейной ленты - двумерная решётка. Число направлений - 4. Число стартовых клеток потенциально бесконечно. Результат - стрелка в одном из 4 направлений в каждой клетке решётки. Верно, что эти стрелки после пары миллионов шагов организуются в линии, но линии с бифуркациями, и если эти линии и являются решениями какого-то дифура (нелинейного обязательно, поскольку бифуркации), то не похоже, чтобы до этого дифура можно было добраться.

Date: 2015-09-01 01:58 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Я не особо понимаю про линии, стрелки же крутятся. В случае графа ещё какая-то стационарность, а в первом случае вообще всё меняется после каждого шага, нет разве?

Date: 2015-09-01 04:36 pm (UTC)
From: [identity profile] bgmt.livejournal.com
Ну да, но рисунки по твоей ссылке всё же состоят из линий, мне кажется. Разве нет?

Date: 2015-09-01 07:45 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Я тебя всё ещё не понимаю :-/

Date: 2015-09-01 08:09 pm (UTC)
From: [identity profile] sanzoku.livejournal.com
Бегемот, там нет линий и нет никаких бифуркаций. Там есть зоны с сильным преобладанием разных направлений, но если приглядеться на увеличенной картинке это именно преобладание, а не кластер где все стрелки параллельны, то есть никаких доменных стенок там нет. Дифур этому соответствовать на мой взгляд не может, я не очень представляю как этому может соответствовать какая-нибудь внятная теория поля, потому что каждый шаг системы страшно нелокален. Может быть там конечно какое-то интегро-дифференциальное уравнение спрятано, не знаю. В общем там все очень красиво, но еще очень плохо исследовано, это вывод из поверхностного гугления и просмотра пары-тройки статей.

Date: 2015-09-02 08:49 am (UTC)
From: [identity profile] bgmt.livejournal.com
Мерси, я, действительно, не приглядывался - мне показалось, что рисунок состоит из линий.

Date: 2015-09-01 03:38 pm (UTC)
From: [identity profile] dmpogo.livejournal.com
Поворачивем на 90 всегда в одну сторону, или случайным образом туда-сюда ?

Date: 2015-09-01 03:51 pm (UTC)
From: [identity profile] sanzoku.livejournal.com
всегда в одну сторону, это детерминистская модель

Date: 2015-09-01 03:58 pm (UTC)
From: [identity profile] dmpogo.livejournal.com
И никакой chirality в результате ?

Date: 2015-09-01 04:23 pm (UTC)
From: [identity profile] sanzoku.livejournal.com
Не знаю. Я про эту модель до сегодняшнего дня ничего не знал. Нехороший человек [livejournal.com profile] green_fr погубил примерно час моего рабочего времени, когда я вместо чтения статей про стохастические модели, читал про детерминистские :)
Edited Date: 2015-09-01 04:24 pm (UTC)

Date: 2015-09-01 07:42 pm (UTC)
From: [identity profile] green-fr.livejournal.com
;-)
Я правильно помню, что "нехороший человек" - это "акунин"?

Date: 2015-09-01 08:11 pm (UTC)
From: [identity profile] sanzoku.livejournal.com
Нехороший - это еще не злой :)

Date: 2015-09-01 05:00 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Всегда в одну, скажем, по часовой стрелке.

Profile

green_fr: (Default)
green_fr

January 2026

S M T W T F S
    123
4 5 6 7 8 910
11 121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 12th, 2026 09:01 am
Powered by Dreamwidth Studios