Angel71 писал(а):в том-то и дело, что софтово для обкатки именно модели вводить "сонар" вводить вообще незачем.
Не надо путать эмуляцию роя с эмуляцией агента.
- Код: Выделить всё • Развернуть
void update(boid[] bb)
Вот в чём "ошибка" (если говорить о эмуляции агента). Каждый агент легко и непринуждённо узнаёт координаты всех других агентов (и всё-всё-всё про других агентов). А это в корне неправильно. Неправильно именно в контексте эмуляции агента. Потому что здесь эмулируется рой в целом, а не отдельный агент.
Я, когда писал свою экспериментальную "игрушку", специально передавал одному юниту только массив координат тех агентов, которые находились в его поле зрения. Так я эмулировал "туман войны". И не ссылки передавал, и именно координаты. Т.е. один юнит не мог знать, что видят или думают другие юниты, какое решение они приняли, в каком режиме/состоянии они находятся, куда направляются. Юнит просто "видел" других юнитов (и то это было не совсем правильно, потому что ближайшие юниты не закрывали дальних своим телом).
Angel71 писал(а):вот эта милая моделька в почти 300 строк в случае портирования на железо легко и непринуждённо может разроститсь в несколько тысяч строк кода, если не вообще десятков тысяч. возьмём киллоботов, вы объём работ над эмуляцией физ. модели передвижения прикинули? меня совсем не штырит модели такой сложности прописывать.
Эту модель нельзя напрямую портировать на железных агентов, радиус датчиков и радиус связи которых не позволит мгновенно вычислить координаты всех агентов роя, и сделать их известными каждому агенту.
Это "плохой" эмулятор роя агентов. Просто потому что он изначально не писался как эмулятор железа. Не знаю как толково объяснить.
Настоящий эмулятор должен прежде всего среду обитания агентов эмулировать. И предоставлять каждому агенту лишь малую часть информации об этой среде - в пределах его органов чувств, ровно столько, сколько пролезет через датчики агента. Да, это сложнее, чем 300 строчек. Может быть это 3000 строчек. Но это легче, чем 30000 строчек плюс железо.
В архиве килобота десятки *hex, *.dll, *exe файлов. Вот это точно тысячи строк кода. При этом многие строчки этого кода жёстко связаны с железом. У них совсем другая цена, трудоёмкость. Это долгие человек-дни отладки, причём отладки на железе, а не на эмуляторе. Это неудобно, это элементарно МЕДЛЕННО, долго и нудно. Я тут немного понаезжал на железячников, но я прекрасно понимаю, насколько труднее пишется их код, как они стиснуты разнообразными ограничениями.
Софтовые эмуляции тем и привлекательны, что они эмулируют не только железо, но и код для этого железа. При этом софтовая эмуляция может быть 3000 строк, и заменять собой 300 строк кода для микроконтроллера. Но оно того стоит - у этих строк разная цена. А код логики вообще может занимать 30 строчек. Но за этими строчками - годы работы поколений гениальных математиков. И может быть даже биологов, которые открыли то, над чем природа сотни миллионов лет работала. Вот такая цена у этих строчек.
Добавлено спустя 26 минут 50 секунд:Насколько я понял, здесь тоже физических ограничений на общение между плёлами нет и быть не может - танцем пчела может передать что угодно, когда угодно, и сколько угодно.
Чтобы эмулировать язык взаимодействия, нужен некий физический барьер.
Вообще язык - это средство преодоление каких-то физических барьеров. Иначе бы мы просто мысли передавали, без потерь на время и расстояние, без барьеров взаимопонимания.
Собственно, тут пчёлы так и общаются, в этой курсовой (там тоже любой пчеле любая матрица доступна). И биоды на ролике, которых акула преследует. Все они просто мгновенно узнают все мысли и физические параметры друг друга.
Кстати, потому и время работы алгоритма неудержимо растёт. В жизни так не бывает - не может за танцем каждой пчелы наблюдать весь улей. Этот танец видит только несколько соседей одной танцующей пчелы. Поэтому весь улей "не зависнет" в бесконечных вычислениях оптимального облёта поля, каким бы большим оно не было
Добавлено спустя 3 минуты 46 секунд:Поэтому, ещё раз - "дальномер" эмулировать программно надо обязательно. Можно косвенно, через уменьшение чувствительности какого-нибудь датчика, через ухудшение качества связи. Уж совершенно точно через ухудшение видимости. Вплоть до полной невидимости за пределами некоего радиуса. Если этого не делать, ни о каком переносе на железо и речи быть не может. Или это какое-то слишком идеальное железо, или все софтовые наработки на эмуляторе придётся выкинуть и переделать.