GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.1 (2)След. > >>   Поиск:  
 Автор Тема: Второй уровень - Сознание - Действия в команде
Vpolevoj
Сообщений: 1408
Второй уровень - Сознание - Действия в команде
Добавлено: 02 дек 13 2:42
Изменено: 16 дек 13 3:11
В теме Russian AI Cup Codetroopers был поднят вопрос о командных действиях юнитов (в частности, на поле боя), и возможность применения данной задачи для разработки и создания ИИ (этот вопрос поднимался в частности мною).

Этот конкурс (проводимый по тем правилам), на мой взгляд, не позволяет ни создать ИИ, ни даже приблизиться к его созданию. Хотя тема "командной игры", напротив, способна приблизить нас как к пониманию, что такое ИИ, так и к его созданию, поскольку в Интеллекте (прежде всего уровня Сознания) вопросы коммуникации между отдельными юнитами играют далеко не последнюю роль.

Поэтому я пересмотрел правила, которые предлагались для этого конкурса, и слегка переделал их под себя, с тем расчетом, чтобы упор делался именно на ИИ и на его применение.

Для начала я упростил игровой Мир (и сделал примерно так, как мне предлагал сделать Andrey для моего Робота). Я увеличил размер поля (сделал его 30х30, для сравнения: в конкурсе используется поле 20х30 для четырех команд одновременно), стенки теперь ставятся прямо на клеточку (сама клеточка теперь и есть стенка, что заметно упрощает и саму модель и расчеты в ней), юнитов-бойцов сделал "сферическими" (убрал физические размеры, например, рост (как в конкурсе) и "направление", теперь они смотрят сразу во всех направлениях, и ходить могут в любом направлении тоже без предварительных разворотов, также нет положений "стоит", "сидит", "лежит", поскольку боец - это "шарик").

Мир (игровое поле) у меня генерируется случайным образом, поэтому бойцы любой из команд НЕ ЗНАЮТ, какое оно, до тех пор, пока сами не увидят и не исследуют все его области. (Программу генерации нового игрового поля прилагаю к просмотру и оценке.) Предметы (сухпайки, гранаты, медпакеты) на карту выпадают тоже случайным образом, и для их обнаружения требуется также исследовать карту.

Полная ментальная карта всего отряда - МОДЕЛЬ ПРОСТРАНСТВА - складывается из индивидуальных КАРТ каждого бойца - из зоны их видимости.

Поэтому никакого "тумана войны" нет (считаю это понятие глупостью), а есть понятие исследовано/неисследовано, в зоне видимости/вне зоны видимости, и если какая-то область уже исследована, то достоверно/недостоверно (предположительно). Например, если в исследованной части поля боя была обнаружена стенка, то при выходе этой стенки из зоны видимости бойцов, её месторасположение не изменится, и поэтому факт наличия в этом месте стены можно считать достоверным. Но предположим, что нашими бойцами был обнаружен противник, но в свой ход он из нашей зоны видимости вышел (пропал). Означает ли это (выход его из нашей зоны видимости), что его больше нет (противник исчез), или что он находится совершенно в другом месте? Очевидно, что нет, просто факт его наличия именно в этом месте стал "недостоверным", и требует ПРОВЕРКИ. Тоже самое касается и бонусных предметов: допустим, бойцы обнаружили на карте медпакет, но поскольку все места в их инвентаре были заняты, то брать они его не стали. Когда они ушли из этой зоны, то этот медпакет остался лежать там, где и лежал. Означает ли это, что он попрежнему там лежит? Нет, не означает. Просто его там наличие стало фактом НЕДОСТОВЕРНЫМ, и прежде чем воспользоваться этим медпакетом, требуется убедиться в его фактическом наличии. И т.д.

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

Количество бойцов в отряде и их специализации оставил такие же, как и в конкурсе: Командир, Штурмовик, Медик, Разведчик, Снайпер. Но слегка изменил их характеристики.

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

