Игра ЖИЗНЬ на LifeGE.NET
Moderator: Shaos
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Игра ЖИЗНЬ на LifeGE.NET
Предлагаю пообсуждать игру ЖИЗНЬ (см. топик Conway's Game of Life) с точки зрения возможности применения переборных и генетических алгоритмов для формирования тех или иных паттернов по начальным требованиям (см. http://LifeGE.NET зарегистрированный мной в 2007 году). Когда я много лет назад познакомился с этой игрой (по книжке Гарднера про головоломки) я задумался о возможности создания вычислителей поверх правил игры Жизнь - например путём использования потоков глайдеров как сигналов для передачи информации. Однако сейчас я вижу, что такие решния (а они уже есть) являются чрезвычайно громоздкими. Год назад я обратил внимание на другие конструкции - ZIP и WIRE (и те и другие передают информацию с максимально возможной скоростью - одна клетка за такт и причём по вертикали или горизонтали, а не как диагональные глайдеры). Кроме того для передачи таких "скоростных" сигналов необходима среда распостранения - канал передачи данных (см. тут). Проблема в том что для таких каналов известны паттерны сигналов, но только у некоторых есть паттерны генераторов и совсем у небольшого количества есть паттерны терминаторов (пожирателей сигналов без разваливания конструкции) и совсем нету функций. Нашу задачу я вижу в поиске паттернов "вычислителей" для некоторых наиболее подходящих сигналов. То что задача решаемая - я почти уверен - ведь у нас поверх универсального автомата всегда можно построить более сложный автомат, включая полноценный компьютер.
Last edited by Shaos on 13 Apr 2012 14:34, edited 3 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Игра ЖИЗНЬ
Вот пара примеров с вышеуказанного сайта (https://web.archive.org/web/20080516135727/http://www.yucs.org/~gnivasch/life/lightspeed/index.html):Shaos wrote:Год назад я обратил внимание на другие конструкции - ZIP и WIRE (и те и другие передают информацию с максимально возможной скоростью - одна клетка за такт и причём по вертикали или горизонтали, а не как диагональные глайдеры). Кроме того для передачи таких "скоростных" сигналов необходима среда распостранения - канал передачи данных (см. тут). Проблема в том что для таких каналов известны паттерны сигналов, но только у некоторых есть паттерны генераторов и совсем у небольшого количества есть паттерны терминаторов (пожирателей сигналов без разваливания конструкции)...
Я для начала решил выбрать сигнал с нижней картинки (автор: Noam Elkies, July 1997) - он хорош тем, что он может идти в фазе, противофазе и без сигнала (просто прямая горизонтальная линия) - самый натуральный троичный сигнал

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

Вышеуказанный сайт какое-то время назад переехал на новый адрес: http://www.gabrielnivasch.org/fun/life/lightspeed-signals
You do not have the required permissions to view the files attached to this post.
Last edited by Shaos on 13 Apr 2012 14:41, edited 4 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Другой пример оттуда же:
Автор данных сигналов Alan Hensel, 1995. Два сигнала справа легко поглащяются правой кромкой "канала", а вот крайний слева разбивает конструкцию, дойдя до конца. Так вот правые сигналы также можно использовать для передачи троичной информации - их плюс в том что они симметричны, а минус - большая ширина "канала" по сравнению с предыдущим варантом.
Автор данных сигналов Alan Hensel, 1995. Два сигнала справа легко поглащяются правой кромкой "канала", а вот крайний слева разбивает конструкцию, дойдя до конца. Так вот правые сигналы также можно использовать для передачи троичной информации - их плюс в том что они симметричны, а минус - большая ширина "канала" по сравнению с предыдущим варантом.
You do not have the required permissions to view the files attached to this post.
Last edited by Shaos on 15 Apr 2008 20:20, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Способы всё те же - головной сервер, раздающий задачи и собирающий решения, и два клиента на выбор - апплет написанный на Java и пускающийся прямо из браузера и программа написанная на C и распостраняемая в исходниках (Java для тех кто не хочет активно участвовать в разбазаривании своего CPU или боится запускать чужие нативные программы).Mac Buster wrote:Хм, таких конструкций я раньше не встречал. Очень интересна идея насчет передачи данных в троичном коде![]()
По поводу способов реализации распределенной сети для перебора вариантов ты уже думал ?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Пожалуй солью вместе блоги LifeGE.net и shaos.net, который возможно смогу притянуть к своему платному хостингу...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Вот тот же алгоритм на JavaScript:
Особенности реализации - клетки являются ячейками таблицы, в которых хранится количество соседей (и это количество визуально видно). По ходу пересчёта временное состояние ячеек сохраняется путём установки других (не white или blue) цветов - red для умирающих клеток и purple для рождающихся - но глазом это не заметно т.к. они потом быстро заменяются на нормальные цвета во втором проходе, когда корректируются числа соседей для клеток около которых произошло рождение или смерть.
Живой пример смотреть тут: [urlo]http://shabarshin.com/life/life.html[/urol]
Особенности реализации - клетки являются ячейками таблицы, в которых хранится количество соседей (и это количество визуально видно). По ходу пересчёта временное состояние ячеек сохраняется путём установки других (не white или blue) цветов - red для умирающих клеток и purple для рождающихся - но глазом это не заметно т.к. они потом быстро заменяются на нормальные цвета во втором проходе, когда корректируются числа соседей для клеток около которых произошло рождение или смерть.
Живой пример смотреть тут: [urlo]http://shabarshin.com/life/life.html[/urol]
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Написал про это в своём блоге http://shaos.net а также вывесил на http://lifege.netShaos wrote: Особенности реализации - клетки являются ячейками таблицы, в которых хранится количество соседей (и это количество визуально видно). По ходу пересчёта временное состояние ячеек сохраняется путём установки других (не white или blue) цветов - red для умирающих клеток и purple для рождающихся - но глазом это не заметно т.к. они потом быстро заменяются на нормальные цвета во втором проходе, когда корректируются числа соседей для клеток около которых произошло рождение или смерть.
Живой пример смотреть тут: http://shabarshin.com/life/life.html
Ещё раз объясню суть своего алгоритма 15 летней давности (смотреть по сишному коду) - вместо двухмерного массива булеанов имеем двумерный массив байтов, где храним (в младших 4 битах) заранее подсчитанное количество живых соседей для каждой клетки. В старших битах имеем один бит на текущее состояние и два бита на будущее - бит на рождение и бит на смерть. Пробегая по массиву нам уже не надо обегать каждую клетку считая соседей - они уже посчитаны - просто сверяемся по текущему состоянию и числу соседей - если клетка занята и не 2 и не 3 соседа - взводим флаг смерти, если клетка свободна и имеется ровно 3 соседа - взводим флаг рождения. После того как все флаги взведены - пробегаем по таблице ещё раз, обращая внимание только на те клетки где есть флаг смерти или флаг рождения, в соответствии с которыми декрементируем или инкрементируем суммы живых соседей в клетках вокруг. По моим понятиям вычислений будет сильно меньше, нежели в случае "честного" алгоритма, который считает соседей у каждой клетки каждый раз.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Нашёл тут один алгоритм от 1992 года, где тоже заранее подсчитанные соседи участвуют, но там клетки ещё и по 3 объединены для быстрых вычисленийShaos wrote:Написал про это в своём блоге http://shaos.net а также вывесил на http://lifege.netShaos wrote: Особенности реализации - клетки являются ячейками таблицы, в которых хранится количество соседей (и это количество визуально видно). По ходу пересчёта временное состояние ячеек сохраняется путём установки других (не white или blue) цветов - red для умирающих клеток и purple для рождающихся - но глазом это не заметно т.к. они потом быстро заменяются на нормальные цвета во втором проходе, когда корректируются числа соседей для клеток около которых произошло рождение или смерть.
Живой пример смотреть тут: http://shabarshin.com/life/life.html
Ещё раз объясню суть своего алгоритма 15 летней давности (смотреть по сишному коду) - вместо двухмерного массива булеанов имеем двумерный массив байтов, где храним (в младших 4 битах) заранее подсчитанное количество живых соседей для каждой клетки. В старших битах имеем один бит на текущее состояние и два бита на будущее - бит на рождение и бит на смерть. Пробегая по массиву нам уже не надо обегать каждую клетку считая соседей - они уже посчитаны - просто сверяемся по текущему состоянию и числу соседей - если клетка занята и не 2 и не 3 соседа - взводим флаг смерти, если клетка свободна и имеется ровно 3 соседа - взводим флаг рождения. После того как все флаги взведены - пробегаем по таблице ещё раз, обращая внимание только на те клетки где есть флаг смерти или флаг рождения, в соответствии с которыми декрементируем или инкрементируем суммы живых соседей в клетках вокруг. По моим понятиям вычислений будет сильно меньше, нежели в случае "честного" алгоритма, который считает соседей у каждой клетки каждый раз.

http://mytears.org/resources/doc/Assembly/ASNIP11/ASNIP11X/LIFE/QLIFE/
P.S. Интересно что если идти по тому же пути что и тут - складывать вместе 2 или более соседних клеток, то на то чтобы хранить количество соседей для каждой клетки уже ненадо иметь 4 бита - достаточно только 3-х, так как мы имеем как минимум на одного соседа меньше (сосед в том же пакете сидит ; ) и 0...7 (8 минус один) замечательно влезает в 3 бита!
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Продлил http://www.lifege.net ещё на один год...Shaos wrote:Пожалуй солью вместе блоги LifeGE.net и shaos.net, который возможно смогу притянуть к своему платному хостингу...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
И ещё на один...Shaos wrote:Продлил http://www.lifege.net ещё на один год...Shaos wrote:Пожалуй солью вместе блоги LifeGE.net и shaos.net, который возможно смогу притянуть к своему платному хостингу...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Игра ЖИЗНЬ
А сайт с сигналами таки помер - теперь смотреть только через вебархив http://web.archive.org/web/20100325170908/http://www.yucs.org/~gnivasch/life/lightspeed/index.htmlShaos wrote:Вот пара примеров с вышеуказанного сайта (http://www.yucs.org/~gnivasch/life/ligh ... index.html):Shaos wrote:Год назад я обратил внимание на другие конструкции - ZIP и WIRE (и те и другие передают информацию с максимально возможной скоростью - одна клетка за такт и причём по вертикали или горизонтали, а не как диагональные глайдеры). Кроме того для передачи таких "скоростных" сигналов необходима среда распостранения - канал передачи данных (см. тут). Проблема в том что для таких каналов известны паттерны сигналов, но только у некоторых есть паттерны генераторов и совсем у небольшого количества есть паттерны терминаторов (пожирателей сигналов без разваливания конструкции)...
http://www.yucs.org/~gnivasch/life/ligh ... p5oscs.gif
Я для начала решил выбрать сигнал с нижней картинки (автор: Noam Elkies, July 1997) - он хорош тем, что он может идти в фазе, противофазе и без сигнала (просто прямая горизонтальная линия) - самый натуральный троичный сигнал
На самой картинке можно видеть генератор (слева) и терминатор (справа) - причём генерируют они некие трёхклеточные конструкции, ползующие слева-направа. Перебором подобрать подобные паттерны генератора и терминатора - дело не простое, поэтому мне нужна распределённый вычислитель где есть много-много CPU
P.S. Или по новому адресу: http://www.gabrielnivasch.org/fun/life/lightspeed-signals
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
забыл отметиться в прошлом 2011 году - тогда я тоже продлил LifeGE.net ещё на год и вот теперь приходит время задуматься о продлении в 2012 годуShaos wrote:И ещё на один...Shaos wrote:Продлил http://www.lifege.net ещё на один год...Shaos wrote:Пожалуй солью вместе блоги LifeGE.net и shaos.net, который возможно смогу притянуть к своему платному хостингу...
P.S. присмотрелся я тут повнимательнее к фреймворку для распределённых вычислений BOINC и возникла у меня мысль сделать LifeGE-клиента именно под него - глядишь так можно было бы найти кучу волонтёров со своими компьютерами под мои задачи

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Попробовал этот JS-код в разных браузерах - оказалось что он работает нормально только в Firefox...Shaos wrote:Написал про это в своём блоге http://shaos.net а также вывесил на http://lifege.netShaos wrote: Особенности реализации - клетки являются ячейками таблицы, в которых хранится количество соседей (и это количество визуально видно). По ходу пересчёта временное состояние ячеек сохраняется путём установки других (не white или blue) цветов - red для умирающих клеток и purple для рождающихся - но глазом это не заметно т.к. они потом быстро заменяются на нормальные цвета во втором проходе, когда корректируются числа соседей для клеток около которых произошло рождение или смерть.
Живой пример смотреть тут: http://shabarshin.com/life/life.html
Ещё раз объясню суть своего алгоритма 15 летней давности (смотреть по сишному коду) - вместо двухмерного массива булеанов имеем двумерный массив байтов, где храним (в младших 4 битах) заранее подсчитанное количество живых соседей для каждой клетки. В старших битах имеем один бит на текущее состояние и два бита на будущее - бит на рождение и бит на смерть. Пробегая по массиву нам уже не надо обегать каждую клетку считая соседей - они уже посчитаны - просто сверяемся по текущему состоянию и числу соседей - если клетка занята и не 2 и не 3 соседа - взводим флаг смерти, если клетка свободна и имеется ровно 3 соседа - взводим флаг рождения. После того как все флаги взведены - пробегаем по таблице ещё раз, обращая внимание только на те клетки где есть флаг смерти или флаг рождения, в соответствии с которыми декрементируем или инкрементируем суммы живых соседей в клетках вокруг. По моим понятиям вычислений будет сильно меньше, нежели в случае "честного" алгоритма, который считает соседей у каждой клетки каждый раз.
Я тут за главного - если что шлите мыло на me собака shaos точка net