"Чтобы приготовить эликсир мудрецов, или философский камень, возьми, сын мой, философской ртути и накаливай, пока она не превратится в зеленого льва. После этого прокаливай сильнее, и она превратится в красного льва... Киммерийские тени покроют реторту своим темным покрывалом, и ты найдешь внутри нее истинного дракона, потому что он пожирает свой хвост... Он загорится и, приняв вскоре великолепный лимонный цвет, вновь воспроизведет зеленого льва... Наконец, мой сын, тщательно ректифицируй, и ты увидишь появление горючей воды и человеческой крови" (цит. по Рабинович В.Л. Алхимический миф и химера собора Парижской богоматери//в книге Заблуждающийся разум?: Многообразие вненаучного знания/Отв. ред. и сост. И.Т. Касавин.-М.: Политиздат, 1990.-464 с., стр. 100)
Примерно так представляли себе средневековые алхимики процесс приготовления философского камня - средства для превращения или "трансмутации" металлов в золото. Кроме философского камня, у алхимиков был еще один знаменитый проект - создание химическим путем искусственного человечка - гомункулуса. Своих целей они так и не добились, хотя существенно обогатили арсенал технических средств, заложив тем самым фундамент современной экспериментальной химии.
К таинствам превращения веществ в живых системах наука подобралась только в XX столетии. Причем даже современная биохимия пока не может в полной мере искусственно воссоздавать процессы, лежащие в основе феномена жизни. Тем не менее, определенные успехи в области моделирования необыкновенных "жизнеподобных" химических реакций в современной науке все же достигнуты. Огромный шаг в этом направлении совершил сразу после войны советский ученый Белоусов. История его открытия весьма драматична. Работы Белоусова долго отказывались признавать. Слава пришла к ученому уже после смерти. Открытая реакция была названа его именем и вошла во все классические труды по неравновесной термодинамике и теории самоорганизации.
Причина длительного непризнания открытия состояла в том, что оно не вписывалось в догмы традиционной термодинамики. В этом смысле реакция Белоусова представляет собой глубокую и общую метафору биохимических процессов. Химию живых систем невозможно понять в рамках традиционной термодинамики. Химические процессы в живых системах идут в совсем ином направлении, чем указывает классическая физическая химия, а именно - в сторону роста упорядоченности и усложнения итоговых структур. Из химического хаоса возникает химический порядок.
В процессе реакции, открытой Белоусовым, из первичного хаоса смеси реагентов рождаются макроскопические упорядоченные структуры в форме кольцевых волн. Это, конечно, пока еще не гомункулус, но существенный шаг вперед по пути моделирования химических процессов нового типа - самоорганизационных процессов. А именно они и лежат в основе возникновения и эволюции живых систем.
В еще большей степени проблема создания гомункулуса, т.е. некоего подобия искусственного существа, нашла свое выражение в компьютерных науках. На заре компьютерной революции, так же, как и в эпоху расцвета алхимических исканий, казалось, что нужно еще немного наворотить электроники, чуть-чуть подработать программное обеспечение и… электронный гомункулус начнет вещать бесстрастным металлическим голосом из чрева железных шкафов, набитых проводами и обрамленных мигающими лампочками. По своей наивности эти мечты были вполне сравнимы с фантазиями алхимиков, только-только начавших постигать таинства химических превращений веществ. Им так же, как и пионерам компьютерной эры, представлялось, что их новая всемогущая наука наук перевернет все человеческие знания, позволит варить золото из ртути и, смешивая химические ингредиенты, взращивать в ретортах искусственных человечков. Несмотря на всю наивность и беспочвенность этих мечтаний, те и другие, несомненно, продвигали познание вперед, и, кто знает, может, когда-нибудь мечта человечества об искусственном создании чего-то, хотя бы отдаленно напоминающего живые системы, все-таки сбудется.
Ниже мы рассмотрим одну игру, принадлежащую к семейству игр клеточных автоматов, в которой удивительным образом соединились химия, компьютерные науки и современная теория самоорганизации. Речь пойдет о так называемой перемешивающей машине. Перемешивающая машина - это своеобразное развитие знаменитой клеточной модели жизни Дж. Конвэя. Как и все клеточные автоматы, перемешивающая машина представляет собой матрицу, состоящую из множества параллельно взаимодействующих друг с другом ячеек. Именно таким образом организованные параллельные вычислительные устройства, по мнению многих теоретиков искусственного интеллекта, позволят приблизиться к решению проблемы моделирования настоящих мыслительных процессов. Правила взаимодействия ячеек в перемешивающей машине таковы, что дают возможность моделировать волновые структуры, точь в точь напоминающие те, которые можно наблюдать в уже упоминавшейся химической реакции, открытой Белоусовым.
Клеточный автомат "Перемешивающая машина" был предложен М. Герхардом и Х. Шустером из Билефельдского университета ФРГ (см. статью А.К. Дьюдни "Перемешивающая машина"-клеточный автомат, моделирующий химические реакции//В мире науки, 1988 - №10, с.82-86). Правила взаимодействия ячеек автомата Герхарда и Шустера удобно излагать, используя эпидемическую терминологию. Отдельная клетка может находиться в некотором множестве состояний. Обозначим их целыми числами от 0 до n. Клетки, находящиеся в состоянии 0, будем называть здоровыми, а клетки, находящиеся в состоянии n, - больными. Все остальные промежуточные состояния интерпретируются как зараженность различной степени. Иными словами, клетка в рассматриваемой модели может быть либо здорова, либо заражена, либо больна. В зависимости от того, к какому из этих трех типов клетка относится в данный момент времени t, ее судьба в момент времени t+1 складывается по-разному. Если клетка здорова (то есть ее состояние x(i,j)=0), то ее состояние в момент времени t+1 будет определяться формулой:
Y(i,j)=Round(A/k1,0)+Round(B/k2,0),
Здесь A - это количество зараженных, а B - количество больных клеток в окрестности. Константы k1 и k2 представляют собой некие изначально задаваемые управляющие параметры. Функция Round возвращает округленное до указанного количества знаков значение выражения.
Если в момент времени t клетка заражена (то есть x(i,j) имеет любое значение, большее 0, но меньшее n), то в момент времени t+1 ее состояние будет определяться формулой:
Y(i,j)=Round(S/A,0)+G,
Здесь, как и прежде, А - количество зараженных соседей в окрестности клетки, а S - это сумма состояний всех соседних клеток, включая саму X(i,j). Константа G также представляет собой некий изначально задаваемый управляющий параметр. Следует помнить, что Y(i,j) ни при каких условиях не может превышать максимального значения n. Поэтому, если в процессе вычислений значение выходит за эти рамки, его следует приравнять к n.
Наконец, если клетка в момент времени t больна (то есть, ее состояние равно n), то в следующий момент времени t+1 она всегда переходит в состояние 0, то есть выздоравливает.
Программный код, моделирующий поведение перемешивающей машины, приведен на врезке. Для того, чтобы не изменять общие правила на границах поля, я "свернул" клеточную матрицу в тор. Процедура сворачивания лишает поверхность ее границ, а значит, и "пограничных" проблем. Для хранения состояний ячеек в предыдущем и последующем поколении используются два двухмерных массива - X(i,j) и Y(i,j). Результат выводится на форму в виде мозаики квадратиков, раскрашенных в градации серого цвета в соответствии с состояниями ячеек в момент времени t. При моделировании перемешивающей машины я категорически рекомендую читателям использовать анимационные технологии, поскольку динамика образования и движения волновых фронтов производит совершенно неповторимое впечатление именно в движении.
Как и во многих других играх клеточных автоматов, в поведении перемешивающей машины угадываются биоподобные черты. Клеточная плазма, первоначально хаотическая, начинает беспокойно пульсировать. Постепенно ее пульсации становятся все более регулярными и, наконец, в ее недрах рождаются устойчивые центры, генерирующие медленно распространяющиеся во все стороны ряды кольцевых волн. Наверное, нечто подобное происходит в коре нашего головного мозга, когда из хаоса нахлынувших на него нервных импульсов (например, во время чтения этой статьи) постепенно рождаются устойчивые мыслительные волны и происходит осознание поступающей в мозг информации.
В описанной игре воспроизводится удивительное явление самоорганизации, которому, по существу, обязан своим существованием и окружающий нас мир, и мы сами. Из хаотической смеси находящихся в случайных состояниях клеточек постепенно сами собой возникают некие макроскопические образования. Массивы клеток согласованно циклически меняют свои состояния, кооперируясь в связные коллективные структуры. Не правда ли, картина, достойная быть первым кадром научно-популярного фильма под названием "Сотворение мира". Если когда-либо в будущем удастся создать машины, способные действительно думать, а не просто считать, то они, несомненно, будут основываться на принципах самоорганизации. В первой главе известной монографии семидесятых годов "Искусственный интеллект", ее автор Э. Хант писал: "Можно ли сказать что-нибудь содержательное о самоорганизации самой по себе? Некоторые думают, что можно, но я не из их числа… Это предубеждение и послужило причиной того, что самоорганизующиеся системы в книге не обсуждаются". Сейчас феномен самоорганизации стал намного более понятен современной науке. И именно в этом направлении следует искать решение проблемы искусственного моделирования мышления. С древнейших времен лучшие умы человечества пытаются постичь тайну развития. Как, почему хаотическая первосубстанция, самоструктурируясь, породила и продолжает порождать столь сложные и высокоупорядоченные структуры? Уже очень давно было замечено, что основа механизма саморазвития материи состоит в вечном стремлении различных противоначал слиться в недостижимой гармонии. В играх клеточных автоматов эта диалектика предстает в овеществленном, наблюдаемом виде, демонстрируя феномен развития в очень ярких и завораживающе красивых формах.
А. КОЛЕСНИКОВ,
andr61@mail.ru
Dim x(210, 210) As Integer Dim y(210, 210) As Integer Dim c As Byte Dim n As Byte Dim m As Byte Dim k1 As Single Dim k2 As Single Dim g As Byte
Private Sub Form_Click() For f = 1 To 150 x(0, 0) = x(n, n): x(0, n + 1) = x(n, 1): x(n + 1, 0) = x(1, n): x(n + 1, n + 1) = x(1, 1) For k = 1 To n x(0, k) = x(n, k): x(k, 0) = x(k, n): x(n + 1, k) = x(1, k): x(k, n + 1) = x(k, 1) Next k For i = 1 To n For j = 1 To n Select Case x(i, j) Case Is = 0 a = 0: b = 0 For k = i - 1 To i + 1 For l = j - 1 To j + 1 Select Case x(k, l) Case 1 To m - 1 a = a + 1 Case Is = m b = b + 1 End Select Next l Next k y(i, j) = Round((a / k1), 0) + Round((b / k2), 0) blue = 0: red = 0: green = 0 Case 1 To m - 1 a = 0: s = 0 For k = i - 1 To i + 1 For l = j - 1 To j + 1 If x(k, l) > 0 And x(k, l) < m Then a = a + 1 s = s + x(k, l) Next l Next k y(i, j) = Round((s / a), 0) + g If y(i, j) > m Then y(i, j) = m Case Is = m y(i, j) = 0 End Select c = (x(i, j) / m) * 255 Line (4 * (i - 1), 4 * (j - 1))-(4 * i - 1, 4 * j - 1), RGB(c, c, c), BF Next j Next i For i = 1 To n For j = 1 To n x(i, j) = y(i, j) Next j Next i Next f End Sub
Private Sub Form_Load() Randomize n = 25 m = 100 k1 = 5 k2 = 4 g = 28 For i = 1 To n For j = 1 To n x(i, j) = m * Rnd Next j Next i End Sub
Горячие темы