Например, Командир имеет в своём распоряжении специальную "рацию" (или как вариант - код доступа) для связи с главным штабом, и именно эта рация дает ему возможность получать указания от штаба и вызывать "воздушную разведку". Еще в его распоряжении имеется "полевой бинокль", который увеличивает ему дальность обзора (а так у всех юнитов дальность обзора одинаковая). У Разведчика тоже есть такой же "бинокль", поэтому и у него тоже увеличенная дальность обзора. Кроме того, у Разведчика есть и маскировочное обмундирование ("Масхалат"), которое существенно снижает его видимость вражескими бойцами. У Снайпера есть спецоружие - "снайперская винтовка" с оптическим прицелом - именно она дает ему максимальную дальность стрельбы и большую убойную силу (правда, за счет большой стоимости самого выстрела в очках хода), но смени это оружие владельца, и вот уже он - снайпер. У Штурмовика надет "бронежилет", поэтому он от любого попадания в себя получает половинный урон. (У Медика ничего специального нет, хотя я и хотел снабдить его чем-то вроде медицинских справочников, но отказался от этой мысли, но об этом чуть дальше.)

То есть, я хочу сделать так, чтобы любой боец, теоретически, мог бы подобрать у любого другого убитого бойца эти спецпредметы и использовать их по назначению, тем самым частично (или полностью) меняя свою специализацию. Скажем, подобрав "бинокль", боец увеличивает себе дальность обзора, надев "бронежилет", он тем самым защищает себя, снижая получаемый урон и т.д. Таким образом, у бойцов появится интерес использовать оставшиеся от убитых предметы НАИЛУЧШИМ образом.

Для бонусных предметов у каждого бойца выделено по три слота (на каждый тип предмета по одному), поэтому теоретически каждый боец может нести одновременно по одной гранате, одному сухпайку и одному медпакету. В начале боя у Штурмовика уже есть граната, у Разведчика - сухпаек, а у Медика - медпакет. Остальное они должны найти и подобрать сами. Использование этих предметов требует затрат хода.

Но все же, дабы оставить хоть что-то аналогичное знаниям, индивидуальным способностям, полученным навыкам, опыту, и т.д. я ввел искусственное увеличение некоторых характеристик изначально, и которые нельзя получить только за счет предметов.

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

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

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

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

И наконец, Штурмовик. В Штурмовики обычно идут такие люди, у которых "здоровья много", а в башке одна дурь. Поэтому, мы надеваем на него "бронежилет", даем в руки гранату, вешаем на грудь автомат, и посылаем прямо в гущу боя. Чё тут думать - стрелять надо! Его индивидуальной характеристикой я сделал (нет, не повышенное здоровье, как в конкурсе, а - ) увеличенный запас хода (чуть позже поймете почему).

Итоговые характеристики получились такие (цифры в порядке следования: здоровье, запас хода, дальность обзора, дальность стрельбы, стоимость выстрела в очках хода, урон от попадания пули).

Командир - 100, 10, 8, 6, 3, 20
Штурмовик - 100, 12, 6, 8, 2, 25
Медик - 100, 10, 6, 4, 3, 10
Разведчик - 100, 10, 10, 5, 4, 15
Снайпер - 100, 10, 6, 10, 8, 50

Еще раз напоминаю, что характеристики связанные с нанесением повреждения зависят в основном не от самого бойца, а от того оружия, которое он имеет. Характеристики оружия приведу отдельно.

Основные изменения коснулись игровой механики.

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

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

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

Еще хотел бы сделать механизм "прерываний хода" (как в JA и JA2). Тогда тактика боя изменится радикально. Появится смысл расходовать запас хода не весь, а оставлять хотя бы часть для "прерываний". Появится смысл "прятаться", ожидать противника с вероятных направлений и т.д.

PS Почему я считаю такую систему более приспособленной для создания ИИ, я опишу чуть позже и подробнее.

Пока же принимаю вашу критику по уже описанному мною. Что стоит исправить, и на что обратить внимание?

PSS Характеристики оружия (цифры в порядке следования: дальность стрельбы, урон, стоимость выстрела, вероятность попадания/промаха, вероятность легкой раны, вероятность повышенного повреждения - крита).

