Страницы: Пред. 1 2 3 След.
RSS
Клеточные автоматы
 
Цитата
StoTisteg написал:
даже слегка искусственно замедлить
для этого есть параметр в модели "Замедление, сек" - задавайте любое (можно и доли секунды, к примеру 0,2 сек.)
Цитата
StoTisteg написал:
вообще сомневаюсь, что на торе возможно вечное ружьё. Есть подозрение, что рано или поздно оно застрелит само себя.
- для этого есть переключатель "гибель клеток на границе - 0 / закольцованные координаты - 1 ", где закольцовка отменяется и жизнь не может выйти за границы поля, еще есть "пожиратели" (в прилагаемом файле файле аж 5!, 2 в составе "отражателя" -№1 на рис.)
Итак прилагаю модель, где в бесконечном цикле:
1. Стреляет "Планерное ружьё Госпера" -слева и ружье "B-52 bomber" - правее (№2 на рис.)
2. Летящие планеры, поворачивает на 90 градусов - Отражатель "Snark" - №3 на рис.
3. "Планер P60" -  представляет собой осциллятор периода 60, состоящий из планера, отраженного двумя пятиугольниками (планер летает между двумя Pentadecathlon) - №4 на рис.
4. Планеры мы уже все знаем, стрелками указаны направления полета.
5.Что бы планеры не улетали их жрут пожиратели "Eater 1" - №1 на рис.

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

Запускаем - смотрим движение описанное выше и отмеченное на прилагаемом рисунке.
Изменено: bedvit - 23.12.2018 12:39:37
«Бритва Оккама» или «Принцип Калашникова»?
 
Модернизировал это чудо. Получилось более стабильно-быстрее. Скорость фактически не зависит от размера поля. Жаль нельзя массив в ключ засовывать, возможно, что скорость бы ещё возросла.
 
Мартын, благодарю за внимание к теме и за рабочий пример. Есть два момента:
1. при отрисовке поля у вас на иногда видно паразитные клетки предыдущего поколения (посмотрите, после 400 ходя хорошо видно на планере и на периодических фигурах, когда движения замедляется)
2. менее важный момент - мой пример все же немногим быстрее, даже в конце роста дуба из жёлудя (вначале быстрее явно, в конце почти одинаковые скорости). Excel16 x64.
Сравните и у себя, возможно мой тест не показателен. Пример прилагаю.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
мой пример все же немногим быстрее
Я замерял по секундомеру. Ваш вариант 1000 поколений давал за 5 мин 22 сек, мой - за 1 мин 56 сек. На малых полях (когда всё расположено компактно и не расползается) Ваш вариант работает быстрее, но как только хоть один глайдер улетает подальше, то начинаются жуткие тормоза. В моём варианте размер поля и "разбег жителей" не имеет никакого значения, важно только их количество, если "жителей" немного, то жизнь ОЧЕНЬ ускоряется.
Так что "кто быстрее" - вопрос относительный, как и всё в этом мире :)
Цитата
bedvit написал:
видно паразитные клетки предыдущего поколения
не замечал. посмотрю внимательнее. не должно быть такого.
 
Мартын, у вас какая конфигурация ПК и Офиса?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
конфигурация ПК и Офиса?
 
У меня:
Тип ЦП QuadCore Intel Core i7-3770, 3700 MHz (37 x 100)
DIMM: 16 ГБ DDR3-1600 DDR3 SDRAM  
Excel 2016 x64

Мой файл до 1000 поколения отрабатывает 3мин.30 сек, Ваш - 5мин.10сек
Возможно, дело в разрядности Excel, у нас она разная.

Но это все не важно, это все равно медленно.

Надо пилить свою программу ;-)
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Надо пилить свою программу ;-)
Поделюсь и я заготовками, раз подняли тему.
Предлагаю на вашу оценку стабильную бета версию своей программы - LIFE
Правая кнопка мыши - двигает поле.
Левая рисует (можно и во время расчета).
Колесико мыши - масштаб (масштабирование до экранного пикселя).
Вообщем, все стандартно.
Поле для жизни БЕСКОНЕЧНОЕ.
Статистика справа.
"Замедление" можно задавать (в миллисекундах 1сек.=1000мс.) , кому слишком быстро :)
Сохранение шаблонов и загрузка в формате *.rle  в процессе разработки.
Оптимизация скорости пока не проводилась, еще впереди (еще только бета версия), но и сейчас вполне для запуска своей вселенной, проверьте сами.
Продукт написан на С++, GUI на WinAPI.
Изменено: bedvit - 18.01.2019 17:37:23
«Бритва Оккама» или «Принцип Калашникова»?
 
