• Главная
  • Блог
  • Пользователи
  • Форум
  • Литературное творчество
  • Музыкальное творчество
  • Научно-техническое творчество
  • Художественно-прикладное творчество

Реализация клеточного автомата «Аква - Тор» в среде разработки Blitz3D.

Опубликовано Окунцев Павел Владимирович вкл 16.04.2016 - 19:24
Окунцев Павел Владимирович
Автор: 
Шарафиев Динис Мунирович

Название работы: Реализация клеточного автомата «Аква - Тор» в среде разработки Blitz3D.

Фамилия и имя автора: Шарафиев Динис Мунирович.

Краткое название образовательное организации: БУ «Нижневартовский социально-гуманитарный колледж».

Город: Нижневартовск.

Актуальность исследования: Метод моделирования с помощью клеточных автоматов известен большинству под названием игры "Жизнь". Тем не менее, в более сложных программных реализациях, например в игре «Аква-Тор» - это мощный метод численного моделирования и обработки информации (включая передовые графические фильтры и распознавание образов). С точки зрения моделирования метод, к тому же, достаточно универсален, поскольку первичное описание законов развития ансамбля клеточных автоматов для многомасштабного моделирования позволяет освоить и прочувствовать элементарные механизмы реализации тех или иных биологических процессов происходящие в мире.

Клеточные автоматы применимы не только в математике, физике, биологии. Теория клеточных автоматов наиболее перспективно прилагаема к вопросу о разработке самовосстанавливаемых электронных цепей и других науках.

Проблема: Проблема сознания заключается в парадоксальной ситуации: мы, разумные существа, обладаем сознанием, оно у нас есть, но мы не знаем что такое сознание. Первая состоит в том, что само понятие «сознание» является предельным философским понятием, таким как понятие «бытие». А такого рода понятия не поддаются классическому родовидовому определению. Другая трудность проистекает из того, что сознание «весьма странное явление, которое есть и которое в то же время нельзя ухватить, представить как вещь». Однако есть еще одно обстоятельство, делающее проблему сознания особенно сложной.

Исследуя клеточные автоматы - мы приближаемся к разгадке многих задач во Вселенной.

Объект исследования является использование методов и алгоритмов прогнозирования на основе компьютерного имитационного моделирования и разработка клеточного автомата «Аква-Тор».

Предмет исследования: изучение высокоуровневых языков программирования Basic-семействах и совершенствование навыков работы в коммерческом игровом движке Blitz3D при разработке клеточного автомата «Аква-Тор».

Цель исследования: разработка универсальной программы клеточных автоматов и ее использование для моделирования поведения реальных материалов, а в частности разработка клеточного автомата «Аква-Тор».

Задачи исследования:   

1.     Изучить работы по данной теме, опубликованные в научных изданиях.

2.     Проанализировать математическую модель Ферхюльста,

3.     Разработать микромодель с установленными правилами на основе клеточного автомата.

4.     Реализовать клеточную модель в виде компьютерной программы.

5.     Провести ряд  экспериментов с приложением, иллюстрируя различные процессы, происходящие на разных участках клеточного автомата «Аква-Тор».

Скачать:

ВложениеРазмер
Файл statya.docx109.96 КБ

Предварительный просмотр:

Бюджетное учреждение профессионального образования

Ханты-Мансийского автономного округа - Югры

"Нижневартовский социально-гуманитарный колледж"

Программирование и информационные технологии.

Реализация клеточного автомата «Аква - Тор»

в среде разработки Blitz3D.

Работу выполнил:

Студент 2 курса, 214П группы

Шарафиев Динис Мунирович

Руководитель работы:

Окунцев Павел Владимирович

2016 г.


Оглавление

Введение        

Глава 1. Что такое клеточный автомат?        

1.1. Среда разработки клеточного автомата        

1.2. Игра «Аква-Тор».        

Заключение        

Список литературы        


Введение