Снайперская винтовка: 10, 50, 8, 80/20, 10, 50
Винторез (у разведчика): 5, 15, 4, 70/30, 20, 40
Узи (у командира): 6, 20, 3, 60/40, 30, 30
Автомат (у штурмовика): 8, 25, 2, 50/50, 40, 20
Пистолет (у медика): 4, 10, 3, 40/60, 50, 10
[Ответ][Цитата]
Toxygen
Сообщений: 521
На: Второй уровень - Сознание - Действия в команде
Добавлено: 02 дек 13 3:34
Изменено: 02 дек 13 3:36
А смысл? Моделирование среды обитания ИИ никак не поведает о том, как должен быть устроен носитель ИИ. Продолжали бы с лабиринтом работать. А то шило на мыло)
PS. Хотя если у вас цель именно моделировать среды для ИИ, а не сам ИИ - тогда пожалуйста. Но думаю этим лучше заниматься на каком-нибудь другом форуме, на вроде gamedev.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 02 дек 13 3:56
Изменено: 05 дек 13 2:09
Цитата:
Автор: Toxygen
А смысл?
Моделирование среды обитания ИИ никак не поведает о том, как должен быть устроен носитель ИИ. Продолжали бы с лабиринтом работать. А то шило на мыло)
PS. Хотя если у вас цель именно моделировать среды для ИИ, а не сам ИИ - тогда пожалуйста.

Смысл моделировать различные среды для ИИ в том же, почему для обучения математики, например, придумывают различные задачки (яблоки в карманах, птички на деревьях и т.д.). И это нужно не только для образности и наглядности, но прежде всего для того, чтобы ЛУЧШЕ вскрыть суть задаваемых задач.

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

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

Вот почему в одном случае я говорю "предположим, у вас в кармане пять яблок...", а в другом - "из одной трубы вливается...". Хотя, следуя вашей логике, зачем каждый раз сочинять новую задачу?

PS Однако, это же ваши слова (сказанные rrr3): "Зачем стремиться к привычному, когда нужно стремиться к состоянию "цель достигнута", а привычное это состояние или нет - не важно".

Вот, для того, чтобы наш ИИ (создаваемый нами ИИ), мог бы придти к состоянию "Цель достигнута", мы должны для него ПРАВИЛЬНО (то есть, просто и наглядно) СМОДЕЛИРОВАТЬ внешний (игровой) Мир.

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

Вот для чего я каждый раз придумываю и моделирую игровой мир заново. И вот почему я так тщательно и щепетильно отношусь к этому процессу. Потому что, в какой игровой мир вы поместите своего юнита, такие задачи у него и будут возникать. Такие "Цели" он и будет достигать.
[Ответ][Цитата]
Victor G. Tsaregorodtsev
Сообщений: 3187
На: Второй уровень - Сознание - Действия в команде
Добавлено: 02 дек 13 4:17
Цитата:
Автор: Vpolevoj
Снайперская винтовка: 10, 50, 8, 80/20, 10, 50
Винторез (у разведчика): 5, 15, 4, 70/30, 20, 40
Узи (у командира): 6, 20, 3, 60/40, 30, 30
Автомат (у штурмовика): 8, 25, 2, 50/50, 40, 20
Пистолет (у медика): 4, 10, 3, 40/60, 50, 10

Пять (ПЯТЬ!!!) калибров и, соответственно, 5 разных боеприпасов меньше чем на отделение...
Военные бы плакали горькими слезами.
Дело (и тело - такая откормленная на тучной ниве тушка) сферического коня в вакууме - живёт и здравствует!
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 03 дек 13 1:27
Изменено: 03 дек 13 1:38
Цитата:
Автор: Victor G. Tsaregorodtsev
Пять (ПЯТЬ!!!) калибров и, соответственно, 5 разных боеприпасов меньше чем на отделение...
Военные бы плакали горькими слезами.

Victor G. Tsaregorodtsev, вы хотя бы вникните в условия конкурса!
Там тоже нет одного "универсального оружия" - у них тоже все бойцы стреляют по-разному (причем, у них еще и урон и дальность стрельбы зависит от положения, в котором находится боец: стоя, сидя или лежа). Но никто на разницу в калибрах, как и на нехватку патронов, кстати, не жалуется. А почему?

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

Разные калибры?
Да не смешите меня!

Задача (текущая задача) заключается именно в том, как этому отряду осуществить ВЗАИМОДЕЙСТВИЕ друг с другом максимально эффективным образом. И для этого (именно для этого, а не для того, чтобы "военные плакали горькими слезами") их способности (прежде всего вести огонь и поражать противника) сделаны РАЗНЫМИ. Чтобы не было в отряде одного "универсального солдата", который "и жнец, и швец, и на дуде игрец".