Доделаю загрузку шаблонов, запустим фабрику космических кораблей.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
запустим фабрику космических кораблей.
Это сколько-же у людей свободного времени!!! (я про видео).
Цитата
bedvit написал:
это все равно медленно.
Тут я полностью согласен.
Цитата
bedvit написал:
Надо пилить свою программу
Лет 17 назад я бы с энтузиазмом воспринял это предложение, но сейчас увы.... Работаю с 8:00 до 20:30 и времени ни на что не остаётся.
 
Цитата
bedvit написал: запустим фабрику космических кораблей.
Обалдеть! (наружу рвется другое определение :) )
 
Цитата
Мартын написал:
Это сколько-же у людей свободного времени!!! (я про видео).
я думаю по отработанным шаблонам строили. Придумать это невозможно. Может даже как-то рассчитана была модель.
Цитата
Мартын написал:
времени ни на что не остаётся.
здесь не могу не согласится, сам  также, но хобби затягивает. Приходится выделять личное время, вечером, в выходные. Но будет желание, пишите.
Цитата
vikttur написал:
Обалдеть! (наружу рвется другое определение  )
Да! Сильно! И мне нравится!
«Бритва Оккама» или «Принцип Калашникова»?
 
Даже в текущей реализации данный шаблон должен по скорости нормально отрабатывать в Life. Посмотрим, по необходимости, перейдем на DirectX и графику переложим на ГП, пусть ЦП занимается расчетом жизни, подключим все ядра. Загрузку/выгрузку только пилить печаль, с парсингом всех этих строк. Может по алгоритму на форум  задачку подкинуть? Алгоритм простой.
Изменено: bedvit - 18.01.2019 22:10:59
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Буквально в последние дни заинтересовался Клеточными автоматами
    Проясните для непросвещённых, пожалуйста, что такое Клеточные автоматы? Тему читал, но что-то так и не понял.
 
Лунтик,  Поисковики знают все если они чего-то не знают, значит Вам это не нужно.
По вопросам из тем форума, личку не читаю.
 
Life v1.0.0.0
Работает загрузка файлов-шаблонов RLE, сохранение в этот же формат. Несколько оптимизирован алгоритм.
Итак пришло время запустить Фабрику космических кораблей p416_60P5H2V0_gun.
На моем ПК программа Life выдает 27 поколений в секунду.
Есть некоторые соображения по оптимизации алгоритма расчета поколений.
Ожидаются в следующей версии программы.
«Бритва Оккама» или «Принцип Калашникова»?
 
Шаблон фабрики в архиве.
Изменено: bedvit - 28.01.2019 17:01:09
«Бритва Оккама» или «Принцип Калашникова»?
 
Life v1.1.0.0
Добавлены горячие кнопки, оптимизирован алгоритм отрисовки.
Теперь на winapi выдает 40 поколений (кадров) в секунду.
Итого прирост от предыдущей версии - 50%.
Думаю больше не отжать, без серьезных костылей записи напрямую в память ручками попиксельно.
Попробую подключить Dirext3D.
Изменено: bedvit - 05.02.2019 18:38:33
«Бритва Оккама» или «Принцип Калашникова»?
 
Life v1.2.0.0
Небольшие доработки алгоритма расчета, проведена работа над ошибками при рисовании во время выполнения, оптимизирован вывод только видимой части кадра, рекомендуется как замена версии 1.1.0.0
55 поколений в секунду.
В идеале нужно 60 - с частотой обновления кадров на экране.
Изменено: bedvit - 18.02.2019 17:15:39
«Бритва Оккама» или «Принцип Калашникова»?
 
Столько работы проведено... Пора готовить на продажу )
 
Виктор, готов поделится 50%/50% с тем, кто займётся маркетингом и продажами. Если серьезно, продукт в данном виде не для продаж, а так, развлечения и обучение. Если только выложить на Play маркет, бесплатно и размещать рекламу :) Для этого должны быть конкурентные свойства у данного продукта и интерес у аудитории. Сейчас это просто развлечение. Да и у пользователей широкий простор в выборе самых разнообразных развлечений, от стратегий до шутеров. Здесь явно эта тема проигрывает.
«Бритва Оккама» или «Принцип Калашникова»?
 
Да понятно, я шучу.
А на самом деле здорово, когда интересная задача и хочется над ней работать.
Я еще до Нового года сделал вариант на итеративных вычислениях. VBA - только для настроек и управления. Нужно еще формулу перехода на границах поля, но забросил.
 
Удалось достичь 55 кадров (поколений) в секунду (обновил пост 49). В идеале нужно 60 - макс. частота (частота обновления инфо на мониторе, 60 Герц - 60 кадров в секунду). Правда, этот показатель сильно зависит от ПК (на слабом выдает всего 15 кадров/поколений в секунду) и размеров модели (тестовая -"фабрика" - 27 тыс. клеток).
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
vikttur написал:
Я еще до Нового года сделал вариант на итеративных вычислениях.
А что забросили, стало не интересно или не эффективно? Я тоже пробовал, мне не понравился из-за некоторых нюансов итеративных вычислений, но подкупает многопоточный расчет через формулы (в VBA только один поток).
Хотел выложить версию, но не нашел (жаль).
«Бритва Оккама» или «Принцип Калашникова»?
 
