Страницы: 1 2 3 След.
RSS
Клеточные автоматы
 
Буквально в последние дни заинтересовался Клеточными автоматами.
И Виктор (vikttur) недавно напомнил о машине Тьюринга.
А некоторые клеточные автоматы этого класса обладают свойством универсальности по Тьюрингу. Последний факт был доказан для Правила 110 и игры «Жизнь» (из wikipedia.org)

Плюс Catstail выложил код на http://www.cyberforum.ru - Простенький клеточный автомат - "Жизнь"
Вообщем сегодня развлекался :)
На исходниках Catstail , сделал поле 100*100,  в связи с этим несколько оптимизировал код (думаю, стоит еще посмотреть, что можно сделать), добавил пару плюшек (поколения, скорость). В итоге получился неплохой тестер для данного вида клеточного автомата.
Файл прилагаю (поле зациклено по обеим координатам, правая кнопка отмечает, ставит - 1 в выделенных ячейках поля)
В файле "Планерное ружьё Госпера" стреляет в само себя.
Если кого-то эта тема заинтересовала, прошу присоединятся.
В файле можно задавать любые начальные условия (правая кнопка мыши или проставив "1" как "живые" клетки). Запусти свою "Жизнь"!
Изменено: bedvit - 18.12.2018 19:37:41
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, Вот она спираль истории. Как же давно это было :-)
По вопросам из тем форума, личку не читаю.
 
Поностальгировал. Эмулятор жизни был в сборнике скринсейверов на винде 3.11... как давно это было...
Изменено: JayBhagavan - 19.12.2018 05:39:44

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Вселенная 42.
Запуск.
Появляются первые звезды натюрморты: пару "ульев", "каравай", "авианосец" и осцилляторы: "звезды", "мигалки" и прочие.
Начинают путешествовать фотоныкосмические корабли.
Через некоторое время часть жизни гибнет, а часть кораблей сжирают "Пожиратели-2". Некоторым везет, это всего лишь были отражатели.
Через некоторое время появляется и разумная жизнь "долгожители" "R-пентамино" через 1103 поколения, фигура "жёлудь" (англ. acorn), которая состоит из 7 ячеек в начальном состоянии и стабилизируется спустя 5206 поколений, оставляя на поле 633 ячейки, образующие конфигурацию "дуб".
И уже методом разумного созидания, получаются "ружья" и "райские сады".
«Бритва Оккама» или «Принцип Калашникова»?
 
Ружье разрушает эволюцию! Где-то на 1000 поколении жизнь перестает развиваться. :)
Но задавать можно любую начальную ситуацию. Количество форм и течение жизни безграничны
 
Забавная штука. Сто лет не вспоминал о ней.
Придумал самую долгоразвивающуюся из простых фигур, назвал "девочка". Развивается почти 2300 поколений, потом вечность. Может кто знает более долгоиграющие "простые" фигуры?
 
Мартын, есть такая фигура как Acorn (Желудь) - Срок жизни: 5206 поколений.
Сделал модель размером 200*200 ячеек, уперся во время вывода на лист (даже вывод через массив, с Resize от левого верхнего угла, падает время вывода с ростом данных в правый нижний угол).
Есть идеи как побороть проблему со временем вывода?
+ думаю неоптимальный код расчета, хорошо бы оптимизировать, пишут что можно через хеш, запоминать предыдущие позиции, сравнивать, менять только изменившиеся, не пробовал, будет ли профит (есть еще  сверхбыстрый алгоритм Билла Госпера, даже не смотрел пока).
Кто-то может поделится инфой?
Файл с текущими наработками прикладываю.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Срок жизни: 5206 поколений.
Странно, у меня примерно на 1500 перешёл в стабильное состояние.  
 
Мартын, нужно большее поле, не знаю хватит ли 200*200 из моего последнего варианта и отключить закольцевание координат (это я сделаю в следующей версии), что бы планеры улетали в бесконечность и не мешали развитию.
«Бритва Оккама» или «Принцип Калашникова»?
 
Это с какой стороны смотреть. И другое интересно: эволюция завершается, а тут бац - новое вливание
 
Эх... я когда-то в Жизнь играл на листочке бумаги в клеточку из тетрадки :) Сколько тетрадок перевел :)
F1 творит чудеса
 
И резинок? Или каждое поколение - на отдельном листе (это вообще - повеситься :) )

Оказывается, до появления этой темы я о жизни ничего не знал!
 
Цитата
vikttur написал: Оказывается, до появления этой темы я о жизни ничего не знал!
:D
По вопросам из тем форума, личку не читаю.
 
