Форум myROBOT.ru » Образовательные проекты » Проекты для GameLogo » Жизнь Конвея

Страниц (2): [1] 2 »
 

1. Admin - 06 Июля, 2011 - 20:23:16 - перейти к сообщению
Клеточный автомат на примере игры "Жизнь", придуманной английским математиком Джоном Конвеем.

Правила, сформулированные Конвеем, из книги Мартина Гарднера:

Цитата:
Генетические законы Конуэя удивительно просты. Прежде чем мы их сформулируем, обратим внимание на то, что каждую клетку доски (которая, вообще говоря, считается бесконечной) окружают восемь соседних клеток: четыре имеют с ней общие стороны, а четыре другие - общие вершины. Правила игры (генетические законы) сводятся к следующему:
выживание. Каждая фишка, у которой имеются две или три соседние фишки, выживает и переходит в следующее поколение;
гибель. Каждая фишка, у которой оказывается больше трех соседей, погибает, т. е. снимается с доски, из-за перенаселенности. Каждая фишка, вокруг которой свободны все соседние клетки или же занята только одна клетка, погибает от одиночества;
рождение. Если число фишек, с которыми граничит какая-нибудь пустая клетка, в точности равно трем (не больше и не меньше), то на этой клетке происходит рождение нового "организма", т. е. следующим ходом на нее ставится одна фишка.

Важно понять, что гибель и рождение всех "организмов" происходят одновременно. Вместе взятые, они образуют одно поколение или, как мы будем говорить, один "ход" в эволюции начальной конфигурации. Ходы Конуэй рекомендует делать следующим образом:
начать с конфигурации, целиком состоящей из черных фишек;
определить, какие фишки должны погибнуть, и положить на каждую из обреченных фишек по одной черной фишке;
найти все свободные клетки, на которых должны произойти акты рождения, и на каждую из них поставить по одной фишке белого цвета;
выполнив все эти указания, еще раз внимательно проверить, не сделано ли каких-либо ошибок, затем снять с доски все погибшие фишки "(т. е. столбики из двух фишек), а всех новорожденных (белые фишки) заменить черными фишками.


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



Подробнее о "Жизни" Конвея можно прочитать в замечательной книге Мартина Гарднера
"Математические досуги" ; .

И еще одна цитата из Гарднера:

Цитата:
Конуэй высказал гипотезу, согласно которой не существует ни одной начальной конфигурации, способной беспредельно расти. Иначе говоря, любая конфигурация, состоящая из конечного числа фишек, не может перейти в конфигурацию, у которой число фишек превосходило бы некий конечный верхний предел. Это, наверное, наиболее глубокая и самая сложная задача, возникающая в игре "Жизнь".


Эти слова, скорее всего, были написаны еще до изобретения Планерного ружья Госпера.

Статья о Жизни Конвея в Википедии
http://ru.wikipedia.org/wiki/Жизнь_(игра)


В данном примере используется тороидальное представление поверхности, наиболее характерное для многих реализаций.

массив M [10,10]
массив M1 [10,10]
переменная x
переменная y
переменная хл
переменная хп
переменная ув
переменная ун
переменная n
переменная count

спрятать черепаху

кисть 50
ручка 7

загрузи в M
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
конец загрузки

копировать M в M1

повторять пока 1 = 1 {

заменить в M1 1 на 7

точка# M1, 150, 50

повторить для y от 1 до 10 {

если y - 1 < 1 то ув = 10 иначе ув = y - 1
если y + 1 > 10 то ун = 1 иначе ун = y + 1

повторить для x от 1 до 10 {

если x - 1< 1 то хл = 10 иначе хл = x - 1
если x + 1 > 10 то хп = 1 иначе хп = x + 1

n = M[y,хл] + M[ув,хл] + M[ув,x] + M[ун,хл] + M[ун,x] + M[ун,хп] + M[y,хп] + M[ув,хп]

если n > 3 то M1[y,x] = 0
если n < 2 то M1[y,x] = 0
если n = 2 то M1[y,x] = M[y,x]
если n = 3 то M1[y,x] = 1
}
}

копировать M1 в M
count = count + 1
пиши count
}


В качестве начальной конфигурации взята эмблема CNews Forum 2011



Эмблема "живет" 11 поколений Улыбка
2. киря2992312 - 07 Июля, 2011 - 23:31:17 - перейти к сообщению
и что этот программный код делает? (что робот делает)
3. Admin - 08 Июля, 2011 - 23:48:33 - перейти к сообщению
киря2992312 пишет:
и что этот программный код делает?


Моделирует клеточный автомат на примере игры "Жизнь", придуманной английским математиком Джоном Конвеем.

киря2992312 пишет:
(что робот делает)


Клеточный автомат - это не совсем робот. Он, скорее, может выступать в качестве системы управления роботом. Например, технология клеточных автоматов использована для создания эволюционирующей трехмерной структуры нейросетевых модулей в проекте CAM-Brain Machine Михаила Коркина. CAM-Brain Machine считают самым крупным искусственным мозгом в истории человечества (так утверждает Книга рекордов Гиннеса). Технология CAM-Brain использована в одном из интереснейших робопроектов - Robokoneko.
4. киря2992312 - 10 Июля, 2011 - 13:32:18 - перейти к сообщению
понятно, спасибо за объяснения)
5. cjA - 20 Июля, 2011 - 23:18:33 - перейти к сообщению
все руки не доходят посмотреть как это все будет на гексогональной сетке, она ближе к природе, но времени нету, только в умственных экспериментах. Правила Конвея придется подправить, да.
Admin, а у Вас- получится? Подмигивающий
6. nestandart - 21 Июля, 2011 - 13:50:08 - перейти к сообщению
cjA

