Игра "Стрелки"

Представим себе лист бумаги в клеточку. На этом листе начертим квадратное поле (например, размером 7x7 клеточек). Далее в каждую из клеток впишем стрелочки, ориентированные случайным образом в одном из восьми возможных направлений - влево и вверх, вверх, вправо и вверх, влево, вправо, влево и вниз, вниз, вправо и вниз. Рядом очертим точно такое же чистое поле. Будем заполнять его, заменяя каждую стрелочку той, на которую она указывала. Если стрелочка, расположенная на краю поля, указывает за его пределы, то поступим так, как если бы клеточное поле было свернуто в тор. То есть, любая клеточка, включая все крайние, также обретет свои восемь соседей. Будем повторять этот процесс снова и снова, всякий раз подрисовывая новое чистое поле, как только очередное заполнится.

Что получится в итоге? Ответ на этот вопрос вовсе интуитивно не очевиден. Стрелочку в каждой клеточке мы в следующий момент времени заменяем стрелочкой, на которую она указывала в предыдущий момент времени. Оказывается, этого достаточно, чтобы вся система в целом постепенно самоорганизовывалась. При моделировании этой несложной клеточной игры на ЭВМ можно наблюдать, как постепенно все стрелочки выстраиваются в определенном порядке. На рисунке приведен пример моделирования случайной исходной конфигурации на протяжении шестнадцати поколений (исходная конфигурация находится в первой строке первая слева, а последнее поколение крайняя справа в последней четвертой строке).

Какое-то из направлений постепенно может стать доминирующим или даже единственным. Возможно образование каких-то устойчивых циклических перестановок стрелочек в клетках. А ведь, в целом, всей системой никто и ничто не руководит. В ней действует лишь предельно простое локальное правило - стрелочка заменяется стрелочкой, на которую сама указывает, вот и все. В итоге же из первоначального хаоса сам по себе возникает порядок!

Самоорганизация - это не редкость в поведении различных игр клеточных автоматов. Данная игра, однако, отличается от традиционных клеточно-автоматных моделей тем, что на каждую клетку влияет не вся ее окрестность, а лишь одна из соседних ячеек. Оказывается, и в таком вырожденном случае все равно система демонстрирует характерное самоорганизационное поведение. Строго говоря, описанный алгоритм даже трудно отнести к классу клеточных автоматов, поскольку нет влияния окрестности фон Неймана или Мура.

Эта абстрактная и чрезвычайно простая игра, конечно, совершенно бесполезна с практической точки зрения, но в ней угадывается некий глубокий смысл. Мне кажется, что она может служить предельно лаконичной иллюстрацией некоторых весьма универсальных принципов эволюции многих сложных систем. Поучительно и забавно наблюдать, как стрелочки в клеточках сами собой постепенно выстраиваются в строгие ряды и периодические последовательности. Кроме того, игра "Стрелки" может служить хорошим заданием для еще одной нескучной лабораторной работы по информатике и программированию. Для ее реализации подойдет любой алгоритмический язык. Успехов вам!

А. КОЛЕСНИКОВ,
andr61@mail.ru

Версия для печатиВерсия для печати

Номер: 

16 за 2003 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!