Чтобы их взаимодействие было бы взаимодополняющим, чтобы от их согласованных действий возникал бы суммарный эффект (или как уже принято говорить на этом форуме - эмерджентность). Вот для чего вводятся ПЯТЬ бойцов и ПЯТЬ разных калибров (с различными боеприпасами).
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 03 дек 13 3:44
Забыл написать (в самом первом посте), что я помимо всех прочих изменений, которые мне предлагал сделать Andrey, сделал еще и постоянное знание всеми моими юнитами своего местоположения, типа, GPS (об этом меня тоже просил Andrey, а я отказывался).

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

Итак, все бойцы сразу знают свои координаты, но вот видят они только то, что видят. И это тоже принципиально. Не знать, где находится враг, но догадываться, предполагать - и уже исходя из этого предположения строить свои планы и готовить возможные действия - это ли не функция Интеллекта!
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 03 дек 13 22:50
Изменено: 03 дек 13 22:58
Начал просчитывать действия отдельного юнита на поле боя, и столкнулся с такой проблемой.



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

Вопрос составляют оставшиеся - "пограничные" - клетки, через которые проходит линия взгляда бойца, на границе препятствия - стенки. Как мне с ними быть?

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

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

Правда, этот путь может привести нас к еще большему усложнению обсчетов, так как появляется соблазн высчитывать точное значение перекрытия площади, и делать поправку на вероятность обнаружения и попадания пуль ТОЧНО. Но тогда, мне так кажется, возникнет ненужная громоздкость, которая игру не улучшит, а процессор нагружать будет (короче, смысла я в этом не вижу, толку от такой реалистичности никакого).

Но вопрос у меня остался: как в таком случае ПРОСТО обсчитать состояние видимости данной клетки относительно конкретного препятствия, с тем, чтобы отнести эту клетку к одной из трех категорий: "открытая", "закрытая", "половинная"?

У кого какие есть на этот счет соображения?
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 04 дек 13 23:41
Изменено: 05 дек 13 1:50
Продолжу свои рассуждения по поводу стенок и их влияния на видимость и вероятность попадания (вчера был очень сильно занят, да и время на обдумывание тоже нужно какое-никакое, тем более, что утро вечера мудренее). И вот что я к этому часу уже надумал.

Рассмотрим ситуацию поближе (более подробно).


Боец-0 (координаты Х0,У0), боец-1 (координаты Х1,У1) и стенка (координаты Xs,Ys).

Из рисунка видно, что когда боец-0 смотрит на бойца-1, то часть тела у того оказывается перекрытой стенкой. Соответственно, если боец-0 откроет огонь по бойцу-1, то часть пуль будет попадать в эту стенку, а это значит, что вероятность попасть по бойцу-1 будет пусть ненамного, но снижена. Чего не скажешь, кстати, про бойца-0, так как из этого же рисунка видно, что ситуация (как это ни странно) вовсе не симметричная, и для бойца-1 стенка нисколько не закрывает бойца-0 ни от взора, ни от обстрела (что говорит нам о том, что стоять рядом со стенкой все же выгодно).

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

Та часть этой хорды, которая оказывается ВНЕ стенки, - это видимая часть бойца (помечена у меня на рисунке красным), а та часть хорды, которая оказывается прикрытая стенкой - это "невидимая часть" (помечена у меня зеленым). Их соотношение и будет той искомой ВЕРОЯТНОСТЬЮ попадания/непопадания, которую мы ищем.

Всё хорошо?

Да. Если не считать, что и построение и тем более расчеты получаются очень громоздкими.

Что же делать?

А давайте поступим НЕПРАВИЛЬНО.

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

А получится у нас вот что:



О!!! А ситуация-то заметно упростилась.

Посмотрите на рисунок. Всю задачу теперь можно свести к подобию треугольников. И вычислить величины с и b теперь не составит никакого труда. И сделать это теперь можно очень просто и быстро.

Да, но что мы теряем от этого упрощения? Ведь так не бывает, чтобы мы совсем ничего не потеряли.

