Pull to refresh

Comments 91

прекрасно под вайном работает
у меня под вайном машинки просто лежат и все :(
Забыл написать. Пробел включает/выключает паузу. Хотя, если лежат, значит упали, а значит пауза была выключена.
В любом случае, в ближайшее время соберу нативную версию.
с пробелом заработало =) =)
О, спасибо, так гораздо лучше. Стоит добавить эту магическую клавишу в статью. Сидел минуты две ждал — думал что какая-то медленная эволюция.
Сделайте, пожалуйста, изменение размера экрана, а то в мой рабочий 1600*900 ничего не вместилось
Да, тут я не подумал как-то. Сегодня вечером сделаю.
Залил новую версию. В папке res теперь есть файл настроек settings.txt. В нем можно настроить размеры окна.
Меня во всех этих «симуляторах» смущает то, что машинки не тратят ресурсы на мутации, то есть, «выращивание» двух колес ничем не отличается от «выращивания» восьми, а «выращивание» маленького колеса — от «выращивания» большого. В реальном мире это не так — чем больше организм, чем больше (качественно или количественно) у него те или иные приспособления, тем больше ресурсов ему нужно затратить на развитие всего этого безобразия (у того же Докинза в «Эгоистичном гене» это очень хорошо описано).

В качестве костыля можно было бы добавить машинкам некоторое «топливо», часть которого расходуется на мутации, а часть — во время езды. Или придумать какую-то другую систему ресурсов.
В результате появится StarCraft 4.5, в котором юниты обзаводятся необходимыми «приспособлениями» для выживания.
Игроки будут смотреть за эволюцией своих юнитов в single режиме и выставлять лучшие популяции в мультиплеер ))
Зато наконец прекратятся споры про баланс!
Мысль интересная. Правда, большой корпус не обязательно дает машинке преимущество, скорее наоборот. То есть, если тратить ресурсы именно на рост, это еще более подстегнет тенденцию к уменьшению размеров.
Я из этой оперы думал о том, что, например, максимальный крутящий момент на колесах может зависеть от размера корпуса, например. Так станет не выгодно прятать тоненький корпус между колес.
Или сделать функцию приспособленности зависимой также от времени, которое взяло у машинки добраться до финальной точки. Этим можно сэмулировать то, что она успевает съесть больше травы по дороге за меньшее время, чем ее менее расторопные товарищи.
Так у машинок же нет цели жрать друг друга, так что уменьшение размеров действительно логично.

С другой стороны, корпус можно как раз рассматривать как топливный бак, и давать машинке ограниченую «энергию».
UFO just landed and posted this here
И это тоже, конечно, хотя сильно зависит от карты. На некоторых наоборот — большая машинка (особенно пузатая) рискует встать там, где мелкая проедет.
UFO just landed and posted this here
А можно как-нибудь окошко поменьше сделать, а то оно у меня больше рабочего стола и только minimize доступен ?
А можете скомпилировать для winxp sp3 (32bit)?
А то пишет, что не является приложением Win32
Попробуйте заменить экзешник на вот этот. Скомпилирован с тулсетом 2012 для Windows XP.
всё равно не работает
По ссылке поменялся файл. Извините, забыл и переписал.
Вот тот, который предназначался вам: файл.
При запуске:

«Assertion failed!

Program: C:\Games\Box2D\Engine.dll
File: auxFuncs.cpp
Line: 39

Expression: err == 0»

Если нажать «пропустить», то вроде работает, но шрифт, видимо, не прогрузился. Надписи отсутствуют
Это значит, что OpenGL какую-то ошибку выдал. А что в файлах error.log и info.log?
По хорошему надо бы и dll пересобрать с этим тулсетом, раз уж экзешнику помогло. Но это смогу только вечером дома.
info.log:
Tue Jul 09 12:54:00 2013 Application started. Hello, World!
Tue Jul 09 12:54:00 2013 Application version: 0.0.6.365 Release
Tue Jul 09 12:54:00 2013 Starting renderer initialization
Tue Jul 09 12:54:00 2013 SDL successfully initialized
Tue Jul 09 12:54:00 2013 Video mode set
Tue Jul 09 12:54:00 2013 OpenGL version: 1.5.0 — Build 6.14.10.4847
Tue Jul 09 12:54:00 2013 Loading textures…
Tue Jul 09 12:54:00 2013 Successfully loaded res/font2.png
Tue Jul 09 12:54:00 2013 Successfully loaded res/gui.png
Tue Jul 09 12:54:00 2013 Finished loading textures.
Tue Jul 09 12:54:00 2013 Initialization successfully completed
Tue Jul 09 12:54:00 2013 Switching to menu
error.log:
Tue Jul 09 12:54:00 2013 OpenGL error during main loop. Something bad happened OpenGL error: 1281
Где-то случилось GL_INVALID_VALUE.
OpenGL version: 1.5.0 — с этим может быть проблема. Попробуйте обновить драйвера видеокарты.
Эволюция остановилась на вот такой загогулине:


Минут 15 быстрые теряют там колёса, медленные просто застряют. Главное — все умирают на одной и той же дистанции, поэтому эволюция по сути практически остановилась.
Хабракат не сработал.
Всегда может произойти мутация, или несколько, которые помогут преодолеть загуголину. Рано или поздно на любой трассе появляется участок, непроходимый в принципе, но эта загогулина так не выглядит. Стоит подождать еще несколько раз по 15 минут :)
Какой seed вы использовали и на какой дистанции это произошло?
Нашлись уже смельчаки :) Seed не скажу (кстати — стоило бы выводить его и в режиме воспроизведения). Просто добил случайными символами после habrahabr, а остановить боюсь — все ведь заново придется начинать?
Дистанция — 420.
Кстати, хотел спросить — а надежность фиксации колес — это ген? Если нет, то стоило бы — очень продвинуло бы симулятор в плане достоверности.
Да, придется начинать заново.
Надежность фиксации — хардкод. Можно сделать и ген для нее, но тогда, я думаю, рано или поздно (скорее, рано) у всех он упрется в максимум, тут однозначно, чем крепче — тем лучше.
Можно связать его с мягкостью подвески.
Мне кажется, что при ограниченной «вселенной» эволюция рано или поздной войдет в тупик, вопрос только во времени.
Генная инженерия любой тупик преодолеет.
У машинок вырастут крылья, чтобы они могли «преодолеть» обрыв трассы?
Нет, у них появятся мозги, и они будут с нескрываемым презрением обсуждать своих создателей.
Похоже на апокалипсис в масштабе машинок.
Нужно ввести вирусы и горизонтальный дрейф генов.
При маленькой популяции (50/5) почему-то быстро вырвались вперёд вот такие «трёхколёсные» мобильчики:

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

(Моя популяция застряла на 830.69 :)
По-моему, тут вовсе не пары играют роль, а группы сегментов сильно большего размера. Потому что, например, у меня машинки в одном месте на три почти отвесных сегмента после равнинки взбираются без проблем, а в другом, где перед этим небольшая горка из двух сегментов, застряли на весьма продолжительное время.
Да, еще влияет скорость. А скорость зависит от того, как были пройдены предыдущие участки, так что я не прав.
Да, вектор скорости и пара сегментов, так будет точнее (не заметил, действует ли ещё момент инерции на машинку).

БТВ. Удалось вывести популяцию одноколёсных, которые на 730 едут :)
Думаю, что когда происходит застревание на одном сегменте — эволюция тормозится, пока одна из мутаций не позволит преодолеть барьер.
Если же барьер сильно сложней предыдущих участков, машинки так его могут и не преодолеть, потому что единичные улучшения недостаточны, и не фиксируются.
Я тоже так думал: у меня эволюция застряла на одной очень глубокой яме из двух сегментов, откуда машинки не могли выбраться без изменения ни размера, ни поведения на протяжении сегментов 15. Но через полчаса глянул, а они уже спокойно адаптировались (причём это при высокой приемственности в 50).
Только у меня после запуска ничего не происходит? Вижу розовый восьмигранник и скачущие цифры FPS. И все.
Спасибо, все заработало!
вечерело. а машинки всё падали и падали ©
Эти красавцы развились за час, на который я забыл о запущенной программе.
Отметка 1100, преграды преодолевают почти вертикально стоя на заднем маленьком колесе.
скрин