Идея клеточных автоматов появилась в конце сороковых годов 20 века. Она была задумана и сформулирована Джоном фон Нейманом и Конрадом Цусе независимо друг от друга как универсальная вычислительная среда для построения, анализа и сравнения характеристик алгоритмов.

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

Актуальность исследования:

Метод моделирования с помощью клеточных автоматов известен большинству под названием игры "Жизнь". Тем не менее, в более сложных программных реализациях, например в игре «Аква-Тор» - это мощный метод численного моделирования и обработки информации (включая передовые графические фильтры и распознавание образов). С точки зрения моделирования метод, к тому же, достаточно универсален, поскольку первичное описание законов развития ансамбля клеточных автоматов для многомасштабного моделирования позволяет освоить и прочувствовать элементарные механизмы реализации тех или иных биологических процессов происходящие в мире.

Клеточные автоматы применимы не только в математике, физике, биологии. Теория клеточных автоматов наиболее перспективно прилагаема к вопросу о разработке самовосстанавливаемых электронных цепей и других науках.

Проблема:

Проблема сознания заключается в парадоксальной ситуации: мы, разумные существа, обладаем сознанием, оно у нас есть, но мы не знаем что такое сознание. Первая состоит в том, что само понятие «сознание» является предельным философским понятием, таким как понятие «бытие». А такого рода понятия не поддаются классическому родовидовому определению. Другая трудность проистекает из того, что сознание «весьма странное явление, которое есть и которое в то же время нельзя ухватить, представить как вещь». Однако есть еще одно обстоятельство, делающее проблему сознания особенно сложной.

Исследуя клеточные автоматы - мы приближаемся к разгадке многих задач во Вселенной.

Объект исследования является использование методов и алгоритмов прогнозирования на основе компьютерного имитационного моделирования и разработка клеточного автомата «Аква-Тор».

Предмет исследования: изучение высокоуровневых языков программирования Basic-семействах и совершенствование навыков работы в коммерческом игровом движке Blitz3D при разработке клеточного автомата «Аква-Тор».

Цель: разработка универсальной программы клеточных автоматов и ее использование для моделирования поведения реальных материалов, а в частности разработка клеточного автомата «Аква-Тор».

Задачи исследования:   

  1. Изучить работы по данной теме, опубликованные в научных изданиях.
  2. Разработать микромодель с установленными правилами на основе клеточного автомата.
  3. Реализовать клеточную модель в виде компьютерной программы.
  4. Провести ряд  экспериментов с приложением, иллюстрируя различные процессы, происходящие на разных участках клеточного автомата «Аква-Тор».


Глава 1. Что такое клеточный автомат?

        К середине двадцатого века наука накопила достаточно экспериментального материала и ввела в оборот множество языков описания процессов, в основном связанных с понятием дифференциального уравнения, и появление еще одного языка - языка вычислительной математики для эффективного перевода математической модели явления на язык чисел компьютера - казалось логическим шагом в развитии науки. А поскольку основной задачей при этом являлось получение эффективного (то есть быстрого) алгоритма решения задачи на компьютере, то чем сложнее была решаемая задача, тем более приблизительными и трудоемкими были расчеты. 
        Вместе с основными направлениями теории искусственного интеллекта развивалось теория автоматов (или, так все чаще говорят сегодня, автономных агентов - autonomous agents). Все большее число задач описывалось простыми моделями коллективного поведения автоматов, а широкое распространение компьютеров привело к массовому программированию таких моделей в различных областях науки - от биологии и социологии до химии и физики. 
        Клеточные автоматы (Cellular Automata), являясь частным случаем автономных агентов, оказались самыми эффективными моделями многих естественных и искусственных систем высокой сложность. В то же время эти модели "удобны" - они в максимальной степени приближены к средствам алгоритмического описания для современных компьютеров. Это и определило их "живучесть" как простых моделей сложных явлений. 
