Улучшение искусственного интеллекта (AI) (Medieval 2: Total War)

Улучшение искусственного интеллекта (AI) Medieval 2: Total War: Интерактивное руководство.

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

Это руководство для версии  M2TW 1.2. Много возможностей не доступны в более ранних версиях. Версия 1.3 в значительной степени похожа, хотя Kingdoms позволяет использовать некоторые опции, которые не представлены в этом варианте. Есть четыре главных файла, которые способствуют поведению AI, они отвечают, как он "думает".

  • Ÿ  descr_campaign_ai_db.xml
  • Ÿ  descr_strat.txt
  • Ÿ  descr_faction_standing.txt
  • Ÿ  descr_diplomacy.xml

Два менее значимых файла также регулируют поведение AI, но непосредственно на него не влияют.

  • Ÿ  config_ai_battle.xml
  • Ÿ  descr_character.txt

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

 

config_ai_battle.xml

В этом файле есть всего две строки, относящимся AI в кампании:

2.0

Объясню подробнее: это соотношение сил защитника и нападающего, которое необходимо для AI, совершить вылазку на противника или сидеть за стенами. Эта строка буквально означает, что сила защитника должна вдвое превышать силу атакующего. В кампании при осаде этот процесс используется, чтобы определить, обороняться или контратаковать.

0.8

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

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

 

descr_character.txt

AI не обращается к этому файлу на прямую, но он сильно влияет, как компьютер поведет себя. Снова имеются две важных строки, хотя для каждой из них характерно свое значение:

span style="color: blue; ">

      starting_action_points80; default value for all characters

 

and pathfinding calculations

 

В основном перемещение происходит на карте кампании. Этот процесс оказывает мощный эффект на развитие таких вещей, как: организация/движение армий, объединение отрядов для создания единой армии, оценивание опасных целей/угроз, размещение армий на оборонительные позиции, практически на все. Разные кампании имеют свои собственные настройки, из моего исследования удалось определить, что для карты ванилы это значение 135; базовый средний параметр между поселениями. В точном варианте (в исполнении AI) все поселения будут удалены друг от друга равномерно, и очки движения будут соответсвовать показателю той дистанции, на которую оно удалено. При увеличении этого числа было бы видно, что фракции AI на обширных территориях (как Россия) передвигаются лучше, чем на маленьких (Европа), и пришлось бы тратить больше времени, прежде чем армия совершит осаду. Понижая число, вы бы видели, что компьютер практически ничего не предпринимает в больших областях, в то время как в маленьких, он показал бы себя лучше.

Важное замечание: индивидуальные настройки для каждого отдельного типа не работают должным образом! Для лучших результатов пытайтесь ставить настройки по умолчанию.

span style="color: blue; ">

    wage_base200

 

Эта строка - "стоимость содержания" (как для юнитов). Так происходит из-за искусственного интеллекта, не запрограммированного (по неизвестным причинам) для контроля над доходами. Также на более жестких настройках AI "породит" генералов с примерным содержанием в 200 флоринов за ход, много денег будет потрачено впустую. Имейте в виду, что вы также должны содержать телохранителей генерала! Значит за каждый ход действительная цена генерала от 400 до 600 флоринов. Стоимость содержания принцесс равна в 250 флоринов, в то время как дипломат стоит лишь 50, выдавайте принцесс замуж или понизьте их содержание к приемлемому числу. (Принцессы немногим более полезны, чем дипломаты, поэтому, я предлагаю 75-100 флоринов за переговорщика).

В дополнение к вышеупомянутым небольшим ценам на содержание у AI есть тенденция к "клонированию" (массовому набору) агентов другого типа, только затем, чтобы они, сидели без дела. Она создает серьезную брешь в бюджете AI, особенно в затяжной игре, когда у мощной фракции по 20 или более шпионов (выходит по 2000 флоринов за ход!) или множество убийц (4000 за ход). Также он набирает немало священников и несколько дипломатов, и неудивительно, что AI не может сбалансировать свою экономику на высоком уровне. В частности, я хотел бы изменить скрипты так, чтобы на половину сократить набор агентов для фракций AI. Увидев, что он будет использовать оставшуюся часть агентов примерно с той же эффективностью, как и с большим числом, мне кажется, мы его не обманываем.

 

descr_diplomacy.xml

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

span style="color: blue; ">

 

 

 

 

 

 

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

