Игровой ИИ
| |
Saitei | Дата: Воскресенье, 23 Февраля 2014, 23:01 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Как написать? Просто я самые примитивные писал... Хочется писать посерьезнее, чтобы прослеживалась "разумность" ботов. Что почитать? Как быть?
|
|
| |
Zuduka21 | Дата: Понедельник, 24 Февраля 2014, 01:32 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Искуственного интелекта не бывает,его еще не изобрели.Ты можеш указать боту траекторию либо в каких пределах,с какой скоростью и в каком направлении он будет двигатся.Можеш даже написать ряд рандомных переменных,которые будут отвечать за его передвижение,но он никогда не сможет решать сам куда ему пойти.
Сложность бота зависит от сложности его программы(т.е если я напишу четыре рандомных направления для бота-он будет проще чем бот с шестью направлениями).
Надеюсь я понятно разьяснил
1.Cannon 2.Micro survival
|
|
| |
Ordan | Дата: Понедельник, 24 Февраля 2014, 04:04 | Сообщение # 3 |
Главный зомби
Сейчас нет на сайте
| Zuduka21, тоже мне умник нашелся. Лучше бы помог человеку.
Saitei, что бы бот был более менее разумным, научи его выбирать из двух и более вариантов. Если же нужно что бы бот делал сложную цепочку действий то тогда рекомендую систему сценариев. К примеру боту нужно построить дом, вот какой сценарий я дал боту для данного случая: 1) Найти дерево для срубки 2) Если есть топор то идти к дереву, если нет то запускается сценарий поиска топора 3) Бот пришел к дереву и стал его рубить 4) Бот ищет место где строится дом 5) Бот идет к месту стройки дома 6) Строит дом При завершении одного этапа бот переходит к другому если условия соблюдены, если нет то он будет выполнять этот этап пока не выполнит условия.
Сценарий я сделал из массива записей, что очень удобно и экономит кучу кода. Вот к примеру рабочий сценарий готовки еды в моей игре "Царь ..." Сценарий[28].Номер:=28; Сценарий[28].Длинна:=4; Сценарий[28].Название:='Готовить еду 1'; Сценарий[28].СписокДействий[1].Номер:=4; Сценарий[28].СписокДействий[2].Номер:=2; Сценарий[28].СписокДействий[3].Номер:=35; Сценарий[28].СписокДействий[4].Номер:=44;
При завершении действия 4 он переходит к действию 2 и тп. Могу расписать подробнее если надо.
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Мои проекты ТЫК Мои видяхи на ютубэ ТЫК
Если ты споришь с идиотом, вероятно тоже самое делает и он.
|
|
| |
Zuduka21 | Дата: Понедельник, 24 Февраля 2014, 04:15 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Цитата Ordan ( ) Zuduka21, тоже мне умник нашелся. Лучше бы помог человеку. Я не пытался умничать,видимо я просто не правильно понял вопрос.На часах два часа ночи как-никак.
1.Cannon 2.Micro survival
|
|
| |
Saitei | Дата: Вторник, 25 Февраля 2014, 00:11 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Цитата Ordan ( ) Сценарий я сделал из массива записей, что очень удобно и экономит кучу кода. Вот к примеру рабочий сценарий готовки еды в моей игре "Царь ..." Сценарий[28].Номер:=28; Сценарий[28].Длинна:=4; Сценарий[28].Название:='Готовить еду 1'; Сценарий[28].СписокДействий[1].Номер:=4; Сценарий[28].СписокДействий[2].Номер:=2; Сценарий[28].СписокДействий[3].Номер:=35; Сценарий[28].СписокДействий[4].Номер:=44; Это структура? Цитата Ordan ( ) Saitei, что бы бот был более менее разумным, научи его выбирать из двух и более вариантов. Если же нужно что бы бот делал сложную цепочку действий то тогда рекомендую систему сценариев. К примеру боту нужно построить дом, вот какой сценарий я дал боту для данного случая: 1) Найти дерево для срубки 2) Если есть топор то идти к дереву, если нет то запускается сценарий поиска топора 3) Бот пришел к дереву и стал его рубить 4) Бот ищет место где строится дом 5) Бот идет к месту стройки дома 6) Строит дом При завершении одного этапа бот переходит к другому если условия соблюдены, если нет то он будет выполнять этот этап пока не выполнит условия. А как будет делаться выбор? Рандом? Цитата Zuduka21 ( ) .Ты можеш указать боту траекторию либо в каких пределах,с какой скоростью и в каком направлении он будет двигатся.Можеш даже написать ряд рандомных переменных,которые будут отвечать за его передвижение,но он никогда не сможет решать сам куда ему пойти.
Сложность бота зависит от сложности его программы(т.е если я напишу четыре рандомных направления для бота-он будет проще чем бот с шестью направлениями).
Надеюсь я понятно разьяснил wink Боюсь что это всё слишком общие слова... Спасибо конечно что пытались помочь, но всё же
|
|
| |
akyl91 | Дата: Вторник, 25 Февраля 2014, 00:43 | Сообщение # 6 |
участник
Сейчас нет на сайте
| Бот, даже с самыми сложными сценариями, ничего общего не имеет с ИИ. Т.к. все эти сложнейшие сценарии ему ПРЕДПИСАНЫ. Чтобы бот сразу действовал безошибочно. И рандомом тут ничего радикально не решить. ИИ начинается там, где бот делает ошибки и на них учится.
Чтобы сделать ИИ сначала надо придумать Мир, где бот сможет делать ошибки.
Вы не говорите ЧТО мне делать, Я не говорю Вам КУДА пойти.
|
|
| |
Ordan | Дата: Вторник, 25 Февраля 2014, 03:30 | Сообщение # 7 |
Главный зомби
Сейчас нет на сайте
| Цитата akyl91 ( ) Это структура? Да это структура сценария, так он у меня выглядит на Delphi.
Цитата Saitei ( ) А как будет делаться выбор? Рандом? Бот сравнивает ближайшие объекты и выбирает лучший, критерий выбора можно сделать множество, можно и рандом впихнуть, мол ошибся/сглупил и тп. К примеру при поиске дерева для срубки бот ищет дерево, что будет как можно ближе к нему, в тоже время если издан указ о запрете срубки плодоносных деревьев то он будет еще и проверять плодоносное дерево или нет. И когда все условия будут соблюдены он выберет дерево для своей цели.
Цитата akyl91 ( ) Бот, даже с самыми сложными сценариями, ничего общего не имеет с ИИ. Т.к. все эти сложнейшие сценарии ему ПРЕДПИСАНЫ. Чтобы бот сразу действовал безошибочно. И рандомом тут ничего радикально не решить. ИИ начинается там, где бот делает ошибки и на них учится.
Чтобы сделать ИИ сначала надо придумать Мир, где бот сможет делать ошибки. еще один умник, тут даже дураку будет понятно что речь не о идеальном ИИ, а игровом. Если нечего сказать то не флуди в теме.
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Мои проекты ТЫК Мои видяхи на ютубэ ТЫК
Если ты споришь с идиотом, вероятно тоже самое делает и он.
|
|
| |
Saitei | Дата: Вторник, 25 Февраля 2014, 23:47 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Ordan, а как и на чём лучше проектировать игровой ИИ? P.S. У Bас есть Skype/ICQ?
|
|
| |
JessyStorm | Дата: Среда, 26 Февраля 2014, 00:06 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Saitei, лучше всего начать с подробного алгоритма поведения, а уже потом вдаваться в технические подробности, то есть составить алгоритм, а после заниматься реализацией.
https://www.artstation.com/artist/jessystorm
Сообщение отредактировал JessyStorm - Среда, 26 Февраля 2014, 00:09 |
|
| |
Saitei | Дата: Среда, 26 Февраля 2014, 00:58 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Цитата JessyStorm ( ) Saitei, лучше всего начать с подробного алгоритма поведения, а уже потом вдаваться в технические подробности, то есть составить алгоритм, а после заниматься реализацией. Грань между программированием и кодированием я осознаю. Как я могу что-либо кодировать, не имея алгоритма? Отсюда вытекает необходимость разрабатывать алгоритм -> всё равно придется хорошенько помозговать =)Добавлено (26.02.2014, 00:58) --------------------------------------------- JessyStorm, да и тему я создал чтобы узнать о современных подходах к игровому ИИ. Вот Ordan предложил систему сценариев (за что большое спасибо, есть над чем подумать). Просто я разрабатываю космическую игру с динамически генерируемым миром. В ней есть N профессий "кораблей", и у всех них своё поведение. Торговец будет пытаться летать по системам, где больше военных, ну или, если битва неизбежна - просить о помощи у дружественных кораблей (чьё отношение к данному "объекту" больше чем К%). В экономику лезть боюсь, но если о ней говорить то вообще круто было бы если торговец сам решал что откуда скупать и где продавать) Ну а пираты, что ж с них взять?, будут грабить торговцев, группами убивать военных (если ((кол-во пиратов)-2)>=(кол-во военных)), захватывать слабо защищенные системы. Военные же будут либо охранять свою систему, либо отвоевывать соседние.
Так же, ввиду системы "отношений" друг между другом вводятся новые фичи ака "Ты не помог мне в бою! Теперь наши отношения ухудшились", "Ну и сволочь же ты! Выбрасывай всё из трюма! Выбрасывай, иначе разнесу твоё корыто!".
Не знаю почему, но я люблю динамические штучки. Я осознаю, что всё это не так легко как хотелось бы, но всё же не пытайтесь отговорить меня По задумке все космические корабли, системы, планеты и т.п. будут взаимодействовать друг с другом. Я знаю как всё это объединить, какие параметры ввести, что делать, но немного не понимаю как лучше ввести игровой ИИ. Обычно я писал огромные линейные алгоритмы. Но уже как месяцев шесть я думаю, что занимался фигней.
P.S. ООП знаю, программирую на С++ (хотя второе не особо важно, главное идейку подкиньте)
|
|
| |
Ordan | Дата: Среда, 26 Февраля 2014, 02:51 | Сообщение # 11 |
Главный зомби
Сейчас нет на сайте
| Saitei, Если более подробно то у меня ИИ разделен на два типа: Общий и Профессиональный Общий ИИ отвечает за социальную сферу: диалоги между ботами, обмен, готовка, сон и тп. Профессиональный это ИИ строго ориентированный на данную профессию, в него вбивается множество различных условий при соблюдении которых ИИ получает тот или иной сценарий. К примеру вернулся охотник с охоты в поселение, сценарий возвращения домой выполнен, теперь он смотрит свой ИИ для поиска нового сценария, если у него с собой добыча то ему дается сценарий идти домой и там разделать тушу, если же добычи нет то он может либо пополнить припасы либо отдохнуть и вернуться к охоте(ну или лечь спать если уже поздно) Такое разделение ИИ позволило с экономить кучу кода и оптимизировать алгоритмы ИИ. А вот в игре "Будни подкаблучника" я реализовал ИИ кардинально иным способом. Там весь ИИ завязан на характеристиках и рандоме (плюс игрок проходит тест где ИИ запоминает его ответы и в той или иной ситуации поступает так же как в тесте) Выбор между различными вариантами я привязал к характеристикам, к примеру стоит между ботом выбор: убежать, обхитрить или драться и есть у нас три параметра "скорость", "интеллект", "сила оружия". В зависимости от ситуации боту даются штрафы/бонусы на проверку той или иной характеристики. Что такое проверка? Еще в старых настольных играх все делалось кубиками, я же часто использую ролевую систему GURPS в своих играх, там для проверки характеристики бросается три шестигранных кубика. Скажем у бота интеллект 12 это значит что при броске кубиков должно быть 12 или меньше, если больше то проверка провалена и бот не смог обхитрить врага.
При выборе бот оценивает свои параметры, риск, конечный результат и выбирает тот вариант что больше ему понравился, различные личные качества бота могут влиять на этот выбор. Бот с личным качеством "драчун" получит бонус к характеристики сила оружия при выборе.
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Мои проекты ТЫК Мои видяхи на ютубэ ТЫК
Если ты споришь с идиотом, вероятно тоже самое делает и он.
|
|
| |
-l33t-h4xx- | Дата: Среда, 26 Февраля 2014, 11:37 | Сообщение # 12 |
участник
Сейчас нет на сайте
| С ИИ дела имел мало (во всяком случае с реал-таймовым), так что могу привести только вычитанные из книжек умствования. Надеюсь, они помогут глубже прочувствовать проблему.
На самом низком уровне интеллект игровой сущности обычно представляется в виде машины состояний: грубо говоря, набору алгоритмов действия в различных ситуациях. Сущность, например, может находиться в состоянии "атаковать", "прятаться", "искать" и в зависимости от состояния на каждом шаге обновления исполняется соответствующая ему ветка кода.
Сам искуственный интеллект, в том понимании, в котором мы его сейчас обсуждаем, будет определяться алгоритмом, который переключает сущность из одного состояния в другое. Это может быть как примитивный набор условных переходов ("если здоровья достаточно, и враг близко - атаковать", "если здоровья мало и враг близко - прятаться", "если враг далеко - искать его"), так и смешанная сценарно-ориентированная система, которую предагает Ordan. Можно даже создать крутой алгоритм на основе нейронных сетей, если квалификация позволяет. То есть, всё многообразие реализаций ИИ не выходит за рамки одной-единственной функции, выбирающей состояние сущности.
Таким образом, если смотреть на вещи с этого ракурса, в первую очередь следует реализовать атомарные состояния, из которых, на основе цепочек решений, которые только придут тебе в голову, будет строиться разум твоих игровых объектов.
Как правильно задавать вопросы
|
|
| |
|