Current time: 27.11.2024, 01:12 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
AI - искусственный интеллект (ИИ)
» Поведение ИИ, предложения/идеи по его улучшению, ресивер !!AI
Author Message
gamecreator Offline

Posts: 7107
Post: #31

(21.05.2017 23:50)Heromant Wrote:  Ну в этом то и задумка.
Нет. Если просто вызвать для каждой пары героев событие встречи. Без всяких расчётов и условий, раз в ход все герои ИИ встречаются друг с другом. Если и при этом они не передают войска и артефакты, то тут уже проблема не во встречах.
(22.05.2017 13:00)Heromant Wrote:  Конечно не против. Только надо бы обозначить, что в этой теме предлагаются, обсуждаются, разрабатываются усиления "сообразительности" ИИ, а не усиление ИИ бонусами и прочими бенефитами.
Отделил. Так пойдёт?


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
22.05.2017 14:08
Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #32

(22.05.2017 14:08)gamecreator Wrote:  
(21.05.2017 23:50)Heromant Wrote:  Ну в этом то и задумка.
Нет. Если просто вызвать для каждой пары героев событие встречи. Без всяких расчётов и условий, раз в ход все герои ИИ встречаются друг с другом. Если и при этом они не передают войска и артефакты, то тут уже проблема не во встречах.
Я хотел полностью контролировать встречу героев, которая инициирована скриптом. То есть запланировали в ERM встречу (назначили слабому целью сильного), записали в глобальные переменные этих героев (w) номера тех героев, с которыми предстоит встреча. Также записываем дату, когда должна произойти эта встреча. Обработчики встреч для всех героев перенаправляем в единую функцию. В этой функции проверяем дату и проверяем у каждого героя, что произошла встреча с тем самым героем, с которым запланировали. Если true, то полностью берём на себя (на наш ERM) обработку встречи. Тогда вопрос выше не имеет смысла, так как повторюсь, для случаев когда мы запланировали встречу - мы полностью переопределяем обработку этой встречи. Хотя проверить, как бы классический ИИ сам поступил, если принудить героев встретиться всё таки надо. Существует очень маленькая призрачная вероятность, что он сделает всё правильно. Если что-то не правильно - переделываем.
(22.05.2017 14:08)gamecreator Wrote:  
(22.05.2017 13:00)Heromant Wrote:  Конечно не против. Только надо бы обозначить, что в этой теме предлагаются, обсуждаются, разрабатываются усиления "сообразительности" ИИ, а не усиление ИИ бонусами и прочими бенефитами.
Отделил. Так пойдёт?
Да, отлично.
(This post was last modified: 22.05.2017 15:39 by Heromant.)
22.05.2017 15:28
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #33

Вариант усиления ИИ при игре в команде:


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


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
22.05.2017 19:51
Visit this user's website Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #34

Пришла разумная мысль по поводу усиления ИИ за счёт встреч героев. Можно вполне безболезненно сделать, чтобы слабый герой гарантированно встречался с сильным, если первому до второго 2 дня пути, а не один. Для этого необходимо:
1) В начале каждого дня проверять, может ли слабый герой дойти до сильного за 1 текущий день, если по расчетам им есть смысл встречаться. Если да - назначаем сильного героя местом встречи, сначала ходит слабый.
2) Если не может за 1 день, начинаем ход с сильных героев.
3) Если после хода сильного героя до него может с пользой дойти слабый герой за 2 дня - назначаем сильного героя местом встречи.
4) Завершаем ход слабым героем. Приближаемся.
5) Начинаем следующий день со слабого героя, которому остался 1 день пути до сильного. Догоняем его, встречаемся, обмениваемся всем, что надо.
6) Продолжаем день, проверяем могут ли слабые герои, дойти до сильного, кроме того, который уже дошёл в текущий день.
7) См. п. 2.
И т. д.
Есть подводные камни? Мы же можем ведь очередностью хода ИИ управлять как-то?
(This post was last modified: 24.05.2017 00:58 by Heromant.)
24.05.2017 00:42
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #35

Алгоритм в общем-то нормальный. Фактически, перемещения сильного мы не регулируем, только очередность.
Это хорошо. Только не отменяет первостепенность "если по расчетам им есть смысл встречаться" Sm


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
24.05.2017 10:14
Visit this user's website Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #36

Расчётная формула для встречи
Для удобства предоставляю excel файл расчёта целесообразности встречи.
По файлу всё понятно.
https://yadi.sk/i/J_jH9xFD3JYNmM
Пояснение:
"Сила армии, арт, закл до", "Сила армии, арт, закл после" считается следующим образом:
1)Каждый юнит, артефакт, включая машины, и заклинание имеет свою ценность. Чтобы узнать суммарную ценность - нужно перемножить ценность каждого элемента (юнита) на количество используемых элементов и суммировать. Артефакты, которые не работают (в рюкзаке) в расчете общей силы участия не принимают.
2) После встречи самые ценные артефакты надеваются на сильного героя, вторые по ценности артефакты надеваются на слабого героя, остальные передаются в рюкзак сильного героя (здесь и далее сила героя это его уровень). Ценность тех артефактов, которые не были надеты, а стали одеты на какого либо из героев начинают учитываться.
3) Не всегда все лучшие по расчётной силе отряды существ передаются сильному герою а те которые не уместились у сильного - слабому. Из таблицы видно, что учитывается влияние скорости существ на скорость героев на карте, а также комбинации существ на его мораль. Необходимо подобрать такую конфигурацию отрядов у двух героев, при котором полезность встречи будет максимальной, по ней проверять целесообразность встречи и её в конечном итоге при встрече и реализовывать.

