Название работы: Реализация клеточного автомата «Аква - Тор» в среде разработки Blitz3D.
Фамилия и имя автора: Шарафиев Динис Мунирович.
Краткое название образовательное организации: БУ «Нижневартовский социально-гуманитарный колледж».
Город: Нижневартовск.
Актуальность исследования: Метод моделирования с помощью клеточных автоматов известен большинству под названием игры "Жизнь". Тем не менее, в более сложных программных реализациях, например в игре «Аква-Тор» - это мощный метод численного моделирования и обработки информации (включая передовые графические фильтры и распознавание образов). С точки зрения моделирования метод, к тому же, достаточно универсален, поскольку первичное описание законов развития ансамбля клеточных автоматов для многомасштабного моделирования позволяет освоить и прочувствовать элементарные механизмы реализации тех или иных биологических процессов происходящие в мире.
Клеточные автоматы применимы не только в математике, физике, биологии. Теория клеточных автоматов наиболее перспективно прилагаема к вопросу о разработке самовосстанавливаемых электронных цепей и других науках.
Проблема: Проблема сознания заключается в парадоксальной ситуации: мы, разумные существа, обладаем сознанием, оно у нас есть, но мы не знаем что такое сознание. Первая состоит в том, что само понятие «сознание» является предельным философским понятием, таким как понятие «бытие». А такого рода понятия не поддаются классическому родовидовому определению. Другая трудность проистекает из того, что сознание «весьма странное явление, которое есть и которое в то же время нельзя ухватить, представить как вещь». Однако есть еще одно обстоятельство, делающее проблему сознания особенно сложной.
Исследуя клеточные автоматы - мы приближаемся к разгадке многих задач во Вселенной.
Объект исследования является использование методов и алгоритмов прогнозирования на основе компьютерного имитационного моделирования и разработка клеточного автомата «Аква-Тор».
Предмет исследования: изучение высокоуровневых языков программирования Basic-семействах и совершенствование навыков работы в коммерческом игровом движке Blitz3D при разработке клеточного автомата «Аква-Тор».
Цель исследования: разработка универсальной программы клеточных автоматов и ее использование для моделирования поведения реальных материалов, а в частности разработка клеточного автомата «Аква-Тор».
Задачи исследования:
1. Изучить работы по данной теме, опубликованные в научных изданиях.
2. Проанализировать математическую модель Ферхюльста,
3. Разработать микромодель с установленными правилами на основе клеточного автомата.
4. Реализовать клеточную модель в виде компьютерной программы.
5. Провести ряд экспериментов с приложением, иллюстрируя различные процессы, происходящие на разных участках клеточного автомата «Аква-Тор».
Вложение | Размер |
---|---|
statya.docx | 109.96 КБ |
Бюджетное учреждение профессионального образования
Ханты-Мансийского автономного округа - Югры
"Нижневартовский социально-гуманитарный колледж"
Программирование и информационные технологии.
Реализация клеточного автомата «Аква - Тор»
в среде разработки Blitz3D.
Работу выполнил:
Студент 2 курса, 214П группы
Шарафиев Динис Мунирович
Руководитель работы:
Окунцев Павел Владимирович
2016 г.
Оглавление
Глава 1. Что такое клеточный автомат?
1.1. Среда разработки клеточного автомата
Идея клеточных автоматов появилась в конце сороковых годов 20 века. Она была задумана и сформулирована Джоном фон Нейманом и Конрадом Цусе независимо друг от друга как универсальная вычислительная среда для построения, анализа и сравнения характеристик алгоритмов.
Клеточный автомат представляет собой совокупность пространства, поделенного на клетки, в каждой из которых содержится некое значение, и правил, задающих закон преобразования при совершении шага. Это пространство может быть как плоскостью, так и любым N-мерным пространством. Действие происходит с помощью моделирования искусственного интеллекта.
Актуальность исследования:
Метод моделирования с помощью клеточных автоматов известен большинству под названием игры "Жизнь". Тем не менее, в более сложных программных реализациях, например в игре «Аква-Тор» - это мощный метод численного моделирования и обработки информации (включая передовые графические фильтры и распознавание образов). С точки зрения моделирования метод, к тому же, достаточно универсален, поскольку первичное описание законов развития ансамбля клеточных автоматов для многомасштабного моделирования позволяет освоить и прочувствовать элементарные механизмы реализации тех или иных биологических процессов происходящие в мире.
Клеточные автоматы применимы не только в математике, физике, биологии. Теория клеточных автоматов наиболее перспективно прилагаема к вопросу о разработке самовосстанавливаемых электронных цепей и других науках.
Проблема:
Проблема сознания заключается в парадоксальной ситуации: мы, разумные существа, обладаем сознанием, оно у нас есть, но мы не знаем что такое сознание. Первая состоит в том, что само понятие «сознание» является предельным философским понятием, таким как понятие «бытие». А такого рода понятия не поддаются классическому родовидовому определению. Другая трудность проистекает из того, что сознание «весьма странное явление, которое есть и которое в то же время нельзя ухватить, представить как вещь». Однако есть еще одно обстоятельство, делающее проблему сознания особенно сложной.
Исследуя клеточные автоматы - мы приближаемся к разгадке многих задач во Вселенной.
Объект исследования является использование методов и алгоритмов прогнозирования на основе компьютерного имитационного моделирования и разработка клеточного автомата «Аква-Тор».
Предмет исследования: изучение высокоуровневых языков программирования Basic-семействах и совершенствование навыков работы в коммерческом игровом движке 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) – квадрат, замкнутый сам на себе, т.е. если особь достигает крайней клетки квадрата, она переносится на противоположную сторону квадрата автоматически (примером тора может служить любая планета, например, Земля).
Поведение системы характеризуется следующими параметрами:
• особь может переместиться на любую клетку, имеющую с данной общую сторону. Направление выбирается случайно из возможных свободных.
• особь может оставить потомство в той клетке, из которой она переместилась. Потомство появляется периодически, период является параметром.
• если особь является «хищной», то она может поглотить свою жертву, при этом перемещаясь на место жертвы.
• особь живет ограниченное количество времени, называемое временем жизни особи – так же параметр.
• если «хищная» особь не находит себе пищи в течение определенного времени (называемого временем голодной смерти), то она погибает. Время голодной смерти является параметром.
Построенная модель исследует поведение простейшей качественной модели экосистемы Мирового океана, состоящей из хищников и жертв. Таким образом, «хищниками» являются акулы, «травоядными» – рыбы. Дополнительным фактором является течение – справа налево. Течение влияет на поведение рыб, на поведение акул оно не влияет – акулы выбирают направление случайно из четырех возможных. Если же акула находится на соседней клетке с рыбой, то она перемещается в клетку своей жертвы, поглощая ее.
Потомство появляется и у акул и у рыб. Рыбы, как травоядные, приносят потомство чаще, чем хищные акулы. Кроме того, время смерти акулы подобрано таким образом, что акула приносит потомство только один раз за весь период жизни.
Особь умирает по истечении периода жизни. Если особи пришло время «родить», но период жизни истек, особь умирает, не оставляя потомства [1].
Модель описывает несколько важных явлений реальной жизни, например, процесс развития популяции на закрытом ареале (график зависимости численности от времени ложится на так называемую логистическую кривую, (рис. 1). По этому графику видно, что, имея неограниченное количество пищи, популяция не будет расти безгранично, а выйдет на некоторый постоянный уровень.
Рис. 1 Логистическая кривая.
Рост популяции исследуется с точки зрения многих наук, таких как: экология, демография, биология и др. Ключевую роль в этом вопросе играет модель Ферхюльста, предложенная им в 1843 году [3]:
здесь N – количество особей в популяции, K – вместимость ареала (максимально возможное количество особей), μ – коэффициент, характеризующий скорость роста популяции. Это уравнение называется также логистическим, а график его решения, соответственно, называется логистической кривой. Решение этого уравнения выглядит следующим образом:
причем в момент времени t=t0 численность популяции составляла N(t0)=N0
В случае двух популяций модель описывает поведение биологического
маятника (рис. 2). На этом рисунке обе популяции находятся в равновесии, то есть сосуществуют, взаимодействуя между собой.
Рис. 2. Статистика поведения двух популяций.
Отчетливо виден пик развития популяции рыб (верхний график), далее после добавления популяции акул (нижний) обе популяции выходят на периодические изменения.
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].
Золотая хохлома
Как Дед Мороз сделал себе помощников
Муравьиная кухня
О чем поет Шотландская волынка?
Как нарисовать китайскую розу