Ну, слегка исказится пропорция между с и b, но нам ведь не столь важны ТОЧНЫЕ КОНКРЕТНЫЕ ЗНАЧЕНИЯ этого соотношения, нам важно суметь быстро проверить, укладываются ли они в некие допустимые нами же установленные диапазоны, а точность этой оценки нас не очень-то и волнует. Так что, я считаю, что эта задача мною решена.
[Ответ][Цитата]
Toxygen
Сообщений: 521
На: Второй уровень - Сознание - Действия в команде
Добавлено: 05 дек 13 0:27
И опять вы все внимание уделяете интерьеру, среде обитания. Когда вы уже наконец-то приступите к созданию его обитателей? Причем полноценных, самостоятельно действующих, а не по строго заданному алгоритму, сформированный создателем?
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 11 дек 13 4:57
Занимаюсь расчетом зоны видимости одного бойца.
Вот, кому интересно, выкладываю предварительные результаты.

Зона обзора

На самом деле все гораздо сложнее, так как любая стенка создает "тень" и тем самым ограничивает видимость, но это затрудняет обсчет (но я этим сейчас как раз и занимаюсь).

То ли дело мой "слепой робот" - никаких проблем с "видимостью"! Ткнулся носом - уперся - значит, есть стенка, прошел свободно - значит, в этом месте стенки нет. Все понятно!
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 11 дек 13 23:55
Изменено: 12 дек 13 0:04
Цитата:
Автор: Victor G. Tsaregorodtsev
Дело (и тело - такая откормленная на тучной ниве тушка) сферического коня в вакууме - живёт и здравствует!

Напомню, что идея сделать бойцов "сферическими", была не моя:
Цитата:
Автор: Andrey
Vpolevoj
Предлагаю немного упростить модель.

Никаких "стеночек" не надо. Пусть каждая клетка может быть занята препятствием, или свободна. Робот пусть имеет возможность переместиться лишь в свободную клетку. Так вы значительно упростите функции определения состояния клетки (не нужно возиться с определением состояния стеночек). Если вам кажется, что это очень просто - нужно увеличить размерность "мира", сделать его 20x20, или больше, но сам алгоритм перемещения будет проще и понятнее.

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

Насчет "слепого" робота вы наоборот, упростили слишком. Не может робот, который только своим лбом проверяет стенки, определять, знакома ему клетка, или нет. Он просто не отличит одну похожую клетку от другой, если других органов чувств нет. Для упрощения предлагаю ввести в модель еще один орган чувств - функцию определения координат. Как робот это делает, по звездам, GPS, или как-то еще - не важно. Просто пусть будет функция, выдающая текущие координаты робота.

И я поначалу даже отказался от всех этих предложений.

Но для другой задачи, а именно - для задачи согласования действий бойцов В ОТРЯДЕ, предложенные упрощения оказались очень даже к месту. И я их принял и применил.

Но я хочу поговорить не об этом.

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

И для начала приведу выдержки из правил проведения конкурса.
Цитата:
Конкурс:

Клетка поля может иметь один из четырёх уровней высоты:
• Уровень 0: не содержит препятствие (free). Клетка проходима для юнитов и не предоставляет никакой защиты от выстрелов.
• Уровень 1: содержит низкое препятствие (low cover). Клетка данного, как и всех последующих, типов является непроходимой для юнитов и её можно использовать для защиты от выстрелов.
• Уровень 2: содержит препятствие средней высоты (medium cover).
• Уровень 3: содержит высокое препятствие (high cover).

Высота бойца определяется согласно его положению/стойке:
• Положение лёжа (prone). В этом положении высота бойца соответствует высоте низкого препятствия.
• Положение сидя (kneeling). Высота бойца соответствует высоте среднего препятствия.
• Положение стоя (standing). Высота бойца соответствует высоте высокого препятствия.

Как видим, у них введены препятствия различной высоты, которые по их замыслам должны соответствовать высоте бойца в различных положениях: стоя, сидя, лежа.

Я тоже поначалу захотел сделать нечто подобное в своей программе. Но я хотел высоту бойца в зависимости от его текущего положения и степень его укрытости за различными препятствиями связать также с его видимостью - дальностью его обнаружения. Потому что, и ежу понятно, что укрытого за препятствием бойца, особенно если он скрыт за ним почти полностью, обнаружить много труднее, чем его же, но на открытой местности. Вот этот момент я и захотел смоделировать.

Отчего зависит видимость/невидимость объекта? А так же дальность его обнаружения?

Прежде всего, конечно, от размеров этого объекта. Наш глаз так устроен, что мы видим объекты определенного размера, и не видим объекты меньше некоторого значения. Но видим мы или не видим зависит прежде всего от углового разрешения, которое, согласно современным данным, принимают за 1 угловую минуту (в некоторых случаях, согласно критерию Рэлея, оптическое разрешение человеческого глаза принимается за 25 угловых секунд, а это меньше одной сотой градуса).