У кого-то есть желание реализовать сей скрипт? У меня проблемы со свободным временем и скоростью реализации из-за малого опыта в ERM... И деньгами (на донат не рассчитывайте). Если никто не хочет - реализую сам. На пенсии.:D
26.05.2017 14:40
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #37

Heromant, отличная возможность подтянуть свой ERM, не упусти её 118
И малый опыт, поверь, не помеха. Я, например, BattleHeroes начал писать через 3 месяца после написания своего первого скрипта на ERM.


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
26.05.2017 15:41
Visit this user's website Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #38

(26.05.2017 15:41)Algor Wrote:  Heromant, отличная возможность подтянуть свой ERM, не упусти её 118
И малый опыт, поверь, не помеха. Я, например, BattleHeroes начал писать через 3 месяца после написания своего первого скрипта на ERM.
Какие-нибудь комментарии по алгоритму принятия решения о необходимости встречи есть?
Можно ли менять менять порядок хода героев ИИ, при этом чтобы никакие из них не пропускали хода?
Есть ли возможность проверить, разведана ли конкретная клетка на карте игроком конкретного цвета?
26.05.2017 15:56
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #39

(26.05.2017 15:56)Heromant Wrote:  Какие-нибудь комментарии по алгоритму принятия решения о необходимости встречи есть?
Не вникал, все равно это будет 100 раз меняться в процессе отладки, а навскидку сказать сложно.

(26.05.2017 15:56)Heromant Wrote:  Можно ли менять менять порядок хода героев ИИ, при этом чтобы никакие из них не пропускали хода?
По-хорошему, нужна возможность перехвата и отмены передачи хода - эт к реверсерам нашим. Возможно это им поможет/напомнит:

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


(26.05.2017 15:56)Heromant Wrote:  Есть ли возможность проверить, разведана ли конкретная клетка на карте игроком конкретного цвета?
!!TR:V


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
26.05.2017 16:12
Visit this user's website Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #40

Итак, как я ранее и говорил начинать реализацию "встреч героев ИИ" в любом случае придётся с расчёта расстояния между героями.
Ситуация следующая. Реализовывать алгоритм поиска оптимального пути на ERM с нуля достаточно сложно. Ситуация осложняется отсутствием переменных типа массивов в ERM. Но данный алгоритм уже реализован в базовом ИИ игре, но как извлечь его, отделив от перемещения - я не знаю, да и вряд ли кто-то здесь мне поможет это сделать.
В связи с этим возникает следующая идея. А что, если не пытаться отделить расчёт длины пути от самого хода героя ИИ. Алгоритм ниже не предусматривает встреч героев в радиусе больше, чем ход одного героя, так как на мой вопрос выше ещё не дан ответ. Итак:
1) В начале хода каждого героя ИИ фиксируем клетку на карте его местоположения. Проверяем положение других героев этого же игрока. Находим линейное расстояние до них в MP, как если бы у героя была способность "полёт" на глобальной карте. Сразу же вопрос, в ERM же нет корня, а как тогда вычислить гипотенузу?148
2) Для тех героев, до которых герой мог бы добраться по прямой за свой ход, проверяется необходимость встречи по формуле.
3) Для каждого из героев, встреча с которым была бы необходима при движении по прямой производится проверка реальной достижимости встречи за ход, исходя из ландшафта, почв и. т. д. Для этого:
3.1) Картинка героя (на лошади с флагом), являющегося инициатором встречи, на глобальной карте заменяется невидимой картинкой.
3.2) Точка на карте, где расположен герой, являющийся целью встречи, назначается максимально приоритетной целью для героя-инициатора встречи.
3.3) После окончания хода или при достижении героя-цели либо при попытке совершения им по ходу движения какого-либо другого действия, кроме перемещения или встречи с целевым героем (действие отменяется), герой-инициатор возвращается на исходную позицию (как в начале дня) с возвращением ему полного запаса хода, которое у него было в начале дня. В случае достижения героя-цели запоминается реальное количество очков хода, затраченное до встречи.
3.4) Данный цикл повторяется для всех героев-целей, с которыми была бы необходима встреча, если бы герой-инициатор двигался по прямой без штрафов.
3.5) Картинка героя меняется обратно на нормальную.
3.6) Для тех героев-целей, которые были достигнуты, заново рассчитывается необходимость встречи, исходя уже из реально затраченных очков перемещения.
3.7) Заново назначается оптимальный герой-цель для встречи с максимальной значимостью этой встречи.