Это было, когда другие версии в теме были медленные.
На итерациях - только для интереса. Из-за формул файл очень сильно пухнет. Но картина жизни воспроизводится.
Позже выложу.
 
Life v1.3.0.0
Основные параметры:
1. Размер игрового поля 2^32 на +2^32 клеток (рамка примерно 4,3*4,3 млрд. клеток)
2. Масштаб от 32 пикселей - одна клетка, до 32768 клеток на один пиксель (можно загрузить целиком самый большой космический корабль Gemini, размером рамки в 4 млн. клеток, посмотреть в подробностях - по ссылке есть загрузочный шаблон в архиве)
Такой большой корабль у меня отрисовывается - одно поколение - 1 сек.
3. Замедление хода в мс.(микросекунда=1/1000 сек.)
4. Шаг поколений. В один ход (ход - отрисовка инфо на экране) рассчитываем указанное количество поколений. Параметр нужен для того, что бы посмотреть динамику жизни при скорости выше 60 поколений в секунду, т.к. WinAPI не может отрисовать более 60Гц в секунду (частота обновления экрана).
К примеру, при шаге 7 поколений в ход, фабрика космических кораблей у меня собирает космические корабли со скоростью 120 поколений в секунду (см.рис).
С какой скоростью строятся у вас?
5. Самая быстрая отрисовка в WinAPI через CreateDIBSection, с прямым доступом через DIB к битам битовой карты (следующий этап - Dirext3D, пока в разработке).
6. Новая кнопка "Начало координат" - перемещение в начало координат (левая верхняя точка экрана - координаты: 0.0). Работает при расчете жизни. Если вдруг потерялись :) Эта же позиция отрисовывается при запуске программы и при создании нового поля. Загрузка всех шаблонов происходит тоже в начало координат.
7. Сочетание кнопок для действий - новый холст, открыть и сохранить файл - стандартные (к примеру, как в Excel)
Изменено: bedvit - 26.04.2019 12:56:33 (26/04/2019 - скорректировал описание)
«Бритва Оккама» или «Принцип Калашникова»?
 
Выложил наработки в своем блоге.
Conway's Game of Life in Excel
и
Conway's Game of Life (С++ WinAPI)
Изменено: bedvit - 02.03.2019 14:33:59
«Бритва Оккама» или «Принцип Калашникова»?
 
14/03/2019 Обновление версии: Life v1.4.0.0
- Обновлен интерфейс и сетка игрового поля.
- Оптимизирован алгоритм расчета и отрисовки - теперь быстрее на 30%.
- Добавлены команды:
13. "Инфо.панель" - информация о настройках, игровом поле.
14. "Показать ареал" - показать весь ареал (клетки где была и есть жизнь) на экране.
15. "Автомасштаб" - автомасштабирование ареала до размеров экрана.
16. "Ареал по живым" - сужения ареала только до живых клеток.

И замеченного: у меня, версия х32 работает на 30% быстрее, чем х64 (win7 x64), что на первый взгляд, кажется парадоксальным.

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

на рис. космический корабль "p15 pre-pulsar spaceship"
Интересны мнения и выявленные баги.
В архиве прилагаю для теста пару простых шаблонов в формате RLE.
Изменено: bedvit - 18.03.2019 13:45:38 (v1.4.0.4)
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо. Игрался с автоматами на .NET, но так далеко не зашел :)
Мне кажется не совсем корректно работает последовательное кликание на "автомасштаб" и "ареал по живым". Картинка не меняется, хотя некоторые объекты уходят за границу поля. Но сделано здорово, конечно.
 
VSerg, спасибо за оценку. Команда "Автомасштаб" - автомасштабирует ареал (пространство, где когда-либо была жизнь) до размеров экрана, т.е за границу экрана ничего не уходит, алгоритм подгоняет масштаб под нужный размер автоматом. Команда "Ареал по живым" - сужает ареал только до живых клеток (но не масштабирует, просто пересчитывает ареал и в инфо панели отражается новый, этот же ареал участвует в сохранении, в файле), при этой команде автомасштабирования нет, клетки могут уйти за границы экрана. Что бы было видно все живые, без пространства, в котором ранее была жизнь, эти две команды нужно включить одновременно. Протестируйте, все ли верно у вас отрабатывает?
Изменено: bedvit - 16.03.2019 08:38:03
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: Пред. 1 2 3 След.
Наверх