"Cost modifier" это -  относительное значение, которую AI определит за операцию (напр., не меньше 5000 флоринов - прим. переводчика), в то время как точное значение исходит из надобности компьютера того или иного объекта (в 10000 - прим. переводчика) не поддается изменению), такое положение дел позволит вам влиять на относительное значение. Примечание: AI никогда не будет предлагать что-то со значением 0 или ниже. Имейте в виду, что значение также определяет цену, такие операции,  как "offer_payment", скорее всего, повысит положительный результат, а "demand_payment" понизит, "offer_ceasefire" может дать любой исход, +/- от того, хочет ли AI перемирия.

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

span style="color: blue; ">

 

Вышеупомянутое вполне просто перевести в численное соотношение к наглядному тексту для таких вещей, как отношения, репутация, благосостояние и сила.

Я не достаточно знаком с параметром"demeanour_entry", чтобы сделать грамотное объяснение. Хотя, играя с данными числами, я увеличиваю вероятность управления над AI.

 

descr_faction_standing.txt

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

Для определенной последовательности, я просто покажу как это используется на примере начальной части файла, о котором идет речь.

span style="color: blue; ">

      min_faction_standing-1.0

 

max_faction_standing1.0

 

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

span style="color: blue; ">

      relations_improved_thresholds

 

{

0.25

0.4

0.6

}

relations_worsened_thresholds

{

-0.8

-0.4

-0.25

}

 

Когда эти значения учтены, раскрывается соответствующее сообщение, они вызывают событие послания, ничего больше.

После чтения вводной части, остается единственная вещь, которую довольно трудно понять:

span style="color: blue; ">

      normalise [target_faction_standing] [divisor] --> for each

 

affected faction standing,

add (target_faction_standing - faction_standing)/divisor

 

из примера видно

span style="color: blue; ">

      FactionStanding target_faction normalise -1.0 20

 

[target_faction_standing] = -1.0

[divisor] = 20

 

Точное значение этой строки немного трудно расшифровать, поэтому, я объясню только самое основное.
Разница между текущим положением фракции и целевым положением фракции определялось делителем. Допустим, что текущее положение фракции 0.2, мы знаем, что целевое положение фракции -1.0, выходит разница -1.-1.2/20 =-0.06. Данное число добавлено к положению текущей фракции:  (0.2) + (-0.06) = (0.14) , после того, как триггер учтен и сделаны вычисления, получаем результат 0.14.  Это означает, что ваше настоящее нахождение стало ближе к целевому положению фракции, такой эффект будет сопровождаться соответствующим событием.

Это объяснение является лучшим, что я могу предложить. Извините, но лучше я не могу.

 

descr_strat.txt

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

span style="color: blue; ">

    factionengland, balanced smith

 

По примеру Рима, я думаю, лучше всего видно описание того, что означает эта строка.

Они управляют рядом модулей AI, которые вносят изменения в строительстве и обучении (но не переобучение или восстановление). Эти изменения являются довольно незначительными по сравнению со сгенерированными игрой факторами, такими как "противник, атакует меня только кавалерией, создавайте только копьеносцев". Объяснение системы баланса, которая управляет производством AI, полностью выходит за рамки руководства, поскольку понадобилось бы несколько дней для описания.

Если покороче, модули такие: (оценены от самых эффективных к самым низким):

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

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

Они объединены с модулем производства солдат, следующим образом:

  • Ÿ  Кузнец –точный уровень
  • Ÿ  Мао – производит массовые войска, легкую пехоту
  • Ÿ  Чингиз – производит стрелковую конницу и легкую конницу
  • Ÿ  Сталин – производит тяжелую пехоту, массовые войска и артилерию
  • Наполеон – комбинирует легкую и тяжелую пехоту, производит легкую кавалерию
  • Ÿ  Генри – производит легкую и тяжелую кавалерию, стрелковую пехоту
  • Ÿ  Цезарь – производит тяжелую пехоту, легкую кавалерию, осадную артилерию

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

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

  • Ÿ  Чингиз – производит стрелковую конницу и легкую конницу
  • Ÿ  Генри – производит легкую и тяжелую кавалерию, стрелковую пехоту

В то время как

  • Ÿ  Мао – производит массовые войска, легкую пехоту
  • Ÿ  Наполеон – комбинирует легкую и тяжелую пехоту, производит легкую кавалерию

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

span style="color: blue; ">

    ai_label catholic

 

Параметр ai_label в файле descr_campaign_ai_db.xml задает условия поведения фракции.

Теперь о большем разделе.

 