Данный алгоритм можно упростить в пользу большей линейности отказа от выбора оптимального и сортировок, что в рамках ERM затруднительно. Таким образом все пункты будут выполняться линейно по очереди для каждого героя-цели. При этом первый же герой-цель, целесообразность движения к которому подтверждена назначается целевой точкой для реального движения.
30.05.2017 13:27
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #41

(30.05.2017 13:27)Heromant Wrote:  Реализовывать алгоритм поиска оптимального пути на ERM с нуля достаточно сложно...Но данный алгоритм уже реализован в базовом ИИ игре, но как извлечь его, отделив от перемещения - я не знаю, да и вряд ли кто-то здесь мне поможет это сделать.
Вообще, надо просто найти существующую функцию и использовать ее. Это к "реверсерам". По-поводу "вряд ли кто-то здесь мне поможет" - а ты просил?

(30.05.2017 13:27)Heromant Wrote:  Ситуация осложняется отсутствием переменных типа массивов в ERM.
SN:W вполне подходит для работы с массивами.

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


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
30.05.2017 13:39
Visit this user's website Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #42

(30.05.2017 13:39)Algor Wrote:  Вообще, надо просто найти существующую функцию и использовать ее. Это к "реверсерам". По-поводу "вряд ли кто-то здесь мне поможет" - а ты просил?
...
Вопрос с нужной очередностью хода (как вариант, с перехватом передачи хода) вроде не закрыт еще.
Именно потому, что вопрос с очерёдностью хода не решен, я сделал предположение, что сложности возникнут и с реверсом функции оценки очков перемещения героя до перемещения (построение зелёно-коричневой стрелочки пути до пункта на карте, безотносительно её отображения).
Ладно, перемещу этот вопрос, может быть это проще, чем с очерёдностью хода.

(30.05.2017 13:39)Algor Wrote:  2) Точки значимости для героев наверняка будут работать совершенно не так, как тебе хотелось бы. Во всяком случае, когда цель находится не в паре шагов.
Да, поэтому я и хочу ориентироваться на фактически затраченное количество MP. Тут ещё нужно учитывать, что если 2 раза из одной и той же позиции с одинаковыми начальными условиями назначить одну и ту же точку даже с максимальным приоритетом, то далеко не факт, что 2 раза подряд он пойдёт по одинаковому пути и вообще в обоих случаях её достигнет.
Если это реализовывать по-другому, то опять возвращаемся к реверс-инженеренгу с построением стрелочки на карте без её отображения и движения по ней.

(30.05.2017 13:39)Algor Wrote:  3) Если все упрощать и дальше, можно прийти к дистанционной передаче войск/артефактов/опыта/заклинаний и уменьшению ОД.
Нет - максимум к чему можно прийти, это к "телепортации" героя на место встречи с убавлением нужного количества очков движения у него. Но тогда изначально нужно вычислить количество вычитаемых очков движения. И опять, здравствуй, предыдущий пункт, с реверс инженерном вычисления затраченных очков движения из пункта A в пункт B. Но в случае такой "телепортации" мы теряем ценную анимацию на ходе противника, что не хорошо и может ввести в заблуждение относительно использования противником "двери измерений".
30.05.2017 14:29
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #43

(30.05.2017 13:27)Heromant Wrote:  Ситуация осложняется отсутствием переменных типа массивов в ERM.
SN:M же.
(30.05.2017 13:27)Heromant Wrote:  Сразу же вопрос, в ERM же нет корня, а как тогда вычислить гипотенузу?148
Тебе же только сравнить, возведи другую часть в квадрат, как это делается в воговском скрипте дистанционного посещения объектов.
(30.05.2017 13:39)Algor Wrote:  1) вопрос с нужной очередностью хода (как вариант, с перехватом передачи хода) вроде не закрыт еще.
А почему манипуляция ОД не подходит?


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
01.06.2017 14:25
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3881
Post: #44

(01.06.2017 14:25)gamecreator Wrote:  
(30.05.2017 13:39)Algor Wrote:  1) вопрос с нужной очередностью хода (как вариант, с перехватом передачи хода) вроде не закрыт еще.
А почему манипуляция ОД не подходит?

Объясни, как ты предлагаешь управлять очередностью хода ИИ?


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
01.06.2017 14:34
Visit this user's website Find all posts by this user Quote this message in a reply
Heromant Offline

Posts: 348
Post: #45

(01.06.2017 14:34)Algor Wrote:  
(01.06.2017 14:25)gamecreator Wrote:  
(30.05.2017 13:39)Algor Wrote:  1) вопрос с нужной очередностью хода (как вариант, с перехватом передачи хода) вроде не закрыт еще.
А почему манипуляция ОД не подходит?

Объясни, как ты предлагаешь управлять очередностью хода ИИ?
Я похоже понял, что имел в виду gamecreator. В начале хода забирать ОД у всех героев кроме одного. При завершении хода этим героем и до завершения дня игроком выдавать изъятые очки движения следующему в нужной очерёдности.Ab
01.06.2017 15:51
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group