Классический пример клеточного автомата - (КА) "Снежинка" - показывает, как триллионы молекул воды могут самоорганизовываться в симметричные узоры снежинки, хотя этот процесс с первого взгляда хаотичен, и описные его на любом языке математики невозможно! 

        Первое, что необходимо определить - это структура пространства, где "живут" клеточные автоматы. Представим себе, что задано некоторое "плоское пространство" - поле, и для простоты рассмотрим лист бумаги, который расчерчен на регулярные области. Пусть в частном случае это будут отдельные одинаковые клетки т. е. перед нами обычный лист "в клеточку". Заметим, что мы уже сделали два теоретических упрощения: пространство выбрали двумерным (для наглядности), а на плоскости задали топологический закон (отдельная клетка имеет строго фиксированное число соседей). Но даже при таком ограничении математические объекты, о которых мы говорим, обладают на удивление сложным поведением. Кстати, для моделирования снежинок удобно использовать поле уже с шестигранной решеткой. 
        Второй параметр - это минимальная окрестность, то есть та совокупность клеток решетки (вокруг выбранной клетки), где действует простой локальный закон. Таких локальных окрестностей может быть множество - от одной клетки до всего поля, но самыми исследованными являются окрестности из четырех клеток или восьми клеток. Симметричная окрестность состоит из четырех соседей - Север, Юг, Восток и Запад; это окрестность фон Неймана. Полная окрестность состоит из восьми соседей; добавляется еще четыре клетки по диагоналям (окрестность Мура).
        Третьим параметром для определения поведения системы КА является число состояний клетки на поле (от 1 до n); значение этого параметра зависит от решаемой задачи. Так, для построения системы самовоспроизводящихся автоматов Дж. фон Нейман использовал клетки с 29 состояниями! Самые исследованные автоматы имеют два состояния - 1 и 0 (включено - выключено, живая - мертвая и т. д.); этим состояниям в каждой конкретной задаче можно присвоить любой смысл. И даже такая простая система имеет настолько сложное поведение, что уже позволяет моделировать разнообразные биологические и физические системы. Четвертый параметр - это правило "выживания" клетки, определяемое как ее состояние в момент времени k+1 в зависимости от ее состояния и состояния клеток минимальной окрестности в момент времени k. Нетрудно посчитать, что если правило работает в окрестности из восьми клеток, то таких правил может быть AxAx8, где A - число состояний клетки. А вот для окрестности КА с двумя состояниями клетки и окрестностью Мура существует 1077 вариантов правил поведения клетки. Из них, по понятным причинам, изучена только малая часть правил. 
        Есть еще ряд ограничений, которыми исследователи определяют модели КА. Прежде всего необходимо учитывать свойства границы поля, поскольку в представляющих реальный интерес моделях такая граница всегда существует. Законы поведения автоматов (а вы уже догадались, что "организмы" в отдельных клетках поля - это суть маленькие автоматы-роботы) на границе поля задают отдельными правилами. 
        И наконец, перейдем к одному из самых существенных свойств систем клеточного аппарата. В сообществах таких организмов-автоматов вводиться понятие синхронного времени - состояния всех клеток-автоматов изменяются одновременно! И это фундаментальное свойство в корне отличает модель вычислений в клеточных автоматах от всех алгоритмов последовательного вычисления, которые положены в основу современных компьютеров. 
        Таким образом, алгоритмы для клеточного автомата строятся исходя из предположения о том, что моделируемое явление или процесс можно представить как пространственную систему, состоящую из "физического" пространства, в котором располагаются отдельные "существа", причем каждое из этих существ "живет" по одним и тем же правилам - законам (выше мы их называли правилами клеточного автомата). Самый простой и в то же время необычный клеточный автомат был предложен Дж. Конвеем; он описывается следующими правилами [2].                

1.1. Среда разработки Blitz3D.

Если вы хотите создавать игры, но были остановлены из-за сложности языков программирования таких как C++ или Java, то данный движок для вас!

Blitz3D обеспечивает простую, но эффективную среду для создания игр - просто, потому что он основан на популярном и простом в использовании языке программирования BASIC

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

