Семинар 6. Метод Монте-Карло: Перколяция. Машины клеточных автоматов. Псевдослучайные числа #include <stdlib.h> - заголовочной файл для использования стандартной библиотеки. Получение псевдослучайных чисел, равномерно распределенных в интервале (0,1): prob = (double) rand()/(double)RAND_MAX; Для получения новой последовательности псевдослучайных чисел при новом запуске программы необходимо «засеять» генератор другим числом, например, текущим временем: #include <time.h> srand( (unsigned)time( NULL ) ); Анализ качества псевдослучайных чисел: k-равномерность (проявления неравномерности), χ критерий отличия гистограммы от заданного распределения (слишком слабое отличие тоже плохо). 2 Перколяция (или задача о протекании). Пусть есть прямоугольная решетка, состоящая из N*N свободных и занятых узлов. Пусть вероятность того, что узел занят – p, и, соответственно, вероятность того, что узел свободен (1-p). Будем называть кластером соседние занятые узлы (рис. 1) и стягивающим кластером – такой кластер, который начинается на одной границе и заканчивается на противоположной границе решетки. Образование стягивающего кластера называется перколяцией. Вероятность его образования в конкретной решетке Pc(p) является предметом исследования. Идея метода Монте-Карло (в широком смысле – любой метод, использующий псевдослучайные числа): 1. Задать значение вероятности занятости узла p. 2. Разыграть состояние каждого узла при заданном значении p, тем самым построив конкретную реализацию решетки. 3. Определить, есть ли в этой реализации хотя бы один стягивающий кластер. Если есть, то увеличить счетчик числа стягивающих кластеров Mc на единицу. 4. Повторить пункты 2-3 M раз. 5. Получить оценку вероятности образования стягивающего Рис. 1. Решетка с кластерами из занятых узлов (черные кружки). кластера Pc ≈ Mc . M 6. Повторить пункты 1-5 для ряда значений вероятности p в интервале от 0 до 1. Особенности. 1. Для реализации п.2 можно сгенерировать псевдослучайное число prob в диапазоне (0,1). Если prob<=p, то считать узел занятым, в противном случае – свободным. 2. Обратить внимание на п.3 и возможные алгоритмы поиска стягивающего кластера. 3. В программе следует предусмотреть возможность визуализации конкретного состояния (реализации) решетки и выдачу результата по определению наличия стягивающего кластера (для проверки работы алгоритма поиска). В этом случае построение решеток осуществляется по шагам с фиксацией каждого состояния. Другой вариант – набор статистики без визуализации решеток. 4. Статистические данные следует представить в виде графика зависимости Pc(p) (рис. 2). 5. Следует рассмотреть несколько решеток с различным числом узлов N и проанализировать характер изменения зависимости Pc(p) с ростом числа узлов N. Пересечение графиков, построенных при различных значениях N, дают оценку вероятности перколяции в неограниченной решетке, где появление стягивающего кластера в зависимости от p имеет пороговый характер. 2 6. В статистических исследованиях число реализаций M должно быть достаточно велико, т.к. величина доверительного интервала уменьшается как 1 M . Варианты решеток. Выше рассмотрена ячеечная перколяция. В цепной перколяции случайным образом разыгрываются не состояния узлов, а состояния межузловых связей ближайших соседей, которые с вероятностью p могут быть заняты и, соответственно, с вероятностью (1-p) свободны. По-прежнему, соседние занятые связи образуют кластер. Pc 1 Литература 0.5 1 Рис. 2 3. 4. p 1. К. Биндер, Д.В. Хеерман. Моделирование методом Монте-Карло в статистической физике. М.: Наука, 1995. Д.В. Хеерман. Методы компьютерного экспе- 2. римента в теоретической физике. М.: Наука, 1990. Х.Гулд, Я. Тобочник. Компьютерное моделирование в физике. М.: Мир, 1990. ч.2. Ю.Ю. Тарасевич. Перколяция: теория, приложения, алгоритмы. М. УРСС, 2002. Машины клеточных автоматов Фон-Нейман, 1948 г. Будем называть клеточным автоматом совокупность клеток (решетку) с одинаковым конечным числом состояний и конечным набором правил, по которым меняются состояния каждой клетки в зависимости от состояния её самой и ближайших соседей. Будем рассматривать плоские прямоугольные решетки. В клеточном автомате число состояний клеток конечно, и в простейшем случае может быть равным двум: 0/1 или “живая”/”мертвая”. Состояние автомата меняется в соответствие с правилами дискретно и «одновременно» во всех клетках. Перед началом работы задается исходное (начальное) состояние каждой клетки. Если число клеток автомата конечно, то, как правило, одну границу автомата связывают с дугой, например, правым соседом крайней правой клетки становится крайняя левая клетка. Примером клеточного автомата является игра «Жизнь». Клетки этого автомата могут находиться в двух состояниях: живая или мертвая. Правила следующие: 1. 2. Клетка умирает, если число живых ближайших соседей больше 3 (от «перенаселенности») или меньше 2 (от «одиночества»). Клетка рождается, если число ближайших соседей равно 3. block blincker Рис. 3. Характерные структуры в автомате «Жизнь». Ближайшими соседями являются клетки, имеющие хотя бы одну общую точку с данной клеткой, т.е. у каждой клетки есть 8 ближайших соседей. В зависимости от начального состояния при работе этого автомата может возникнуть большое число структур, таких как, стационарные формы (block, boat), переключатели (blincker, toad), планеры (glider, Lightweight spaceship) и др. (рис. 3). N W С E S Рис. 4. Ближайшие соседи клетки «C» автомата с правилом Parity. Другой пример клеточного автомата – автомат, работающий по правилу “Parity”. В этом автомате также каждая клетка может находиться в двух состояниях 0/1, ближайшими соседями клетки являются только клетки, граничащие с ней по вертикали и горизонтали (рис. 4). Идея правила 3 заключается в том, что новое состояние клетки Cnew однозначно зависит от того, четным или нечетным является число живых (1) клеток из ближайших соседей (N,E,S,W) и самой клетки C. Если это число четное, то новое состояние Cnew=0, в противном случае Cnew=1. Так как число различных комбинаций состояний самой клетки и ее ближайших соседей равно 25=32, то правило Parity может быть представлено в виде таблицы, содержащей соответствующее число строк: С 1 1 1 1 и т.д. N 0 1 1 0 E 0 0 1 1 W 0 0 0 0 S 0 0 0 0 Cnew 1 0 1 0 При моделировании работы клеточного автомата на последовательной машине следует помнить, что в клеточном автомате состояние всех клеток меняется одновременно. Поэтому осуществляя в цикле перебор всех клеток, например, по строкам, следует запоминать старые состояния клеток, по крайне мере, в пределах одной строки, т.к. именно эти состояния будут нужны для принятия решения о новом состоянии клеток на следующей строке. Отображать текущее состояние клеточного автомата можно, закрашивая клетки в два разных цвета в зависимости от того, «живая» она или «мертвая». В правила поведения клеточного автомата можно включить «память». А именно, зависимость не только от текущего состояния клеток, но и от их состояний на предыдущих шагах. Простейшим примером служит клеточный автомат, работающий по правилу Parity-Flip. В этом правиле при определении нового состояния клетки важно предыдущее состояние только ее самой. Конкретно, правило Parity-Flip может быть сформулировано следующим образом: 1. Вначале к клетке «C» применяется правило Parity. Результатом является Cpnew. 2. Затем выполняется операция исключающего ИЛИ (XOR) с предыдущим состоянием (на шаг назад) Сold этой же клетки Сnew = Cpnew XOR Сold. Эволюция во времени автомата с правилом Parity-Flip отличается от автомата с правилом Parity. Для анализа его поведения при визуализации состояния клеток удобно добавить два дополнительных цвета для только что (на текущем шаге) умерших и только что родившихся клеток. Автомат с памятью может эволюционировать «вспять» во времени. Для этого достаточно на любой стадии его эволюции единомоментно поменять только что умершие клетки на живые и только что родившие клетки на умершие. Если после этого продолжить эволюцию автомата по правилу Parity-Flip, то можно будет наблюдать прохождение в обратной последовательности всех тех состояний, которые были у автомата до этого, вплоть до возникновения начального состояния. Это «движение вспять» можно продолжить и далее и, таким образом, наблюдать состояния, предшествующие начальному! Цели. Программа, моделирующая работу клеточных автоматов по правилам игры Жизнь, Parity, ParityFlip и др. Возможность задания пользователем различных начальных условий, генерация случайных начальных условий, поиск характерных структур. Демонстрация смены направления времени на обратное в Parity-Flip. Предоставлению пользователю возможности конструирования собственных правил. Литература 1. 2. Т.Тоффоли, Н.Марголус. Машины клеточных автоматов. М: Мир, 1991. Х.Гулд, Я. Тобочник. Компьютерное моделирование в физике. М.: Мир, 1990. ч.2.