Клітинні автомати та комп'ютерна екологія h2>
А. Колесников p>
Третій Ангол, і впала з неба велика зірка,
палаючи, як смолоскип, і впала на третину річок та на водні джерела. Назва
Цього зірку полин, і стала третина води, як полин, і багато людей померли
від вод, тому що вони стали гіркі. p>
Об'явлення Святого Іоанна Богослова, гл. 8, ст. 10,11 p>
Хтось точно помітив, що розмова про погоду
стає цікавим лише за перших ознак кінця світу. Сьогодні вчені та
політики обговорюють проблеми погоди на глобальних форумах, та й прості люди
починають потихеньку цікавитися погодою, причому не тільки на найближчі
вихідні, а й взагалі ... Атмосфера - величезна, складна, розподілена,
динамічна система. Передбачати її поведінка надзвичайно важко, часто
просто неможливо. Дивлячись на що висять в небесній блакиті хитромудрі хмарні
структури, ми не завжди замислюємося про те, наскільки масштабні і
драматичні процеси відбуваються там, у височині. Зовсім інше враження
залишає прискорена зйомка хмарного неба. Картинка еволюції роящіхся хмарних
мас мимоволі наводить на роздуми про природу часу і сенс земного
існування. Схожі, але більш тривожні думки навівають кадри, що зображують
розповзання смогу над великими мегаполісами або, гірше того, поступової
дифузії ядерного гриба ... Всі ми пам'ятаємо старі чорно-білі навчальні фільми,
оповідають про формування зон зараження після атомного вибуху. Вони
класифікуються за ступенем небезпеки. Поблизу епіцентру розташовується
"мертва" зона суцільного інтенсивного зараження. Далі, в залежності
від напрямку вітру, зони розподіляються у вигляді вкладених один в одного
еліпсоїдів розсіювання. У принципі, схожою буде картина розповсюдження і
будь-якого іншого забруднювача від точкового джерела, наприклад, від димить, труби,
вибухнув реактора або апокаліптичною зірки з біблійного пророцтва.
Процес поширення забруднювача в атмосфері - це процес розсіювання і
змішування його часток з частинками повітря. На хід цього процесу істотне
вплив мають власні руху повітряних мас, тобто вітру. В одній і
тій же місцевості вони дмуть в різних напрямках з певною частотою.
Дані про частоти вітрів наносяться на особливу діаграму, що має романтичне
назву, оспіване у безлічі бардівських пісень, - троянда вітрів. Частинки
забруднювача потрапляють від первісного джерела в сусідні області. Потім з
областей, що безпосередньо прилягають до джерела, поширюються вже в їх
околицях, і так далі. Сам характер цього процесу вказує на те, що для
моделювання розсіювання забруднювача в атмосфері можна використовувати підхід,
заснований на ідеології клітинних автоматів. У цьому випадку досліджуваний ділянку
представляється у вигляді клітинного поля. На полі позначаються клітини, в яких
знаходяться епіцентри поширення забруднення або зараження. Потім
концентрацію забруднювача в кожній клітині поля можна, наприклад, наближено
оцінювати за формулою: p>
(1) p>
де ak - це масив з дев'яти елементів,
що містить імовірності вітрів відповідних восьми напрямків і ймовірність
штилю. Само собою зрозуміло, що дев'ять ймовірностей вітрів різних
напрямків, включаючи вірогідність штилю, повинні в сумі давати одиницю. C * k
- Це вектор з дев'яти елементів, що містить концентрації забруднювача в
сусідніх з даною восьми клітинах і в ній самій. Крок за кроком для всіх клітин
поля обчислюється сума добутків концентрацій у сусідніх восьми осередках на
відповідні ймовірності вітрів. До суми додається ще й твір
ймовірності штилю на концентрацію забруднювача в самій поточній клітинці. Для
нормальної роботи програми необхідно мати дві копії клітинного поля. В одній
з копій слід зберігати попереднє покоління, а в іншій - подальше. При
зміні поколінь вміст наступного покоління стає попереднім. З
розрахунків виключаються крайні ряди комірок. Це робиться для того, щоб уникнути
"прикордонних" проблем при застосуванні формули (1). Повторюючи розрахунки
багато разів, ми можемо спостерігати динаміку формування еліпсоїдів розсіювання
в часі. При разовому "впорскуванні" забруднювача в яку-небудь клітинку він
швидко розсмоктується по клітинному масиву. Для отримання більш виразною
картини розсіювання в пропонованому на врізки фрагменті програмного коду
"впорскування" забруднювача у відповідні поля здійснюється в
початку розрахунку кожного чергового покоління. Значення концентрацій викидів
вводяться в комірки в якихось довільних одиницях. p>
Для сприйняття результатів моделювання важлива
розмальовка клітин. У наведеному програмному фрагменті використаний алгоритм,
переводить значення концентрацій забруднювача в різні градації яскравості
кольорів - від темно-червоного до темно-зеленого. При цьому високі значення
концентрацій зображуються відтінками червоного, який, у міру зниження Z,
переходить у жовтий, а потім поступово згасає до темно-зеленого кольору. p>
p>
Звичайно, для по-справжньому точних моделей процесів
розсіювання атмосферних забруднювачів слід звертатися до набагато
прецизійним методиками, ніж та, про яку йшла мова. Але все ж таки в даному випадку
вам немає необхідності вирішувати головоломних систему запаморочливих
диференціальних рівнянь в приватних похідних на суперкомп'ютері
астрономічної вартості. За допомогою цієї нескладної програмки ви можете
виконати якесь невелике цікаве мініісследованіе з комп'ютерного
моделювання екологічної ситуації у вашому районі, місті або області в
межах часових рамок однієї лабораторної роботи. p>
DefByte I-K p>
DefInt L-N p>
Dim G As Byte p>
Dim a (1 To 9) As
Single p>
Dim b (1 To 200, 1
To 200) As Single p>
Dim c (1 To 200, 1
To 200) As Single p>
Dim Color As Long p>
Dim Zmin As Single p>
Dim Zmax As Single p>
Dim R As Single p>
Dim R4 As Single p>
Dim Z14 As Single p>
Dim Z24 As Single p>
Dim Z34 As Single p>
Private Sub
Form_Click () p>
a (1) = 0.05 p>
a (2) = 0.05 p>
a (3) = 0.1 p>
a (4) = 0.1 p>
a (5) = 0.1 p>
a (6) = 0.1 p>
a (7) = 0.1 p>
a (8) = 0.15 p>
a (9) = 0.25 p>
z = 7 p>
Zmin = 0 p>
Zmax = 2 p>
R = Zmax - Zmin p>
R4 = R/4 p>
Z14 = Zmin + R4 p>
Z24 = Z14 + R4 p>
Z34 = Z24 + R4 p>
n = 50 p>
G = 50 p>
For f = 1 To G p>
b (35, 35) = z p>
b (45, 15) = z/2 p>
For i = 2 To n - 1 p>
For j = 2 To n - 1 p>
c (i, j) = 0 p>
k = 0 p>
For l = -1 To 1 p>
For m = -1 To 1 p>
k = k + 1 p>
c (i, j) = c (i, j) + a (k) * b (i + l, j +
m) p>
Next m p>
Next l p>
Next j p>
Next i p>
For i = 1 To n p>
For j = 1 To n p>
Color = SetColor (c (i, j)) p>
Line (6 * (i - 1), 6 * (j - 1)) - (6 * i - 1,
6 * j - 1), Color, BF p>
b (i, j) = c (i, j) p>
Next j p>
Next i p>
Next f p>
End Sub p>
Public Function
SetColor (z As Single) As Long p>
Dim t As Byte p>
Select Case z p>
Case Is
SetColor = RGB (0, 63, 0) p>
Case Zmin To Z14 p>
t = 63 + 192 * (z - Zmin)/R4 p>
SetColor = RGB (0, t, 0) p>
Case Z14 To Z24 p>
t = 255 * (z - Z14)/R4 p>
SetColor = RGB (t, 255, 0) p>
Case Z24 To Z34 p>
t = 255 * (1 - (z - Z24)/R4) p>
SetColor = RGB (255, t, 0) p>
Case Z34 To Zmax p>
t = 63 + 192 * (1 - (z - Z34)/R4) p>
SetColor = RGB (t, 0, 0) p>
Case Is> Zmax p>
SetColor = RGB (63, 0, 0) p>
End Select p>
End Function p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.xaoc.ru/
p>