descr_campaign_ai_db.xml

Этот файл массивен, и не используется в полную силу, особенно, когда объединен с другими файлами, которые я упоминал. Я просто собираюсь просмотреть вводную часть и дать разъяснения:

// min threshold for how much we like the target faction to consider them a trusted ally
// min threshold for how much the target faction likes us to consider them a trusted ally
// min threshold for how much the target (human) faction likes us to consider them a trusted ally
// min threshold for how trustworthy we are to consider the target faction a trusted ally
// min threshold for how trustworthy is the target faction to consider them a trusted ally
// flag to indicate if a faction automatically goes to war with a trusted allies enemy

Вполне прилично объяснено, однако, я не соглашусь с тем, как используются эти положения. "trusted ally" является единственной сторонней ссылкой, доступнымй в пределах этого файла, на такие понятия, как "trusted_ally_enemy" и "trusted_ally_protectorate". Это означает, что невозможно получить союзников, отношения с которыми ниже границы "trusted_ally". Я использую "trusted_ally" с этой целью, в то время как ванила и другие моды только идентифицируют целевую фракцию с показателем "trusted_ally", который Вы можете просто создать, сопоставляя эти же самые приоритеты в соответствующее заключение. Делая, так, программисты полностью устраняют любую стороннюю ссылку, а я имею его в наличии для большего взаимодействия.

// modifies the final invade priority for new faction targets by += (faction_standing * modifier) {makes factions more likely to start war with disliked targets}
// modifies the final invade priority for new faction targets by += (global_standing * modifier) {makes factions more likely to start war with untrustworthy targets}
// modifies the final invade priority for new faction targets where military assistance has been asked by += (offset) {makes factions more likely to start war with military assistance targets}

Все говорит само за себя, но важно отметить, что модификаторы "fs" и "gs" не задействованы, когда фракции уже в состоянии войны. В действительности так и должно быть, и использовать их стало бы легче, если бы они отметили это в своем объяснении. Я не уверен, что вполне правильно, если отказ от помощи активирован, в то время как "AtWar" может быть не задействован.

span style="color: blue; ">

      // determines if cheat

 

overrides (force peace with ai, force attack with humans) are

applied

 

Это важно, в основном все указывает на "сложный активатор" в пределах файла, разрешающий ("true") или запрещающуий ("false"), единственный способ действительно улучшить AI состоит в том, чтобы в строке выставить активатор "false".

Теперь об ограничителях  min и max_entry. Если Вы не знаете и не можете выяснить, что обозначают min_entry и max_entry, найдите новое хобби. Я сожалею, если написанное прозвучит грубо или резко, но это значит, что, скорее всего, у вас нет возможности понять материал самостоятельно. Ваши таланты зарыты в другом месте, и, естественно - трата времени для нас обоих.

Я объясню, что каждая фракция вычисляет любую другую фракцию как "цель" каждый ход, прежде чем его сделать. AI тогда атакует иные фракции, когда у него есть самый высокий показатель "invade_priority", но есть исключение (invade_opportunistic), про которое я расскажу позже.

span style="color: blue; ">

      frontline_balance="0.0" :: ratio of factions frontline military

 

strength vs the target

 

На первый взгляд все кажется довольно простым, значение в "2.0" должно быть вдвое сильней на пограничных зонах, и по большей части так и есть.  Однако протокол LTGD (я расскажу про него позже) дает интересные показания.  Во-первых, важно определить значение параметра "is_neighbour", во-вторых, когда юниты находятся на борту, они создают неучитываемый баланс в пограничных зонах (в пределах от 0.000001 или меньше и до 100000.0 или больше!). Фракция AI может иметь пограничный баланс больше чем 2.0, но фактически не иметь почти никаких войск в пограничном районе, высшим результатом "frontline_balance" может быть патрулирование войсками, когда они на борту, чуть ли не половины игровой карты. Поэтому очень важно определить min и max_entry. Обычно, я использую от 1000.0 до 0.001, поскольку эти числа никогда не будут реалистично воздействовать ни на какие существенные значения, то "frontline_balance" не может быть эффективно считан. "frontline_balance" не может использоваться с несоседними фракциями, значение будет равно 1.0 или нечитабельному и бессмысленному числу.

span style="color: blue; ">

      military_balance="0.0" :: ratio of factions overall military

 

strength vs the target

 

Совершенно простое объяснение, однако имейте в виду, что в этом уравнении рассматривается значение для флота.