Не, резинка быстро дырявила бумагу, чешских было не достать, а наши как наждак были :)
Начинал с маленьких полей - рядом рисовал следующее поколение и так далее.
Так постепенно заполнял лист, а если на лист уже не лезло - копировал последнюю на следующий и так далее.
Большие схемы переносил на следующий лист при помощи копирки - "наводил" только остающиеся клетки :)
Ну а что делать, из всех компьютеров под рукой был только МК-61. Я и Бэйсик/Паскаль учил по бумаге - писал программы и там же прогонял их :)
F1 творит чудеса
 
:)
Вывод.
Чтобы стать MVP, не обязательно иметь компьютер...
Догадка.
А может, это обязательное условие - наличие отсутствия?! Ибо, даже имея компьютер (на то время - собранный цветной!!! Sinclair), я не смог одолеть BASIC :)
 
Цитата
bedvit написал:
думаю, стоит еще посмотреть, что можно сделать
Было бы забавно свернуть поле в тор или бутылку Кляйна и запустить туда пару-тройку глайдеров :)
 
StoTisteg, сейчас поле в Тор и свёрнуто. Можете запустить пару глайдеров посмотреть. Завтра выложу модель, где можно переключать Тор или жизнь развивается до границ поля (не закольцованы координаты), специально для Виктора, что бы можно было и эволюцию фигур смотреть и так:
Цитата
vikttur написал:
эволюция завершается, а тут бац - новое вливание
. Делал вариант с уходом в бесконечность, это нужно выделять буфер в который должна поместится фигура связанных между собой точек (пока в разработке и обдумывании концепции).
Изменено: bedvit - 20.12.2018 20:46:30
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
сейчас поле в Тор и свёрнуто
В сферу все ж наверно.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
В сферу все ж наверно.
нет, все же в тор :)
В компьютерных реализациях игры поле ограничено и (как правило) верхняя граница поля «соединена» с нижней, а левая граница — с правой, что представляет собой эмуляцию поверхности тора, но на экране поле всегда отображается в виде равномерной сетки.
Мартын, для того, что бы дуб вырос из Желудя, потребовалось поле 300*300 и отмену закольцовки координат, см. прилагаемый файл, желудь я уже разместил, осталось запустить рост :)
Прилагаю V.3, как обещал с бОльшим полем и другими плюшками.
Работаю теперь над производительностью. Завтра посмотрю, что можно еще придумать.
«Бритва Оккама» или «Принцип Калашникова»?
 
Как и vikttur, не знал о существовании данного вида развлекухи. Но давно в голове была идея о гипотетическом сознании чего-то похожего, но на ином уровне. Я думал в адресное пространство в несколько сотен гигабайт как лазером пускать генератор, который забивает в хаотичном порядке это пространство какими-то символами. И параллельно ему по случайному адресу передавать процессору исполнение команд, записанных в этом пространстве. Передавать так же, в хаотичном порядке в многозадачном режиме создавая большое кол-во исполняемых "процессов". На зависших циклах исполнение прерывать и передавать его хаотично в новые точки памяти. Таким образом, по моей задумке, рано или поздно должны были бы сформироваться автовоспроизвоящие себя участки кода и со временем должны будут естественным отбором оставаться все более сложные и устойчивые к повреждениям от базового генератора и соседних рабочих кодов-конкурентов, забивающих адреса памяти новой информацией как базовая данность. Я понимал, что для реализации идеи нужны очень большие вычислительные мощности, потому что вероятность эволюционирования хаотичного кода в способный себя устойчиво кланировать крайне мала, поэтому процесс очень долгий и жизни не хватит получить что вразумительное. Но теоретически модель имеет все шансы получить некую модель развития виртуальной жизни. Наверняка в виртуальном пространстве со временем появиятся несколько видов устойчивых самовоспроизводящихся кодов, которые будут аналогами живых организмов и будут способны как входить в симбиоз, так и становиться прямыми конкурентами, отнимающими пространство друг у друга и изничтожающими друг друга. И все это дело с течением времени (ввиду постоянно хаотично вбрасываемой генерации повреждений извене = аналог мутаций)  должно будет приобретать все новые и более сложные формы. Т.е предполагается полная аналогичность эволюционным процессам от простейших к млекопитающим так сказать. Задумка была интересной, но вычислительных мощностей для ее реализации вроде бы нет до сих пор.
 
Цитата
bedvit написал:
Работаю теперь над производительностью.
Вот в таком варианте +60% производительности. По секундомеру количество поколений замерял :)
Там можно ещё допиливать и допиливать. Слишком много ограничений VBA накладывает :(
З.Ы. по оригиналу сразу видно, что не программист писал :)
З.З.Ы. Не понял прикола с переполнением при декларации массива. Если меняю формулу на её результат, то всё работает. Странно.
 
