Как стать автором
Обновить

Комментарии 24

Заголовок спойлера
image

Я тут Камасутру вижу.
Предлагаю сделать сенсоры, чувствительные к разным частям спектра, а лампочки разных цветов поставить на сами машинки, так чтобы машинка несла лампочки, к которым она нечувствительна.
Насчёт поставить лампы на машинки — я и сам об этом думал, однако необходимость расчитывать расстояния между всеми ними удручает мой компьютер. Когда я расчёт коллизий делал, то учитывал только машинки в некоторой небольшой окрестности, чтобы не считать расстояния до всех — и то симуляция подвисала. Для света такая оптимизация не получится, придётся считать расстояние до всех машинок с лампочками( Думаю, можно сделать пять-шесть таких таких без проблем, а вот всю сетку в 300-400 не получится.

Насчёт разных спектров — интересно, подумаю как реализовать.
В оптимизации большой объем для творчества. От экстенсивных методов типа cuda, до интенсивных вроде октодеревьев (как раз недавно кто-то писал на эту тему, там еще ссылка на симуляцию галактики с применением Barnes-Hut ).
Мне кажется, что можно попробовать просто переписать тот же код с шарпа на плюсы, и уже выйдет побыстрее. В конце концов, сложных расчётов вроде нет.
В том как я писал классовую структуру я ещё сделал задел под общение. Чтобы они сообщали друг другу базовую информацию вроде своего вектора движения, своего видимого уровня освещённости и своего типа. Тогда можно было бы играться с возможностью врать друг другу и раскрывать лжецов. Если добавить к этому хотя бы три разных спектра света и ношение лампочек на спине… Должно выйти очень много моделей поведения.
Что касается оптимизации то я подумал что свет — не гравитация. В конце концов, если будет не хватать скорости, я могу просто разместить их не в комнате, а в непрозрачном лабиринте, чтобы только часть источников всегда была видимой для каждого.
Для дальнодействующих сил используют многоуровневые сетки с разными масштабами, которые усредняют значение потенциала в ячейках. Таким образом, каждая частица непосредственно видит только своих ближайших соседей, чуть по-дальше смотрит в детальную усреднённую сетку, ещё чуть дальше — в более грубую сетку и так далее. Это позволяет значительно ускорить алгоритм за счёт чуть меньшей точности.

Ну и неплохо было бы распараллелить всё это дело на все ядра процессора.

PS: спасибо за интересную статью.
неплохо было бы распараллелить всё это дело на все ядра процессора

Плохая идея: в плане эффективности — овчинка выделки не стоит. :(
Лучше задействовать под это графический процессор — там как раз очень хорошо идёт подобное распараллеливание. :)

Конечно, на GPU — лучше. Но, туда порог вхождения несколько выше, чем на CPU. Да и GPU выше уже предложили.

Порог вхождения на GPU — да выше. Но, в данном случае преодоление порога на мультипроцессорный CPU — даст слишком незначительный эффект, чтобы этот порог стоило перешагивать. Потому что этих ботов — десятки, а на обычном несерверном CPU 2-4 ядра, в то время как GPU без проблем обработает десятки этих ботов. Так что либо перевести на GPU, либо оставить всё как есть. А в случае с многопроцессорным CPU — овчинка выделки не будет стоить.

Интересная идея. У меня аж фантазия разыгралась.
Что если сделать лампочки не только разных цветов, но и разной интенсивности, сделать не только разные чувствительности к свету, но и изменение своего света в зависимости от окружения («интроверты», которые в толпе тускнеют, и «тусовщики», которые в этом случае наоборот «зажигают», но при этом расходуют какой-то ресурс и гаснут со временем).
Супер. И главное в этом есть некая «игровая» логика. Там где персонажу хорошо — он светится. Где плохо — тускнеет.
Можно даже ввести отдельный параметр отвечающий за желаемое состояние. Тогда можно будет реализовать и вариант машинок которые сами себя делают несчастными, загоняя себя в условия где им хуже и они тускнее.
Интересный пост, и гифки залипательные.

Скринейсевер бы такой!

Плюсую за скринсейвер.
И всё оптимизировать на asm-е.
Под Spectrum
Как это делается? Скиньте мячик статью или инструкцию, будьте добры, и я постараюсь. Самому интересно залипать.
На первое апреля пару таких в CERN отправить.
Зачем все это нужно? Разве их поведение не становится очевидным исходя из законов, которые сам же и прописал? Ну даже если просто подумать небольшое время, все можно представить. Зачем все это делать и смотреть глазами: «а что получиться?»
Очевидно как одна машинка будет вести себя с одной лампочкой, так как в оригинале это описано.
Неочевидно:
-как ведёт себя система из многих машинок
-как ведёт себя машинка в присутствии многих ламп (к примеру 6-ая перестаёт бегать по кругу, когда ламп больше одной, и начинает разворачиваться в некоторых точках, в итоге рисует дуги. Этот разворот даёт только симуляция, в уме про такое не догадываешься)
-самое главное: как Выглядит это поведение — сложным, или нет. Если поставить себя на место исследователя «натуралиста», который наблюдает извне за системой автоматов, не зная о внутренней структуре — смогли бы мы выделить эти типы? Назвали ли бы мы такое поведение сложным? По описанию легко судить что всё просто, но только просмотр даёт понять — сложно это или нет. Для чистоты такого эксперимента можно даже убрать цветовую маркировку, сделать все неразличимыми внешне… А у вас в уме они всё равно останутся разными, такой уровень отстранённости от уже известной информации никак не получится, каким бы хорошим воображением вы не обладали.

Конкретно я перед симуляцией пытался подумать сам как оно будет себя вести. Я не предсказал разворот красных, сохранение несимметричного пика на долгой выдержке жёлтых, и ещё много других аспектов. Пытаешься угадать конечный результат через время — неизбежно приходишь к другим формам, потому как идут машинки с разных координат, а значит изначально не синхронизированы. Короче, всякого хватает.

И потом — я понимаю что компьютер это куда менее мощный графический процессор чем воображение, но воображаемыми картинками не так легко поделиться с другими)
Интересная тема, думаю неплохо подходит для эмуляции некоторых биологических процессов типа прорастания кровеносных сосудов и нервных волокон.

А не пробовали скрестить это с идеями «Жизни» Конвея, то есть чтобы определенное количество «машинок» могло создавать новую структуру — центр притяжения\отталкивания?
В идеале попробовать подобрать логику так, чтобы формировалась фрактальная структура (с самоподобием).
Можно сорец узреть?
Спасибо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории