Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Искусственный интеллект в пошаговой стратегии, Разработка ИИ пошаговой стратегии 
V
    Опции темы
MMA
Дата 2.1.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Люди, кто знает как организовать ИИ(искусственный игтеллект) в пошаговой стратегии. Написал игру для телефона, осталось только дописать рабочих и строительство. Солдаты ходят и воюют(пока только игрока, разумеется), наносят ущерб зданиям и врагам.

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

1) Готовимся к военным действиям: развиваем оружие и прочее что поможет в атаке и обороне.
2) Перед тем как решать военные вопросы, решаем, может докупить ещё
солдат.
3) Воюем...
4) Рабочие разгребают свои дела: ремонт и ресурсы, а также бегство если надо и строительство.

Более ничего в моей игре не используется(типа невоенного улучшения или ещё что).

Думаю с первым и вторым пунктом проблем не возникнет, как и с четвёртым. Нужно решить третий пункт.

Вот мои мысли по этому поводу:
1) Надо создать двойной массив целых чисел равный массиву местности,
проще говоря, если карта 10 на 10 то и массив 10 на 10, для каждого
игрока. Заполнять его нужно так: от каждого солдата вносятся числа - сколько ущерба он может нанести в каждую ячейку.
Например, есть солдат: 3 хода на удар, повреждение 2, всего ходов 7. Около себя, на 2 ячейки вокруг, он может ударить 2 раза(4 единицы ущерба), дальность от 3 до 4 ячеек - 2 еденицы ущерба. Если два солдата могут ударить в одну точку, их ущерб скадывается.

2) Из таких массивов видно(они, как уже сказано, для солдат каждого игрока заполняются отдельно): какие свои объекты под атакой и насколько это серьёзно, то же самое для своих содат: какой ущерб они могут нанести окружающим врагам и вражеским строениям, а какой им самим.
Теперь можно предпринимать какие-то действия.

Пока это мои собственные догадки, не реалезованные на практике.
Может кто знает как по иному описать действия ИИ? Хотелось бы знать побольше способов чтобы выбрать наиболее подходящий.
В интернете найти что-либо очень сложно, я нашёл только общие наброски ИИ для стратегий в реальном времени.

А если не трудно, мыльте мне свои мысли сюда: [email protected]

Это сообщение отредактировал(а) mr.DUDA - 2.1.2006, 19:32
PM MAIL   Вверх
Guedda
Дата 4.1.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: 78



Да. Ты прав. Необходимо реализовать массив.
ИИ будет на каждом шагу просматривать ячейки массива. Будет определять, сколько шагов осталось до противника. Если оптимально для боя, то стрелять.
Допустим (не знаю, про что пишешь, но вобщем так), у ИИ есть танк в ячейке 0 по вертикали.
Танк может нанести удар в 100 пунктов, когда противник будет на ячейке 1, 80 пунктов на ячейке 2, 60 пунктов на ячейке 3, 40 пунктов на ячейке 4, 20 пунктов на ячейке 5. В остальных случаях танк ничего не сможет сделать.
Данные о повреждениях хранить в десятичном сегменте таким образом: 3050040, где 30 - ID юнита (в данном случае - танк), 050 - количество пунктов жизни (доступно 50 пунктов), 040 - количество боевых единиц (типа боезапасов в танке).
Вот от этого и отрывайся.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Санчес_
Дата 10.1.2006, 01:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Поищи в Инете ссылки на тему "альфа-бета алгоритм". Используется в шахматных программах, а шахматы - фактически та же походовая стратегия...
  Вверх
Empirik
Дата 10.1.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



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

Это сообщение отредактировал(а) mr.DUDA - 10.1.2006, 16:21
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 10.1.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 7
Всего: 232



(редактировал только грамматические ошибки)


--------------------
user posted image
PM MAIL WWW   Вверх
Guedda
Дата 10.1.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: 78



Я про то же и говорю.
А вообще, если хочешь все нормально понять, тогда тебе на gamedev нужно пойти smile


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Empirik
Дата 11.1.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



Цитата(Guedda @ 10.1.2006, 16:55)
Я про то же и говорю.
А вообще, если хочешь все нормально понять, тогда тебе на gamedev нужно пойти smile

Пожалуйста дай линку, где на gamedev.ru написанно нормально по искусственному интелекту хоть что-то читабельное. Я видимо слепой был не нашел.
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
MMA
Дата 11.1.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Цитата(Empirik @ 10.1.2006, 09:29)
Одного я не понимаю, почему все пытаются мыслить такими абстрактными понятиями как "воюем", "собираем ресурсы". Ведь для компа (кому не нравится, то пусть читают программы) нет понятия ресурсы, то есть юнит компа этого даже не знает.

Такая абстракция из-за того, что юнит не один объект компа на карте, который долбит кучу врагов или собирает ресурсы. Он должен проводить атаку или другие действия согласовано с другими объектами своего игрока.
Поэтому юниты не могут действовать как полностью самостоятельные единицы.
PM MAIL   Вверх
Empirik
Дата 11.1.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



Цитата(MMA @ 11.1.2006, 16:26)
Цитата(Empirik @ 10.1.2006,  09:29)
Одного я не понимаю, почему все пытаются мыслить такими абстрактными понятиями как "воюем", "собираем ресурсы". Ведь для компа (кому не нравится, то пусть читают программы) нет понятия ресурсы, то есть юнит компа этого даже не знает.

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

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

Это сообщение отредактировал(а) Empirik - 11.1.2006, 20:59
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
MMA
Дата 13.1.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Empirik, все гораздо сложнее.
Естественно у объекта есть методы атаки и ремонта, но решения о том что их пора применять принимают не сами эти методы. Есть какай-то глобальныйметод, который оценивает положение всех объектов, а также их положение своих объектов в тех местах, в которых они могут оказаться и то что они могут сделать. Оценки каждого действия выражаются каким-то числом. У каждого объекта выбирается действие с максимальной оценкой, после чего выбирается максимальная оценка из всех максимальных действий объектов(например, если носильщик принеёт 20 золота на скллад - это хорошо на 20 очков, а если копейщик не может ничего сделать - 0 очков(стоять на месте), если лучник палнёт по врагу - это хорошо на 35 очков. Развить технологию - 10 очков. Максимальноа оценка - 35 очков, это действие выполняется). После каждого действия цикл повторяется, пока у всех объектов не кончаться ходы, или пока все комбинации ходов только ухудшат положение компьютера.
Как видно, объектам не обязательно знать что для них хорошо, за все объекты отвечает один глобальный метод. Методы атаки, передвижения тоже глобальны. Все объекты имеют один тип(это так конкретно у меня), метод оценивающий ходы знает исходя из данных об объекте что он может делать. Например, если повреждение, наносимое объектом, равно нулю, то объект должен стремиться уходить из под зоны атаки противником.
Видно, что тут нет необходимости того о чём я думал раньше. А именно что делать сперва: собирать ресурсы, воевать и т.д.
PM MAIL   Вверх
Empirik
Дата 14.1.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



Цитата(MMA @ 13.1.2006, 16:13)
Empirik, все гораздо сложнее.
Естественно у объекта есть методы атаки и ремонта, но решения о том что их пора применять принимают не сами эти методы. Есть какай-то глобальныйметод, который оценивает положение всех объектов, а также их положение своих объектов в тех местах, в которых они могут оказаться и то что они могут сделать. Оценки каждого действия выражаются каким-то числом. У каждого объекта выбирается действие с максимальной оценкой, после чего выбирается максимальная оценка из всех максимальных действий объектов(например, если носильщик принеёт 20 золота на скллад - это хорошо на 20 очков, а если копейщик не может ничего сделать - 0 очков(стоять на месте), если лучник палнёт по врагу - это хорошо на 35 очков. Развить технологию - 10 очков. Максимальноа оценка - 35 очков, это действие выполняется). После каждого действия цикл повторяется, пока у всех объектов не кончаться ходы, или пока все комбинации ходов только ухудшат положение компьютера.
Как видно, объектам не обязательно знать что для них хорошо, за все объекты отвечает один глобальный метод. Методы атаки, передвижения тоже глобальны. Все объекты имеют один тип(это так конкретно у меня), метод оценивающий ходы знает исходя из данных об объекте что он может делать. Например, если повреждение, наносимое объектом, равно нулю, то объект должен стремиться уходить из под зоны атаки противником.
Видно, что тут нет необходимости того о чём я думал раньше. А именно что делать сперва: собирать ресурсы, воевать и т.д.