Что такое гексогональная сетка ?
7. cjA - 22 Июля, 2011 - 08:41:05 - перейти к сообщению
это которая как соты, из треугольничков. у каждой точки получается не восемь соседей, а только шесть.
8. Admin - 27 Июля, 2011 - 15:04:02 - перейти к сообщению
cjA пишет:
все руки не доходят посмотреть как это все будет на гексогональной сетке, она ближе к природе, но времени нету, только в умственных экспериментах. Правила Конвея придется подправить, да.


Да, правила должны быть другие. И это будет уже не "Жизнь" Конвея.

cjA пишет:

Admin, а у Вас- получится?


Ничего сложного в этом нет.
9. cjA - 27 Июля, 2011 - 15:39:29 - перейти к сообщению
Admin пишет:
Ничего сложного нет

ну дык. хотелосьбы увидеть "самолетик на гексополе"
в движении, на доске шашками я чет переставляю, переставляю- не сообразить.
нужно сказать что я просто забываю кто у кого сколько имел соседей в прошлый раз. и на шахматном поле все время нужно помнить какие клетки не участвуют.
{зеленым закрасить?}
10. Admin - 30 Июля, 2011 - 04:07:44 - перейти к сообщению
cjA пишет:
ну дык. хотелосьбы увидеть "самолетик на гексополе"


Ну, так изобретите его. Улыбка
11. cjA - 06 Сентября, 2011 - 14:27:56 - перейти к сообщению
забыл уже где спрашивал, не найти.
CODE:

переменные а, в, р=30, с

массив ф1 [p,p]

когда появиться? это же интерпритируемый язык? какая ему разница откуда размер массива брать? И когда какое число в переменную сунуть?

(По поводу гексоганального Конвея вылезли траблы с теорией чисел, (четности) но на уровне GL вроде решаются (писанины правда много, но принципиальный отказ от процедур- я поддерживаю, если не умеешь писать код машины без процедур- не НУЖНО СОВСЕМ садится думать код машины. (в жабамашине нет процедур тоже, вроде, однако полИнета на ней работает)))

(Вашему лингботу нужно попу начесать- что за многоточия? Это из Гоголя была цитата, малороссийский язык..)
(и замените догда уж "п...й" на АБСОЛЮТНО БЕЗРАЗЛИЧНО КАК СУЩЕСТВУ ДУМАЮЩЕМУ И ЧУВСТВУЮЩЕМУ, так будет прикольней Улыбка )
12. Admin - 07 Сентября, 2011 - 11:35:02 - перейти к сообщению
cjA пишет:
когда появиться?


Возможно, к концу ноября. Грустный
13. cjA - 07 Сентября, 2011 - 13:17:45 - перейти к сообщению
тогда уж к началу апреля, снова на дачу уеду, там у меня как раз пенек GL тянет.

Ну хоть Вы не забываете, а то создалось впечатление...(в конце ноября мне этим будет заниматься не время...)
14. Admin - 12 Сентября, 2011 - 14:58:24 - перейти к сообщению
cjA пишет:
тогда уж к началу апреля


К началу апреля наверняка. Улыбка
15. Vadim_prog - 26 Февраля, 2014 - 22:15:18 - перейти к сообщению
'Немного переделал программку:


массив M [21,21]
массив M1 [21,21]

переменная x
переменная y
переменная xl
переменная xr
переменная yt
переменная yd

переменная n
переменная count

спрятать черепаху
перо 28
ручка 7

загрузи в M
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0
0 0 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0
0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1 0
0 0 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0
0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
конец загрузки


копировать M в M1

повторять пока 1 = 1 {

заменить в M1 1 на int(случайный*7)+9

точка# M1, 50, 0

повторить для y = 1 до 21 {

если y - 1 < 1 то yt = 21 иначе yt = y - 1
если y + 1 > 21 то yd = 1 иначе yd = y + 1

повторить для x = 1 до 21 {

если x - 1< 1 то xl = 21 иначе xl = x - 1
если x + 1 > 21 то xr = 1 иначе xr = x + 1

n = M[xl,y] + M[xl,yt] + M[x,yt] + M[xl,yd] + M[x,yd] + M[xr,yd] + M[xr,y] + M[xr,yt]

если n > 3 то M1[x,y] = 0
если n < 2 то M1[x,y] = 0

если n = 2 то если M[x,y] = 1 то M1[x,y] = 1
если n = 2 то если M[x,y] = 0 то M1[x,y] = 0

если n = 3 то M1[x,y] = 1
}

}

копировать M1 в M
count = count + 1
пиши count
}









'И еще один вариант:



'***********************************************************************
'***********************************************************************
'***********************************************************************




массив S [75,100] '*** ЭКРАН ***
массив P[48] '*** ПРАВИЛО ***

переменная x
переменная y

переменная l
переменная r

переменная n
переменная count


перо 8
спрятать черепаху

загрузи в P '*** ЗАДАТЬ ПРАВИЛО ***
0 0 2 1 2 0 3 4 2 1 2 0 4
конец загрузки

S[1,50]=int(случайный*5)+10 '*** ЗАДАТЬ КОЛОНИЮ ***

'повторить для x = 1 до 100 {
'S[1,x]=int(случайный*5)+10
'}

'пиши S[1,50]


заменить в S 0 на 8
повторить для y = 1 до 74 {

точка# S, 0, 0 '*** ВЫВОД ЭКРАНА ***
повторить для x = 1 до 100
{
если x - 1 < 1 то l = 100 иначе l = x - 1
если x + 1 > 100 то r = 1 иначе r = x + 1
n = S[y,l] + S[y,x] + S[y,r]-24
S[y+1,x]=P[ n+1 ]+8 '*** ПРИМЕНИТЬ ПРАВИЛО ***
}
count = count + 1
'пиши count
}