Вы можете писать коммерческие игры на Blitz3D. Великие названия таких как Best Friends и Juno Nemesis были написаны в Blitz. В самом деле, многие авторы Shareware переходят к Blitz с языков таких как С + + в связи с быстрым развитием.

Что же такое Blitz3D?

Супер гибкая система
Blitz3D строится вокруг идеи субъектов. Как правило, 3D-игра будет состоять из многих элементов, такими как камеры, освещение, сетки и так далее.

В Blitz3D, все эти считаются объектами. Это означает, что те же команды могут быть использованы для манипулирования и призваны решать широкий спектр вещей - например, команда TurnEntity могут быть использованы для поворотов камеры, света, сетки, или даже местности!

Блиц позволяет либо создать свою собственную сетку с нуля, или загрузка существующей сетки либо из X, 3DS или b3d формат. Формат b3d является уникальным для Blitz3D, и был разработан, чтобы обеспечить все возможности движка Blitz3D.

Blitz3D местности могут быть использованы для получения огромных сцен! Это достигается за счет LOD уровня детализации в полностью автоматическом процессе работы.

Спрайты просто текстурированные 2D прямоугольники - проста в настройке таких вещей как эффекты частиц, Heads-Up-дисплеи и так далее. Спрайты могут быть автоматически ориентированы лицом к камере, давая иллюзию сферического объекта

Blitz3D камеры предлагают программисту прямой контроль над просмотром, масштабированием, усечением спектра, противотуманными эффектами и даже предлагают изометрический режим. Несколько камер, также нет проблем - просто используйте CreateCamera столько раз, сколько хотите!

Blitz3D предлагает направленный свет. Вы можете управлять цветом, дальность и 'конусом' света с легкостью.

Супер гибкая система окраски
Blitz3D активно использует идею окраски текстур и других манипуляций, предлагая широкий спектр эффектов, таких как тонирование, мультитекстурирование и блики.

Мультитекстурирование позволяет применять до 8 слоев текстур для объекта для достижения таких эффектов, как lightmapping, детальное текстурирование, блики и множество других. Мультитекстурирование системы в Blitz3D также позволяет точно контролировать, как текстуры сочетаются вместе.

Окружающая среда отображения создает иллюзию отражений в сцене. Blitz3D предусматривает 2 формы отображения окружающей среды - сферической или кубической. Кубическая среда может обновляться в режиме реального времени, обеспечивая Awesome, динамические эффекты отражения. [5].

1.2. Игра «Аква-Тор».

Игра «Аква-Тор» наглядный пример применения клеточных автоматов в биологии. Игра моделирует поведение системы, состоящей из двух популяций, условно называемых «травоядные» и «хищники». Пищей для «хищников» являются особи «травоядных», пищи же для «травоядных» бесконечно много. Полем для игры является тор (рис. 1) – квадрат, замкнутый сам на себе, т.е. если особь достигает крайней клетки квадрата, она переносится на противоположную сторону квадрата автоматически (примером тора может служить любая планета, например, Земля).

Поведение системы характеризуется следующими параметрами:

• особь может переместиться на любую клетку, имеющую с данной общую сторону. Направление выбирается случайно из возможных свободных.

• особь может оставить потомство в той клетке, из которой она переместилась. Потомство появляется периодически, период является параметром.

• если особь является «хищной», то она может поглотить свою жертву, при этом перемещаясь на место жертвы.

• особь живет ограниченное количество времени, называемое временем жизни особи – так же параметр.

• если «хищная» особь не находит себе пищи в течение определенного времени (называемого временем голодной смерти), то она погибает. Время голодной смерти является параметром.

Построенная модель исследует поведение простейшей качественной модели экосистемы Мирового океана, состоящей из хищников и жертв. Таким образом, «хищниками» являются акулы, «травоядными» – рыбы. Дополнительным фактором является течение – справа налево. Течение влияет на поведение рыб, на поведение акул оно не влияет – акулы выбирают направление случайно из четырех возможных. Если же акула находится на соседней клетке с рыбой, то она перемещается в клетку своей жертвы, поглощая ее.