span style="color: blue; ">

      production_balance="0.0" :: ratio of factions overall production

 

strength vs the target

 

Достаточно просто, но понимание AI в плане найма полностью ошибочно, я предлагаю свести значение к минимальному эффекту.span style="color: blue; ">

      target_num_enemies="0" :: the number of enemies the target has

 

num_enemies="0" :: the number of enemies the faction has

 

Все правильно? НЕТ! Про эти строки,я должен пояснить подробнее, фракция может не иметь условие "AtWar" и воевать 2-я или 3-я "enemies" (врагами), в то время как другая фракция может иметь "AtWar" с 2 или 3 фракциями, но не иметь ни одного "enemies". Вообще это применимо, но не увлекайтесь сильно.

span style="color: blue; ">

      has_alliance_against="false" :: is the faction part of an

 

alliance against target

 

Немного подозрительно. Большинство людей (имеющих понятие, о чем речь) полагают, что это - дипломатическое соглашение атаковать фракцию. ЭТО НЕ ТАК. В двух словах охарактеризовать текущее положение дел можно так: "У меня есть союзники, с которыми не объединяются  эти фракции?", тогда нужно выставить"has_alliance_against="true"'. Очень простой параметр, но эффективный.

span style="color: blue; ">

      military_balance_plus_enemies="0.0" :: ratio of factions overall

 

military strength vs the target (plus all of its enemies)

 

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

span style="color: blue; ">

      alliance_military_balance="0.0" :: ratio of factions (plus its

 

allies) overall military strength vs the target

 

Точно также как и с вышеописанным, но не рассматриваются союзники целевой фракции.

span style="color: blue; ">

      strongest_neighbour="false" :: is the target the factions

 

strongest neighbour

 

Вероятно, вы понимаете, о чем в точности говорится.

span style="color: blue; ">

      most_desirable="false" :: is the target the factions most

 

desirable target

 

Я понятия не имею, как именно AI решает, кто "most_desirable". Я знаю, что не подразумеваются понятия: "кто владеет самыми богатыми землями", "целевая фракция для победы", "самый мощный" или "самый слабый". Возможно, имеется в виду сосед, а может не он. Как я уже говорил, Я ПОНЯТИЯ НЕ ИМЕЮ.

faction_standing="-1.0" :: how much does the faction like the target target_global_standing="-1.0" :: how trustworthy is the target to the rest of the world target_faction_standing="-1.0" :: how much does the target faction like this faction global_standing="-1.0" :: how trustworthy is this faction to the rest of the world

Без комментариев (особенно, если вы читали материал из раздела the descr_faction_standing.txt, и поняли о чем речь).

span style="color: blue; ">

      target_religion="catholic" :: the religion of the target (see

 

descr_religions.txt)

 

Довольно ясно.

span style="color: blue; ">

      enemy_excommunicated="false" :: is the target excommunicated

 

excommunicated="false" :: is this faction excommunicated

 

Снова понятно. Заметьте, некатолические нации всегда должны иметь условие "false".

num_turns_allied="0" :: the number of turns since the faction agreed to an alliance with the target
num_turns_ceasfire="0" :: the number of turns since the faction has agreed to a ceasefire with the target (-1 for no agreement)
stance="Allied" :: diplomatic stance with the target (Allied, Neutral, AtWar)
target_faction="england" :: target faction label (see descr_sm_factions.txt)
target_human="false" :: is the target a human player

Все строки соответствуют их описанию.

span style="color: blue; ">

    target_is_shadow="false" :: is the target this factions shadow faction

 

Эти строки часто обозначают разными вещами. Наиболее часто их воспринимают за условия победы для короткой кампании. В другом месте вы бы присвоили им еще одно значение. Это - последствие из Rome Total War: Barbarian Invasion, которое касается "Eastern Roman Empire" и "Rebel Eastern Roman Empire" независимо от того, как бы вы еще их не называли. На данный момент эти параметры не используется в M2. Они никогда не будут иметь условие "true", разве что некоторые честолюбивые моддеры не решат возобновить недействующие фракции (Я думаю, что все невостребованные данные все еще существуют, но они должны быть реализованы).

turn_number="0" :: the game turn number (starting at 0)
is_protectorate="false" :: is the target our protectorate
is_protectorate_of_catholic="false" :: is the target a protectorate of a non-excommunicated catholic faction

Все ясно.

free_strength_balance="0.0" :: ratio of factions free military strength vs the target

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