Приношу свои извинения за не корректную формулировку своих слов. Я под словами хорошо и плохо подразумевал понятия true или false. Можно сказать по другому, под словом хорошо, понимается оптимальное значения критерия поведения в данной ситуации, под словом плохо все остальное. Как, я понял у вас входными параметрами для критерия действия/бездействия юнита выступают следующие величины: окружение юнита, внутреннее его состояние, тип юнита. Каждое действие имеет свою ценовую оценку для заданной обстановки и заданного юнита. И юнит выполняет действие с наивысшей оценкой, если это сказать моими словами, то юнит выполняет то что для него является оптимальным(самым хорошим) в данной ситуации. Еще раз прошу меня извинить за не точность формулировок. Но мы с вами говорим уже одно и то же. Просто вы это называете понятиями отличными от моих
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
MMA
Дата 19.1.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Процесс разработки AI теперь пошёл у меня вполне удачно.
Вот решил поделиться опытом.
Оказывается не нужно оценивать всевозможные действия каждого объекта.
Нужно разделить всё управление объектами на несколько задач, например: атака, поход или подготовка в атаку, оборона поселения(нужно как минимум 3 военных задачи сразу), сбор ресурсов(она же создаёт носильщиков, рабочих и т.д.), развитие поселения и т.п. в зависимости от конкретной игры.
Каждая задача будет оценивать игру только со специфическим для неё взглядом и выполнять только свои действия, а так же задавать действия другим задачам. Например, если на нас напали, задача атаки должна оценить положение и если нужно она сама создаст новых воинов, найдя ближайшее к стычке создающее строение(с учётом важности территории на которую напали и других заданных для создания объектов). Если мы собираемся в атаку, нам не так срочно нужены солдаты, и все запросы задачи "поход или подготовка в атаку" передаются задаче "развитие поселения", которая может построить солдат сразу, а может при недостатке ресурсов(ресурсов просто не хватает или они нужны на более важные мероприятия) или жил.площади, отложить создание войнов. Задачи должны следить за тем что они запрашивают на стройку, возможно нужный объект уже есть в очереди и два таких объекта не нужно, тогда выбираем объект с самым высоким приоритетом из заданных, и если новый приоритет выше этого, задаём новый.
Все задачи, кроме "атака" ищут ближайшую точку к уже известной цели, они знают что нужно делать и не тратят время на оценку каких-то посторонних действий. "Атака" же работает только во время драки, она более сложная в плане перемещения объектов, так как объекты могут не только перемещаться для возможности атаки, отступления или ухода из под огня, но и выбирать наиболее выгодное положение для атаки/обороны как одного отдельно взятого объекта, так и нескольких сразу, при этом положение какого-то отдельно взятог объекта может быть хуже некуда, но из-за этого шансы на победу возрастают, т.к. он, например, может отвести часть огня на себя, прикрыв тем самым более слабых/раненых солдат.
Как видно теперь процесс "мышления" направляется в нужную сторону, AI управляет объектами более связанно друг с другом, а значит более эффективно. Тут становиться возможным нападение сразу на несколько игроков, захват новых территорий, и невозможное при управлении каждым объектом в отдельности, отсупление.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.