Потомство появляется и у акул и у рыб. Рыбы, как травоядные, приносят потомство чаще, чем хищные акулы. Кроме того, время смерти акулы подобрано таким образом, что акула приносит потомство только один раз за весь период жизни.

Особь умирает по истечении периода жизни. Если особи пришло время «родить», но период жизни истек, особь умирает, не оставляя потомства [1].

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

Рис. 1  Логистическая кривая.

Рост популяции исследуется с точки зрения многих наук, таких как: экология, демография, биология и др. Ключевую роль в этом вопросе играет модель Ферхюльста, предложенная им в 1843 году [3]:

здесь N – количество особей в популяции, K – вместимость ареала (максимально возможное количество особей), μ – коэффициент, характеризующий скорость роста популяции. Это уравнение называется также логистическим, а график его решения, соответственно, называется логистической кривой. Решение этого уравнения выглядит следующим образом:

причем в момент времени t=t0 численность популяции составляла N(t0)=N0

В случае двух популяций модель описывает поведение биологического

маятника (рис. 2). На этом рисунке обе популяции находятся в равновесии, то есть сосуществуют, взаимодействуя между собой.

Рис. 2. Статистика поведения двух популяций.

Отчетливо виден пик развития популяции рыб (верхний график), далее после добавления популяции акул (нижний) обе популяции выходят на периодические изменения.


Глава 2. Код программы и реализация клеточного автомата «Аква-Тор» в среде разработки Blitz3D.

Const mw=200

Const mh=200

Global cam

Global t

Global l1

Global l2

Dim f(4)

Global bl=50

Global ra=50

Global rb=100

Global maxh=512

Dim history(maxh,3)

Global gr

Global grm

Global gr2

Global grm2

Global ff

Global mb

Global ab

Global bb

Global lb

Global sb

Global nb

Global show

mb=CreateBank(mw*mh*4)

sb=CreateBank(mw*mh*4)

nb=CreateBank(mw*mh*4)  

ab=CreateBank(mw*mh)

bb=CreateBank(mw*mh)

Function Model_Init()

gr=CreateSprite()

grm=CreateTexture(512,512)

EntityTexture gr,grm

ScaleSprite gr,100,100

PositionEntity gr,-340,10,140

EntityAlpha gr,0.4

gr2=CreateSprite()

grm2=CreateTexture(512,512)

EntityTexture gr2,grm2

ScaleSprite gr2,100,100

PositionEntity gr2,-340,10,-100

EntityAlpha gr2,0.4

SetBuffer(TextureBuffer(grm2))

        Color 25,255,255

        Rect 0,0,512,512

        Color 0,0,255

        Line 0  ,0  ,511,0

        Line 0  ,0  ,0  ,511

        Line 511,511,0  ,511

        Line 511,511,511,0

        For o=1 To 511 Step 50

                Line 0,o,511,o

        Next

        For o=1 To 511 Step 50

                Line o,0,o,511

        Next

SetBuffer(BackBuffer())

cam=CreateCamera()

lit=CreateLight()

CameraRange cam,1,1000

PositionEntity cam,-120,350,0

RotateEntity cam,90,0,0

p=CreatePlane()

EntityColor p,30,200,200

bn=0

For y=1 To mh

        For x=1 To mw

                m_=CreateCube()

                ScaleEntity m_,0.8,0.1,0.8

                PositionEntity m_,x*2-(mw/2)*2,0,y*2-(mh/2)*2        

                EntityColor m_,0,255,0        

                PokeInt mb,bn,m_

                bn=bn+4

        Next

Next

Model_Random()

End Function

Function Model_Active()

FPS = 15

period = 1000 / FPS

time = MilliSecs () - period