Быть может сделать режим в котором наследник рождается не на старте, а где-нибудь по пути (в зависимости от положения родителей).
Это, по идее, должно дать повышенную приспособленность к локальным условиям рельефа. Если при этом рельеф не «линейно повышает сложность вплоть до сумасшедших непроходимых колесами гор», а как-то чередуется, то на выходе будет интересная динамика смены приоритетов.
Интересная идея. Набросал прототипчик (посмотреть можно заменив экзешник на этот). Потомок рождается на месте отстающего родителя.
Популяция довольно быстро мигрирует вперед и особи рождаются приспособленными к новому месту рождения.
В некоторых местах это изменение позволило использовать новый способ преодоления препятствий — постепенно точка рождения потомка перемещалась по полю дальше. Не знаю, как объяснить, вот картинка:
Скрытый текст
Да, есть такая беда в этом случае. Точка рождения — немного выше, чем родитель, так что при сильном уклоне машинка может появиться наполовину в трассе. А если брать еще выше, то они все колеса пообломают при приземлении.
Мне больше понравился режим «катящейся безколесной кучи»
Стоило наверное рождать на месте кончины «аутсайдера». Т.о. «куча» не будет перемещаться «телепортами», а только своими силами.
Попробовал сейчас два варианта: рожать новых на месте, где умер самый неуспешный и на минимуме из текущих рекордов.
В первом случае всегда найдется уникум, который откатился чуть назад и помер, и вся популяция потихоньку двигается назад, пока не начинает рождаться как заведено в Спарте, прямо над пропастью.
Во втором вся популяция потихоньку движется вперед, потому что минимальный рекорд новой особи будет ее местом рождения, то есть не меньше, чем раньше. А может так случиться, что все, хоть понемногу, да прокатятся вперед.
Натолкнуло на мысль, было бы здорово иметь возможность автоматически сохранять gif с историей мутаций лидеров.
Каждая машинка берет свои гены от двух родителей, так что наглядно изобразить историю эволюции одной особи вряд ли получится.
Можно использовать лидеров — они всегда единственны.
Интересно, а трехмерную версию реально создать?
Box2D — двухмерный физический движок. Если написать свой трехмерный, то реально :)
Думаю, стоит написать в автоваз, иногда кажется, что они создают автомобили именно таким алгоритмом
Маловероятно.
За 50 лет эволюции родилось бы что-нибудь хорошее.
Ввести «поведение» машинок, диктуемое так же генами. Например, снизить скорость на крутом уступе и так далее.
По мне, так это очень интересный пункт. Наблюдая за машинками из прошлой статьи я обратил внимание, что есть препятствия, которые преодолевают чуть более чем 0% машинок. Если позволить машинкам ускоряться и замедляться и заложить это в гены, то можно выводить популяции, адаптированные под конкретную трассу. Очень грустно наблюдать, как превосходная по дизайну машина валится на какой-нибудь яме, которая в принципе (при разгоне-торможении) может быть пройдена, но из-за неудачного соотношения с размером машинки, оказывается непреодолимой.

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

А у меня за ночь народ прошел очень подлую яму на 640, на которой постоянно отваливались колёса, но уперся в 777.57

Вот думаю останавливать или нет — вдруг родится кто-нибудь с парой дополнительных колес и выберется отсюда.
Предлагаю динамически красить трассу. Например окрашивать красным плиты в зависимости от процента погибшего на них народа. Еще можно красить по «посещаемости» — красить плиты в зависимости от процента доехавших машинок.
Было бы очень наглядно.
У коллеги эволюция пошла по неожиданному пути :)
А мне больше летучих мышей напомнили.
В новой версии трасса гораздо толще, и гораздо меньше вероятность, что машинка родится не над трассой, так что такого быть больше не должно.
Уменьшите масштаб колесом мыши.
висит в таком состоянии и ничего не происходит:
screenshot



Вентилятор видеокарты при этом бешено работает. W8 x64.
Возможно симуляция на паузе. Для снятия паузы — нажать «пробел».
Странно, вертикальная синхронизация должна быть включена, такой fps быть не должен с ней. Возможно, особенности драйвера под W8.
Насчет ничего не происходит, совет выше с пробелом помог? Пожалуй, стоит добавить виджет для скорости симуляции, чтобы было наглядно.
Про fps, на W8 при запуске с интегрированной видеокартой fps 400-600, с нвидией — 60
Да, симуляция, почему-то, на паузе при запуске и кнопка Follow the leader отжата, а камера выше трассы в этот момент находится. Всё теперь работает нормально.
Упало с такими параметрами:
image
Как конкретно упало?
Строку seed не разглядеть. Но слишком большие максимальная длинна ребра, скорость и крутящий момент.
Машинки будут рождаться наполовину в трассе и улетать с космической скоростью из-за огромных скоростей колес.
Да, на параметрах нет защиты от излишне изобретательного пользователя :)
Я смотрю, у вас в конце очень даже приличные экземпляры начали ездить)
«Шах и мат, креационисты!».
А в виде нормального текста нет?
Sign up to leave a comment.

Articles