borders_all_our_regions="false" :: does the target border on all the factions region groups
target_weakest_neighbour="false" :: is the faction the targets weakest neighbour
has_ceasehostilities="false" :: does the faction have a cease hostilities mission against the target from the papal faction is_neighbour="false" :: does the target neighbour on any of the factions regions
trusted_ally="false" :: is the target a trusted ally (they like us more than fs_thresh, and their global standing > gs_thresh, and they are allied)

Объяснений не требуется.

trusted_ally_enemy="false" :: is the target an enemy of a trusted ally
trusted_ally_protectorate="false" :: is the target a protectorate of a trusted ally

Об этом я упоминал ранее. В данном случае это единственные догадки (кроме несколько неопределенного "has_alliance_against" и "is_protectorate_of_catholic"), Если вы хотите, чтобы союзники сотрудничали, понизьте значение "trusted_ally".

span style="color: blue; ">

    num_settlements="0" :: how many settlements does the faction own

 

Все понятно.

span style="color: blue; ">

    rand="0.0":: a random value

 

Случайное число создается каждый ход для отдельной фракции. Число варьируется между 0.0 и 1.0, однако нет никакого предела десятичному значению. Число 0.00000127 может выпасть с такой же вероятностью, как и 0.2. Фактически вы можете моделировать любое число. Например:

span style="color: blue; ">

    max_entry rand="0.333333333"

 

Могла бы быть 1-а из 3-х вероятностей. Вы могли бы руководствоваться этим:

span style="color: blue; ">

      min_entry rand="0.333333334"

 

max_entry rand="0.666666666"

 

И еще один пример:

span style="color: blue; ">

    min_entry rand="0.666666667"

 

Таким образом, вы создаете случайное число от 1-3, у каждого их которых равный шанс выпасть. Лично для себя я подразумеваю процентное значение. Имейте в виду, что для отдельной фракции создается собственное число каждый ход, так что удостоверьтесь, все ли вы сделали правильно.

Регулировки для "faction_attitude" имеют значение, если минимальные и максимальные условия выставлены. Я могу объяснить все другие настройки, но независимо от этого, нужно рассказать о терминах "invade" и "defend".

defend_priority="0" :: The defensive priority of achieving stance against this faction (NOT USED AT PRESENT) (additive with previous decisions this turn)

К сожалению, "not used at present" означает, что значение бесполезно и не может использоваться.

invade_priority="0" :: priority of achieving invasion against this faction (additive with previous decisions this turn). Compared with priority for decisions against all other factions to choose highest. Value modified internally by faction standing.

Вероятно, этот фактор наиболее важный. Он определяет, кого атакует AI и сколько ресурсов понадобится для нападения. Чем ближе значение к параметру"invade_priority_max", тем больше будет выделено ресурсов. Имейте в виду, что AI способен атаковать нескольких противников, если параметр "invade_priority" выставлен по отношению к ним достаточно высоко, и попытается сфокусировать ресурсы на области, где происходят события, ослабив распределение в общем плане. С должным вниманием вы можете создать эффективный многозадачный AI. Также, если значение "invade_priority" будет меньше, чем у "invade_priority_min", то AI не будет атаковать выбранную фракцию (если "invade_opportunistic" не будет использоваться, но об этом далее).

span style="color: blue; ">

    at_war="false" :: are we at war with this enemy

 

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

span style="color: blue; ">

    want_peace="false" :: do we want to be at peace with this faction

 

AI хочет предложить или принять "перемирие"? К сожалению, в настоящее время нет способа присвоить такое "значение", только банальный ответ да/нет.

span style="color: blue; ">

    want_ally="false" :: do we want to ally with this faction

 

Эта настройка была заменена:

pts_alliance="0" :: points total for measuring how much we want to be allies with these people (additive with previous decisions this turn)

Она говорит сама за себя. И действительно, она отображает "значение" союза в меню дипломатии.

want_be_protect="false" :: do we want to be a protectorate of this faction
want_offer_protect="false" :: do we want to offer protectorate status to this nation

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

span style="color: blue; ">

    force_invade="false" :: must we invade now

 

Если установлено "true", AI атакует с тем, что сразу доступно, независимо от шансов, это также обходит "invade_priority". Будьте внимательны.

alliance_against="0" :: how much do we want to have an alliance against this nation (additive with previous decisions this turn)