Цитата
bedvit написал:
Завтра посмотрю, что можно еще придумать.
Ну первым делом надо придумать
Код
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        With Target
         If .Row <= 300 And .Column <= 300 Then
            .Value = IIf(.Value = 1, 0, 1)
            Cancel = True
         End If
      End With
      
End Sub
ибо хотелось бы исправлять,
Код
Sub LifeStop()
    
    Application.StatusBar = Empty
    flag = True
    
End Sub
ибо забитый мусором статусбар раздражает и
Код
Function putMap() As Boolean
Dim r As Long, c As Long

putMap = False
Err.Clear
On Error Resume Next
Cells(1, 1).Resize(rEnd, cEnd) = Curr
If Err.Number <> 0 Then
   MsgBox "Все умерли..."
   Application.StatusBar = Empty
   putMap = True
End If

End Function
соответственно
Код
If putMap Then Exit Sub
ибо выпадание в IDE с ошибкой — не есть хорошо...
А вот как раз увеличивать производительность не надо, она вполне оптимальна.
Изменено: StoTisteg - 21.12.2018 16:31:26
 
IIf - медленный оператор. Писать лучше больше, но лучше )
 
vikttur, я знаю. Но в событиях листа скорость как бы не критична, функция "пользователь" ещё медленнее. Как говорил в универе препод по химкинетике, "не надо катализировать самую быструю стадию" :) А так можно поговорить о том, что As Long для переменной, которая никогда не станет больше 300 - оверкилл, и про то, зачем нужны константы...
Изменено: StoTisteg - 22.12.2018 16:22:21
 
Всем привет!
Переработал весь алгоритм расчета, приближаюсь к ограничениям Excel.
Есть некоторые идеи вообще пойти не через растровые вычисления, а через векторные, пока идею полностью не оформил, говорить о ней не будем + упираемся в бОльшое время вывода уже рассчитанных данных на экран.
Прилагаю новую модель, скорость расчет зависит только от размера фигуры, но не от размеров поля (можете запустить планер, проверить).  На порядок быстрее при сравнимых моделях расчета с предыдущими моделями, размер поля 500*500 (поэтому и версия 5, предыдущие вер.1-100*100, вер.2-200*200, вер.3-300*300)
Парни, извините, ваш код не смотрел (времени не было), если есть дополнения к уже новой модели, пишите - рассмотрим.
Цитата
StoTisteg написал:
забитый мусором статусбар раздражает
- он не забитый, а показывает количество новых поколений (после нажатия старт), на листе отображается всего поколений после "Очистить поле". "Очистить поле" - очищает общий счетчик и статус бар.
По-моему это логично, пока не очищено поле, развивается модель заложенная изначально. При старте считаются новые поколения. Все данные мы видим. Хотим все почистить жмем очистить "Очистить поле". Хотел добавить время, но не знаю нужна ли эта инфа., в этой игре время это количество поколений. А время для замера скорости, нужно ли?
В модельке "Планерное ружьё Госпера" стреляет в бесконечном режиме (т.к. за границу планеры не переходят) - можно тестировать скорость.
Изменено: bedvit - 22.12.2018 18:27:52
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
он не забитый, а показывает количество новых поколений (после нажатия старт), на листе отображается всего поколений после "Очистить поле". "Очистить поле" - очищает общий счетчик и статус бар
Да, но после нажатия на Стоп инфа в статусбаре становится именно что мусором. Угадайте с одного раза, что именно ожидает там увидеть средний завсегдатай этого форума, когда не любуется Вашей прогой ;)
 
А я на статусбар вообще внимания не обратил :)
 
StoTisteg, увидит количестве новых поколений. Но резон есть убрать в отдельную ячейку. Принято.
Вырастил дуб из Желудя - за 5206 поколений. Скорость и размер поля позволяют.
Жду ещё оптимизаций, поедложений, что бы оформить итоговую модель.
«Бритва Оккама» или «Принцип Калашникова»?
 
Поле игровое, мне представляется, нет смысла делать больше, оптимизация в алгоритме расчета ещё может иметь место быть, оптимизация в выводе на лист Excel - пока нет идей, как ускорить.
«Бритва Оккама» или «Принцип Калашникова»?
 
vikttur, я тоже. Пока мне макрорекордер не занадобился...
bedvit, да нет смысла там что-то ускорять. Это ж анимация, она быстрой быть не должна. Можно даже слегка искусственно замедлить, например, перебором всего поля, а не только того, что имеет смысл перебирать.
Цитата
bedvit написал:
В модельке "Планерное ружьё Госпера" стреляет в бесконечном режиме
Вот я вообще сомневаюсь, что на торе возможно вечное ружьё. Есть подозрение, что рано или поздно оно застрелит само себя...
Изменено: StoTisteg - 22.12.2018 23:47:34
Страницы: 1 2 3 След.
Наверх