То есть, если какой-либо объект занимает на нашей сетчатке пространство больше 1 угловой минуты, то это означает, что мы можем его увидеть - различить. А если меньше, то - соответственно - не можем. По-моему, это хороший критерий.

За эталон угла различения/видимости в игре можно взять любую величину (не обязательно именно 1 угловую минуту), пусть это будет 10 или даже 15 градусов - это не важно, но дальше следует отталкиваться от этой принятой величины, и все остальные зоны видимости/невидимости рассчитывать исходя из неё. Скажем, можно взять дальность обнаружения стоящего на открытой местности в полный рост бойца в 50 (или в 100) клеток. Рассчитать для этой ситуации УГОЛ обзора, и принять его за эталон.

После чего уже нетрудно высчитать дальность обнаружения сидящего бойца (это расстояние, на котором фигура сидящего бойца будет составлять тот же самый угол), лежащего бойца, бойца наполовину скрытого стеной, бойца, у которого над стеной торчит одна только голова и т.д. Все эти ситуации будут рассматриваться с точки зрения принятого нами эталона различения - угловой величины. Больше этого эталона угол - значит, мы этого бойца ВИДИМ, меньше - значит, НЕ ВИДИМ. Критерий, как мне кажется, вполне простой и понятный.

После того, как я пришел к этим (на мой взгляд, вполне очевидным) выводам, я взялся рассматривать собственно модели бойцов. Как они могут быть ВИДНЫ в зависимости от того, в каком из положений они находятся.

Напомню, что в конкурсе все бойцы могут занимать ТРИ положения: стоя, сидя, лежа. И соответственно, моделируются они клеточками (кубиками, а не сферами, как у меня) различной высоты: одна, две или три клеточки. Соответственно и стенки тоже моделируются так же: кубиками высотой одна, две или три клеточки. И получается, что стоящий за одноэтажным укрытием боец открыт на две трети, а за двухэтажным укрытием - всего на треть (за трехэтажным - укрыт полностью). А сидящий за одноэтажным укрытием - открыт наполовину! Правильно ли это?

Я набрал в строке поиска "Фигура человека", и выбрал из предложенных мне картинок наиболее подходящую схему. Попробовал разместить её на клетчатом поле в разных модификациях (как в конкурсе - на трех клетках в высоту, на восьми клетках, на десяти и т.д. - нужно понимать, что количество клеток, на которых располагается фигура человека - это условность, нам это нужно только для моделирования зон видимости). Ту, на которой я в конце-концов остановился, вам показываю:



Она удачно "вписалась" в поле 5х20. Причем из рисунка видно, что вся фигура очень хорошо делится на четыре части (не на три, заметьте). Кроме того, я решил к ней добавить еще и объем, и условно прибавил три клетки на толщину, и таким образом, вся фигура человека у меня вписывается в параллелограмм 3х5х20.

А дальше мне стало интересно, как можно использовать получившееся условное деление фигуры не на три, а на четыре части.

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

Тогда я взял, прямо на картинке набросал овалов - и у меня получилась модель фигуры человека. И я начал её модифицировать. Слегка сгорбил, пригнул голову, согнул колени, втянул живот - и вот у меня получилась фигура "пригнувшись". (Не скрою, я пытался втиснуть её в рамки 3/4 от полной высоты - и это у меня получилось.) Потом мне это дело понравилось, и я создал таким же образом фигуру "сидя",



фигуру "на карачках", и фигуру "лежа".



Дело в том, что "лежа" человек занимает по высоте много меньше места чем 1/4, поэтому мне пришлось ввести еще одно - промежуточное - положение - "на карачках". Итого у меня получилось целых ПЯТЬ возможных положений человека (а не три, как в конкурсе). Для каждого из них мне требовалось рассчитать свою "зону видимости" - дальность обнаружения, причем, в зависимости от степени укрытости бойца за тем или иным препятствием, которых у меня тоже получается не три, а четыре (или даже пять, если считать укрытия для лежащего бойца отдельно).

В-общем, сложность нарастала словно снежный ком (хотя, не скрою, мне это было интересно).

И тогда я понял, что пора с этим завязывать...