Довольно посредственное объяснение. Если у AI имеется положительное число в этой строке, оно добавляется к параметру "pts_alliance" по отношению к любой фракции, с которой они не в союзе, и с целью создания альянса против другой фракции. Я не уверен, применимо ли отрицательное значение.

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

Используйте с осторожностью.

pts_desire="0" :: points total for measuring our desire for this faction's territory (additive with previous decisions this turn)

Не уверен на этот счет, но я предположил бы, что скрипт связан с настройкой "most_desirable", не решился проверить.

can_force_invade="true" :: can naval or forced invasion settings overwrite invade parameters

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

continue="false"/> :: do we stop evaluating decision entries (false) or continue

По-моему, версия AI 1.2 является отдельной и самой улучшенной. AI прекратит рассмотрение текущей цели и выберет следующую цель, как только будут найдены значения min и max для параметра decision_entry, если continue="true" задействован совместно с предыдущим параметром. Эта опция позволяет добавлять результаты других настроек без их включения в пределах рассматриваемого решения.

Теперь о второстепенном (по-моему), об использовании искусственным интеллектом условия "invade=".

span style="color: blue; ">

    invade_buildup

 

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

span style="color: blue; ">

    invade_immediate

 

Эта строка должна быть вашим основным правилом при угрозе вторжения компьютера. AI атакует как можно быстрее, но попытается создать армию "помощнее", чем ваша (как в настройках файла descr_ai_battle.xml, описанных ранее).

span style="color: blue; ">

    invade_raids

 

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

span style="color: blue; ">

    invade_start

 

Вкратце о комбинациях "buildup" и "raids".

span style="color: blue; ">

    invade_none

 

Вы можете не придавать значения этому настройке, но она очень полезная, AI будет следовать защитному приоритету. Коротко объясню, параметр "invade_priority" использует определенную команду "defend=", с ее помощью AI может накапливать военную силу для вторжения.

span style="color: blue; ">

    invade_opportunistic

 

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

Теперь, по-моему, про еще более важное, чем настройки "invade", наши опции "defend="!

span style="color: blue; ">

    defend_minimal

 

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

span style="color: blue; ">

    defend_normal

 

Используется более широко. С этой установкой AI мог бы даже расположить усиленный гарнизон в нужном поселении, и попытается прервать/снять осаду и т.п. В целом, вероятно, мог бы занять круговую оборону. Но, действие полезно только в комбинации с "invade_immediate" и "invade_buildup", поскольку нет никаких конкретных позиций как для "найма" по обороне, так и для "найма" по нападению, необходимых для этой установки и, "приводящих" к какому-либо результату.

span style="color: blue; ">

    defend_raid

 

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

span style="color: blue; ">

    defend_frontline

 

С большой эффективностью может применяться с "invade_opportunistic", "invade_immediate" и "invade_buildup". Этот механизм подразумевает, что AI попытается встретиться с целевой фракцией на линии фронта. Размер армии определяется типом вторжения и удаленностью противника. Это решение принимает "invade_priority", чтобы обозначить, на чьей границе протянуть линию фронта.

Примечание: Один недостаток - AI не будет "призывать" эти войска для прерывания/снятия осады, если они не смогут прибыть в течение одного хода. МОЖЕТ ИСПОЛЬЗОВАТЬСЯ только против соседних фракций.

span style="color: blue; ">

    defend_fortified

 

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

span style="color: blue; ">

    defend_deep

 

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

И напоследок о протоколе LTGD, это - опция "журнала", доступная для регистрации всей информации и результатов, используемых файлом the descr_campaign_ai_db.xml. Чтобы активировать протокол, напишите:

span style="color: blue; ">

      [ai]

 

ltgd_logging = true

 

[log]

to = logs/system.log.txt

level = ai.ltgd trace

 

Для предпочитаемого вами файла M2 (или используемого мода) это отличное средство для диагностики.

Примечание: В начале файла descr_campaign_ai_db.xml упоминается такая формулировка.

Additionally, the ai_labels can be tested through event conditions and set through // a script command, potentially allowing ai behaviour to be changed dynamically in game depending on current game state.

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

span style="color: blue; ">

    link_faction_ai england default

 

Что означает: AI, играющий за Англию, использовал бы значение ai_label для старта из определенной точки  "по умолчанию" . Эта команда действительно работает, однако, в протоколе LTGD, будет отмечено, что фракция использует ai_label в составе descr_strat, независимо, какое именно обозначение используется.

На этом тема исчерпана. .

Добавить комментарий

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

Защитный код
Обновить