While Not KeyDown(1)

        Repeat

                elapsed = MilliSecs () - time

        Until elapsed

        ticks = elapsed / period

        tween# = Float (elapsed Mod period) / Float (period)

        For framelimit = 1 To ticks

        If framelimit = ticks Then CaptureWorld

        time = time + period                        

                If KeyHit(57) Then If show Then show=0 Else show=1

        Model_Set()

        Graphic()

        t=t+1

        

        Next

        Flip

        RenderWorld

        

        Goto nomp

        bn=0

        an=0

        For y=1 To mh

                For x=1 To mw

                        m_=PeekInt(mb,bn)

                        a_=PeekByte(ab,an)

 

                        Color 0,255,0

                        If a_= 1 Then Rect 390+x*3,80+y*3,1,1

                        Color 255,0,0

                        If a_= 2 Then Rect 390+x*3,80+y*3,1,1

                        bn=bn+4        

                        an=an+1

                Next

        Next

        .nomp

                Color 200,100,50

        SetFont tf

        Text 400,20,"Wa-Tor"

        SetFont pf

        Text 400,680,"Time: ":Text 500,680,t

        Text 400,700,"A   : ":Text 500,700,l1

        Text 400,720,"B   : ":Text 500,720,l2

        Text 180,330,"T"

        Text 13 ,150,"N"

        Text 180,690,"A"

        Text 13 ,510,"B"

        Rect 5,5,sw-10,sh-10,0

        Rect 380,85,620,590,0

        Rect 380,20,620,62,0

        Rect 380,680,620,70,0

        Rect 10,20,360,730,0

Wend

End Function

Function Model_Random()

        an=0

        bn=0

        For y=1 To mh

                For x=1 To mw

                        If Rand(100)>60 Then

                                a_=1

                        Else

                                If Rand(100)>99 Then

                                        a_=2

                                Else

                                        a_=0

                                EndIf

                        EndIf

                        If a_= 1 Then n_=Rand(1,100) Mod ra

                        If a_= 2 Then n_=Rand(1,100) Mod rb

                        PokeByte ab,an,a_

                        PokeInt  nb,bn,n_

                        bn=bn+4

                        an=an+1

                Next

        Next

        t=0

End Function

