Семинар 7.

advertisement
Семинар 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.
Download