Я сказал сам себе ("Кого ты обманываешь, Сигизмунд?") - зачем тебе это всё? Пусть боец будет просто шарик, и - всё. Шарик размером с одну клеточку. И препятствия, если они есть, тоже будут высотой в одну клетку, и будут ПОЛНОСТЬЮ закрывать собой бойца, никаких "голов", "торса", которые бы могли высовываться у них из-за препятствия, и всего такого прочего, у шариков нет. Взгляд (точка взора) и активные действия (например, стрельба) у шариков осуществляется ИЗ ЦЕНТРА (и все расчеты тогда можно делать исходя из факта их центральной симметрии).

Да. Получился "Сферический конь в вакууме"!

Но зато, как упростились все расчеты!

И можно, следовательно, сосредоточиться на других, более важных для меня, задачах.
А к этой задаче - более объективного обсчета дальности видимости/обнаружения бойцов в зависимости от положения, которое они занимают, в том числе и от степени закрытости их различными препятствиями - я возможно еще когда-нибудь вернусь.

Вдруг пригодится. Интересно, все-таки.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 22 дек 13 4:39
Изменено: 23 дек 13 0:28
На днях закончил обсчет зон видимости для одного бойца:
Боец

Надо сказать, дело довольно муторное, сложное и трудоемкое, особенно отладка. Но складывающаяся картинка, на мой взгляд, получается красивая и почти завораживающая сама по себе, как калейдоскоп - смотрите.

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

Что я собираюсь делать дальше?

Я планирую поначалу устраивать спарринги: медик против медика, медик против штурмовика, медик против разведчика и т.д. - и так - каждый с каждым. Зачем я так хочу сделать?

Я думаю, что помимо стандартных, заложенных изначально программ поведения, которые можно сравнить с инстинктами, и которые обязательно придется написать и снабдить ими моих бойцов, я хочу дать им возможность накапливать собственный опыт, и так сказать, обучаться.

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

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

Таким образом у меня получится что-то вроде Подсознания: когда каждый боец будет обладать уникальным опытом ведения боя с конкретным типом противника.

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

А все остальное - собственно командная игра - это полностью ЛОГИКА, то есть, Сознание по моей классификации. Стандартная мотивация (минимум повреждений самому, максимум повреждений врагу), планирование действий, последовательная реализация этапов, оценка ситуации, мобилизация сил на конкретной цели и т.д. и т.п.

Все эти частности будут проясняться ближе к теме. Пока же мои задачи много проще и понятнее.
[Ответ][Цитата]
гость
78.25.120.*
На: Второй уровень - Сознание - Действия в команде
Добавлено: 22 дек 13 5:26
если сугубо конкретно. Cтрого агрессивный противник достаточно легко предсказуем, сопротивляющийся детерминированной агрессии тоже выработает только 'среднеумные'
стратегии (слабо вариативные и не особо прогнозирующие и планирующие). Cтруктура
ситуации не дает собственных, внутренних стимулов к возникновению гонки 'умов'.
Подсознание может быть структурировано (в результате процессов самоорганизации-
обучения) принципиально по-разному - как реактивная архитектура, как проактивная архитектура (с инициативой типа 'выскочил, стрельнул, cпрятался', тут проблема что
такие инициативы 'одноходовые', чего мудрить если противник 'прет и прет') и как
архитектура ОРИЕНТИРОВАННАЯ на рефлексивное управление. Если вдруг обученная реактивная и проактивная архитектура столкнется с недерминированным противником
(использующим комбинированную стратегию агрессии-осторожности, рефлексивные расчеты
(ожидают что я буду агрессивен в лоб, а я пойду в обход), нежадные алгоритмы подсчета
тактических выгод), то она испытает критические трудности, времени на доучивание может не хватить.

Это вопрос о том, какие упрощения (и представления) должны быть в критически минимальном ядре.

Очень недаром самюель обучал свою шашечную программу в игре против самой себя - как
бы автоматически строилась композиция возможных уточнений начальной неопределенной стратегии - если структурирование системы решающих функций одного из противников шло по линии поведения, воспринимаемому НАМИ как агрессивное, то программа-партнер АВТОМАТИЧЕСКИ настраивалась (обучалась) на парирование агрессии, если по ходу игры по неким скрытым эвристическим ориентирам стратегия противника менялась на более осторожную, то АВТОМАТИЧЕСКИ программа училась вести себя в контексте осторожного противника, - сначала по инерции как осторожная, потом переходя к более агрессивным действиям. Разумеется, розыгрыши столкновений агрессивных стратегий приволило к выявлению тех самых оринтиров, оправдывающих агрессию и делающих ее рискованной.