Function Graphic()

        k#=1

        ;td=td+1

        ;If td>4 Then

        ff=ff+1

        For o=1 To maxh-1

                history(o,1)=history(o+1,1)

                history(o,2)=history(o+1,2)

                history(o,3)=history(o+1,3)

        Next

        history(maxh,1)=l1

        history(maxh,2)=l2

        If ff>50 Then

                history(maxh-1,3)=1

                ff=0

        End If

        ;td=0

        ;EndIf

        SetBuffer(TextureBuffer(grm))

        

        Color 25,255,255

        Rect 0,0,512,512

        Color 0,0,255

        Line 0  ,0  ,511,0

        Line 0  ,0  ,0  ,511

        Line 511,511,0  ,511

        Line 511,511,511,0

        For o=1 To 511 Step 50

                Line 0,o,511,o

        Next

        For o=1 To 511 Step 50

                Line o,0,o,511

        Next

        Color 100,150,0

        k#=0.1

        For o=1 To maxh

                ;Plot o,sh-history(o,1)

                Line o,511-history(o-1,1)*k#,o,511-history(o,1)*k#

                Line o,510-history(o-1,1)*k#,o,510-history(o,1)*k#

        Next

        SetFont gf

        Color 0,0,0

        For o=1 To maxh

                If history(o,3) Then

                        ;Plot o,511-history(o,1)*k#

                        Oval o-2,511-history(o,1)*k#-2,4,4

                        Text o,511-history(o,1)*k#,history(o,1)

                EndIf

        Next

        Color 255,0,0

        For o=1 To maxh

                ;Plot o,sh-history(o,2)

                Line o,511-history(o-1,2)*k#,o,511-history(o,2)*k#

                Line o,510-history(o-1,2)*k#,o,510-history(o,2)*k#

        Next

        

        Color 0,0,0

        For o=1 To maxh

                If history(o,3) Then

                        ;Plot o,511-history(o,2)*k#

                        Oval o-2,511-history(o,2)*k#-2,4,4

                        Text o,511-history(o,2)*k#,history(o,2)

                EndIf

        Next

        

        k1#=0.01

        k2#=0.1

        SetBuffer(TextureBuffer(grm2))

                Color 0,0,0

                ;Plot l1*0.2,511-l2

                Line (history(maxh-1,1)*k1#),(511-history(maxh-1,2)*k2#),(history(maxh,1)*k1#),(511-history(maxh,2)*k2#)

        SetBuffer(BackBuffer())

        ;Delay 100

End Function

Function Model_Set()

        bn=0

        For y=1 To mh

                For x=1 To mw

                        PokeByte bb,bn,1

                        bn=bn+1

                Next

        Next

        

        Model()

        l1=0

        l2=0

        bn=0

        For y=1 To mh

                For x=1 To mw

                        a_=PeekByte(ab,bn)

                        If a_= 1 Then l1=l1+1

                        If a_= 2 Then l2=l2+1

                        bn=bn+1

                Next

        Next

        

        bn=0

        an=0

        For y=1 To mh

                For x=1 To mw

                        m_=PeekInt(mb,bn)

                        a_=PeekByte(ab,an)

                        If show Then  

                                If a_= 0 Then HideEntity  m_

                                If a_<>0 Then ShowEntity  m_

                        Else

                                HideEntity  m_

                        EndIf

                        

                        If a_= 1 Then EntityColor m_,0,255,0        

                        If a_= 2 Then EntityColor m_,255,0,0

                        bn=bn+4        

                        an=an+1

                Next

        Next

End Function

Function Model()

For u=1 To 2

bn=0

an=0

For y=1 To mh

        For x=1 To mw

                a_=PeekByte(ab,bn)

                b_=PeekByte(bb,bn)

                n_=PeekInt(nb,an)

                s_=PeekInt(sb,an)

                If a_=1 And n_>ra Then n_=ra

                If a_=2 And n_>rb Then n_=rb

                If u=1 And a_= 2 Then Goto NO

                If u=2 And a_= 1 Then Goto NO

                If a_=2 And s_>bl Then

                        .DI

                        a_=0

                        PokeByte ab,bn,a_

                        PokeInt sb,an,0

                        PokeInt nb,an,0

                End If

                If a_=0 Or b_=0 Then Goto NO

                        

                PokeByte bb,bn,0

                n_=n_+1

                bx1=x-1

                bx2=x+1

                If x=1  Then bx1=mw

                If x=mw Then bx2=1

                by1=y-1

                by2=y+1

                If y=1  Then by1=mh

                If y=mh Then by2=1

                a1=PeekByte(ab,(x-1  )+mw*(by1-1))

                a2=PeekByte(ab,(bx1-1)+mw*(y-1  ))

                a3=PeekByte(ab,(bx2-1)+mw*(y-1  ))

                a4=PeekByte(ab,(x-1  )+mw*(by2-1))

                f(1)=a1

                f(2)=a2

                f(3)=a3

                f(4)=a4

                gh=0

                ge=0

                te=0

                nh=0

                For o=1 To 4

                        If f(o)=0 Then gh=gh+1

                        If f(o)=1 Then ge=ge+1

                        If f(o)=2 Then te=te+1    

                Next

                ;If a_=1 And ge=4 Then Goto DI

                ;If a_=2 And te=4 Then Goto DI

                

                If a_=2 And ge=0 Then s_=s_+1

                If a_=2 And ge>0 Then s_=0

                rh=0

                If (a_=1 Or (a_=2 And ge=0)) And gh>0 While rh=0

                        nh=RH()

                        For o=1 To 4

                                If nh=o And f(o)=0 Then rh=1

                        Next

                Wend

                If a_=2 And ge>0 While rh=0

                        nh=RH()

                        For o=1 To 4

                                If nh=o And f(o)=1 Then rh=1

                        Next

                Wend

                

                ;        If a=1 And gh>0 And te>0 Then

                ;        If f(1)=2 And f(4)=0 Then nh=4

                ;        If f(4)=2 And f(1)=0 Then nh=1

                ;        If f(2)=2 And f(3)=0 Then nh=3

                ;        If f(3)=2 And f(2)=0 Then nh=2                        

                ;EndIf

                

                ;If a=2 And gh>0 And te>0 And ge=0 Then

                ;        If f(1)=2 And f(4)=0 Then nh=4

                ;        If f(4)=2 And f(1)=0 Then nh=1

                ;        If f(2)=2 And f(3)=0 Then nh=3

                ;        If f(3)=2 And f(2)=0 Then nh=2                        

                ;EndIf

                xg=0

                yg=0

                Select nh

                        Case 1

                                xg=x

                                yg=by1

                        Case 2

                                xg=bx1

                                yg=y

                        Case 3

                                xg=bx2

                                yg=y

                        Case 4

                                xg=x

                                yg=by2

                End Select

                If xg<>0 And yg<>0

                        PokeByte ab,(xg-1)+mw*(yg-1),a_

                        PokeByte bb,(xg-1)+mw*(yg-1),0

                        PokeInt sb,((xg-1)+mw*(yg-1))*4,s_

                        If (a_=1 And n_<=ra) Or (a_=2 And n_<=rb) Then

                                PokeInt nb,((xg-1)+mw*(yg-1))*4,n_

                                PokeByte ab,bn,0

                                PokeInt sb,an,0

                                PokeInt nb,an,0                                                                                                                

                        Else                                 

                                PokeInt nb,((xg-1)+mw*(yg-1))*4,0

                                PokeInt sb,an,0

                                PokeInt nb,an,0                                                        

                        End If

                Else

                        PokeInt sb,an,s_

                        PokeInt nb,an,n_                

                End If

                .NO

                bn=bn+1

                an=an+4

        Next

Next

Next

End Function

Function RH()

        re=Rand(1,4)

        Return re

End Function

Программа представляет собой следующий интерфейс:


Заключение

Такие автоматы используются для моделирования поведения во времени и пространстве популяций живых организмов. Чтобы пояснить, о чем идет речь, опишем автомат Aquatorus, предложенный Аланом Дьюдни. Здесь элементами автомата являются не просто участки среды, а объекты различных типов, способные перемещаться в среде и взаимодействовать между собой. В автомате Дьюдни таких типов два: акулы и рыбы. Некоторый временной параметр задает период, после которого у объектов каждого типа возникает потомство, т.е. новый объект того же типа. Еще один параметр задает время жизни объектов каждого типа, причем для акул он меньше, но последние могут продлить свое существование, поглотив объект типа, рыба. 

При достаточно большом размере виртуальной среды, не представляет большой сложности подобрать вышеназванные параметры таким образом, чтобы система существовала достаточно долго. При этом количество рыб и акул будет испытывать колебания, но не упадет до нуля. Наблюдения за моделью показали, что возникновение упорядоченности в характере распределения объектов разных классов по среде, как правило, приводило к гибели одной из популяций. 

Таким образом, клеточные автоматы нашли широкое и устойчивое применение в качестве концептуальных и практических моделей для описания поведения пространственно-распределённых динамических систем. А их аналогия с процессами в живых клеточных комплексах дала многим современным учёным моральное право выделить их как отдельное направление развития методов и систем искусственного интеллекта [4].


Список литературы

  1. Астафьев Г.Б., Короновский А.А., Храмов А.Е. Клеточные автоматы: Учебно-методическое пособие. Саратов: Изд–во ГосУНЦ «Колледж», 2003. 24с.
  2. Бронников Владимир. Виртуальная жизнь клеточных автоматов. «Компьютер в школе», № 02, 1998.
  3. http://neuronus.com/history/8-istoriya-vozniknoveniya-kletochnykh-avtomatov.html
  4. http://postnauka.ru/
  5. Blitz3d - описание, документация на русском.


Поделиться:

Золотая хохлома

Как Дед Мороз сделал себе помощников

Муравьиная кухня

О чем поет Шотландская волынка?

Как нарисовать китайскую розу