Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Эксперимент





А что если данные об истории можно смоделировать? Нужна некая упрощенная модель мира, состоящего из множества взаимодействующих элементов. Мы будем фиксировать ход событий, затем отматывать его назад, вносить изменения в «мир», запускать симуляцию, и наблюдать новый сценарий. Останется только количественно оценивать разницу между этими двумя реальностями, и выдавать ее в виде графика. Тогда мы получим экспериментальную, а не теоретическую кривую затухания отклонений истории.

Осталось придумать алгоритм, который сгодился бы на роль «модели мира». Перебрав несколько вариантов, я остановился на алгоритме Конвея «Жизнь». Ранее о нем я почти ничего не слышал, поэтому засел за поиск – и с удивлением обнаружил на Хабре множество статей на эту тему. Осталось понять, как оценивать разницу между мирами. Мне хотелось построить решение на неком эволюционном принципе, поскольку история реального мира – это все-таки прогресс и совершенствование, а не устоявшийся режим «кипения клеток». Может быть, нечто вроде механизма генетического отбора, или чего-то подобного, что вводило бы в мир какие-то измеримые характеристики, позволяющие сравнивать разные варианты истории (например, «количество клеток 42-го уровня»). Поверх алгоритма Конвея оказалось довольно сложно что-то прикрутить. Он выбрал оптимальные параметры «Жизни», и мои попытки добавить свои правила в алгоритм делали мир неустойчивым. Спустя некоторое время я выбрал самое простое решение: использовать классический вариант алгоритма без всяких наворотов, и просто вычитать попиксельно один мир из другого (расстояние по Хэммингу) – это и будет степень расхождения истории.

Сказанное я воплотил в проект: https://github.com/TimeCoder/LifeTime

Там же можно скачать сбору под Windows:https://github.com/TimeCoder/LifeTime/raw/master/bin/lifetime.1.0.0.12.bin.win32.zip
А также под Linux (спасибо vershov):
lifetime.1.0.0.12.bin.linux.x86.tar.gz
lifetime.1.0.0.12.bin.linux.x64.tar.gz

Видео:


Перед запуском нашей машины времени, познакомимся с UI и кодом программы.

Рис. 10 — элементы управления
Интерфейс программы состоит из 4-х областей:

 

1. Мир – здесь отображается процесс развития жизни, после случайного заполнения клетки образуются и распадаются по алгоритму «Жизнь» Конвея. Края мира «сшиты» между собой.

2. Хронокарта – фактически здесь мы видим хронодрево, Мультиверсум, пространство вариантов – называйте как хотите. Изначально перед нами одна прямая – первичный поток времени, нулевая реальность (зеленая). Когда мы совершим перемещение в прошлое, над основным потоком образуется тоннель (синий), а новый сценарий развития событий будет представлен кривой (желтая).

3. Блок управления, где включается машина времени и запускается перемещение.

4. Область вывода различных данных о мире, путешественнике и перемещении.

 

Теперь рассмотрим порядок работы с машиной времени:

 

1. Сразу после запуска программы вы увидите кипящий океан жизни и бегущий счетчик времени. Подождите немного, и нажимайте кнопку «Begin».

2. Машина времени активирована, мир замер в ожидании. Что по логике должно произойти далее? В машину времени должен сесть путешественник. Кликайте мышью в области мира по клеткам, выбирая тем самым объект для перемещения. Выбор можно менять, или отменять вовсе, кликая на пустую область.

3. Когда объект выбран, автоматически разблокируется слайдер, находящийся над хронокартой. Тяните его влево, отматывая историю до нужного момента времени. Это еще не перемещение: мы только выбираем точку назначения.

4. Нажимайте «Leap» — вперед, в прошлое! Объект перенесется в выбранный вами момент времени, станет частью мира, и симуляция продолжится с этой точки. По графику будет видно отклонение нового сценария истории, а в том месте, где был объект, будет легкая его подсветка. Когда время дойдет до вершины петли (точки, откуда был сделан переход в прошлое) – программа встанет на паузу, на монитор выведется ряд данных.

 

В данной версии есть некоторые особенности:

 

· Только один полет в прошлое за один сеанс работы программы. Возможность множественных бранчей в программу заложена, но пока отключена, в том числе из-за нерешенной задачи «о трех ветках», см. ниже.

· Путешествий в будущее нет (не увидел в них смысла).

· Переключаться между потоками можно только после петли.

· После того, как вы начали двигать слайдер времени, выбрать другой объект для перемещений нельзя (нужно немного дописать код).

· На больших размерах мира программа тормозит (нужно оптимизировать).

· Рендер происходит с помощью OpenGL (вроде как нормальное решение).


Существуют и другие кандидаты на роль базового алгоритма, взамен «Жизни», например Tierra или Avida. Разработка проекта продолжается.

 

Задача о трех ветках


Проблема в том, что мы количественно оцениваем качественные величины. Итак, представьте 3 мира: основной поток времени, и два альтернативных. Что брать за систему отсчета при изображении отклонения истории? В случае 2-х веток все просто: первую нарисовали как прямую линию, вторую изображаем в виде кривой, показывающей степень отклонения от базовой реальности. Но теперь нам нужно изобразить третью кривую. Допустим, эта реальность отпочковалась от транка, и отличается от него настолько же (количественно), как и вторая – получается, что траектории второго и третьего потока совпадут – но в них происходят качественно разные события! Другой вариант: третья реальность отпочковалась от второй, и в ней ход истории быстро приходит к варианту транка (например, сначала изменили прошлое, возникла реальность 2, потом полетели в прошлое чтобы все вернуть как было – образовалась реальность 3, почти идентичная 1-й). Отклонение третьей реальности от второй такое же, как второй от первой. Задача заключается в том, чтобы придумать оптимальный метод рисования хронокарт с учетом подобных нюансов.





Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 335; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.