Грубо говоря, не нужно закладывать агрессивность в систему, лучше подумать как задать
такие условия, чтобы агрессивность возникла сама как 'эволюционно устойчивая' стратегия
(из теории ясно, что такая 'естественная' агрессивность НЕ БУДЕТ 'тупой', она всегда
будет иметь смешанный характер).


[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Второй уровень - Сознание - Действия в команде
Добавлено: 23 дек 13 0:22
Изменено: 23 дек 13 0:34
Цитата:
Автор: гость 78.25.120.*
если сугубо конкретно.
Cтрого агрессивный противник достаточно легко предсказуем, сопротивляющийся детерминированной агрессии тоже выработает только 'среднеумные'
стратегии (слабо вариативные и не особо прогнозирующие и планирующие).

Да, но с чего-то же нужно начинать обучение...

И пусть поначалу это будет легко предсказуемый строго агрессивный противник - почему нет.

Если бойцы научатся противостоять такому - агрессивному - противнику, то постепенно можно будет ситуацию усложнить, и подсовывать им более умного и более сложного противника. А пока, я так думаю, и с этим - "тупым" - противником еще не все ясно.

Поскольку агрессивный противник "тупой", то можно сказать, что он руководствуется инстинктами - жесткими изначально заложенными в него алгоритмами поведения, которые он изменить не в состоянии. Но что это должны быть за алгоритмы?

Первый такой алгоритм, на мой взгляд, это ПОИСКОВЫЙ алгоритм, или - поиск жертвы.

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

Можно, конечно, выбрать один из них - любой, запрограммировать и заложить в голову бойца, пусть пользуется. Но мы-то с вами понимаем, что ситуации на поле боя складываются разные, и в разных случаях могут оказаться полезными разные стратегии поиска. Но пока, пока обучение только начинается, достаточно будет, как мне кажется, одного алгоритма поиска, но такого, который бы, пусть и медленно, но гарантированно бы приводил к конечному результату: рыбка была бы поймана, и при этом не утекала бы между ячейками сети. Существует ли такой алгоритм?

Это первый мой вопрос.

И второй вопрос. Допустим наш "тупой" агрессивный воин нашел свою жертву, и она находится в зоне его видимости, что он теперь должен делать, как себя вести? Простой прямолинейный алгоритм подразумевает сближение - на как можно более близкое расстояние, и нанесение как можно более сильного повреждения своей жертве. Но в том-то и дело, что обе эти задачи одновременно не всегда решаются, и часто получается так, что либо сближение, либо нанесение повреждений. Либо нужен компромисс. То есть, опять минимакс. И я пока склонен сводить эту задачу к перебору всех возможных действий и выбору из них того варианта, при котором наносится большее количество именно повреждений, а не сближение и не собственная безопасность, причем рассчитывается не возможность нанесения повреждений в принципе, скажем в течении следующего хода, а конкретно на текущем ходе.

Таким образом, поведение "тупого" агрессивного бойца будет сводится к поиску жертвы, сближения с ней и нанесении ей максимально возможного за текущий ход повреждения - это и будет вся его стратегия. А задача "умного" бойца будет - научиться противостоять этой "тупой" агрессии. Уходить от прямой атаки, уклоняться, прятаться, наносить ответные удары, постепенно изматывая и повреждая агрессора, планомерно сводя его возможности атаковать к нулю. И если мой боец научится это делать - я сочту свою миссию на этом этапе выполненной.
[Ответ][Цитата]
Victor G. Tsaregorodtsev
Сообщений: 3187
На: Второй уровень - Сознание - Действия в команде
Добавлено: 23 дек 13 4:15
Цитата:
Автор: гость
Очень недаром самюель обучал свою шашечную программу в игре против самой себя

Какой такой самюэль?
Может, Дэвид Фогель со своим индусским аспирантом?
Либо дайте ссылочку или английские имена/названия статьи, чтобы мне поискать Вашего Самюэля.
[Ответ][Цитата]
 Стр.1 (2): [1]  2След. > >>