Введение в ИИ
НЕ ДЛЯ НОВИЧКОВ
Этот раздел рассчитан на опытных скриптеров, имеющие базовые познания в программировании ИИ.
Что стоит знать перед работой:
ИИ в HOI4 ужасен
убейте меня...., хуже только работа с ним.Вы не можете редактировать боевой ИИ, вам это не позволено.
ИИ может игнорировать коэфициенты выставленные вами.
ИИ не умеет видеть местность. Единственное что он видет - континент.
ИИ нельзя задать статическую покупку ресурсов, а значит, невозможно заскриптить стандартными методами.
ИИ сам выстраивает интерес к ресурсам базируясь на потребности в производстве техники. Если ресурс для техники не используется, значит он не нужен. Заскриптить самому невозможно.
Сущность стратегий ИИ:
Сущноть стратегий содержит одну или несколько стратегий ИИ и определяет, когда и как они должны применяться. Когда страна проверяет сущность, она будет разрешена только в том случае, если enable
она истинна, а abort
пустая или ложная. Сущность отключается, если abort
она не пуста и истинна. Он также отключается, если abort_when_not_enabled
установлен и enable
имеет значение false
.
Обращенная сущность работает совсем по-другому. сущность включается для страны-источника, если она указана как id
в ai_strategy
и enable_reverse
пуста или истинна. Затем сущность проверяется на соответствие целям. Если target_array
и/или targets
установлен, они используются как возможные цели. В противном случае все страны используются в качестве возможных целей. enable
и abort
спусковые проверяются для каждой возможной цели. Если цель проходит эти проверки, все ai_strategy
элементы записи включены для источника, но заменяются id
на цель.
Стратегии ИИ:
Стратегический ИИ влияет на принятие решений в других компонентах ИИ по определенным стратегическим соображениям (типы), которые также могут быть нацелены. Например, страна может быть стратегически заинтересована в защите другой страны, независимо от текущих дипломатических отношений и статуса альянса. Или он может захотеть произвести больше единиц определенного типа.
С точки зрения структуры, стратегия AI имеет только четыре атрибута: type
, value
, id
, и target
. Только некоторые типы используют id
и/или target
. Все четыре атрибута по своей сути являются целыми числами, но если они type
указаны первым, id
атрибут может ссылаться на соответствующие значения по имени. target_country
это еще один способ установить target
. Он принимает индекс страны или тег и в обоих случаях проверяет, относится ли он к допустимой стране.
ИИ сам создает динамические стратегии, но можно добавлять и статические. Статические стратегии в первую очередь определяются с помощью записи стратегии ИИ в Hearts of Iron IV/common/ai_strategy
или плана стратегии ИИ. Черты лидера страны (в /common/country_leader
) могут нести стратегии ИИ, которые активируются, когда соответствующий человек становится правителем. Индивидуальные стратегии также могут быть добавлены напрямую с помощью эффекта add_ai_strategy
(например, в случае событий, национальных фокусов и тд. и тп).
Эффективные стратегии ИИ страны сохраняются в файлах сохранения как ai
атрибут страны.
Типы:
Так как скриптеры ИИ обращаются к списку стратегиям очень часто, значит и разумнее их выставить наверх.
При определении ai_strategy
тип определяет, какой аспект стратегии ИИ изменяется. Дополнительные ai_strategy от LaR можно найти в /common/ai_strategy/default.txt
Тип
ID
Описание
put_unit_buffers
См. Ai_strategy/default.txt
Используется для указания ИИ гарнизона в определенных регионах
conquer
<тег>
Поощряет военный ИИ нацеливаться на указанный тег.
colonize
????
???? "Не используется".
explore
????
???? "Не используется".
antagonize
<тег>
Подталкивает дипломатический ИИ к противодействию по отношению к другой указанной стране.
befriend
<тег>
Подталкивает дипломатический ИИ к тому, чтобы относиться к другой указанной стране лучше.
protect
<тег>
Подталкивает дипломатический ИИ страны, чтобы попытаться защитить другую указанную страну.
consider_weak
<тег>
Подталкивает ИИ к рассмотрению указанного тега как слабого.
influence
????
???? "Не используется".
alliance
<тег>
Подталкивает дипломатический ИИ к формированию союза с другой указанной страной.
build_ship
????
???? "Не используется".
build_airplane
????
???? "Не используется".
build_army
<роль подразделения>
Приказывает ИИ построить дивизию или оборудование (например, самолеты или корабли), которые относятся к определенной роли подразделения.
build_building
<здание>
Приказывает ИИ построить определенное здание в определенном месте. Использует target
для указания местоположения стейта.
research_tech
<технология>
Приказывает ИИ исследовать определенную технологию, если это возможно.
garrison
<целое число>
Используется в ai_strategies/SOV.txt, USA.txt, ENG.txt, какая часть армии должна оставаться в гарнизоне
contain
<тег>
Подталкивает дипломатический ИИ к действиям против другой страны, например к сдерживанию своих будущих потенциальных врагов.
invade
<тег>
Подталкивает ИИ к вторжению в указанный тег.
unit_ratio
<тип объекта>
От всей армии это соотношение (в%) того типа подразделения, которое должна иметь армия.
role_ratio
<роль подразделения>
От всей армии это соотношение (в%) роли этого подразделения, которое должна иметь армия. Роли могут быть определены произвольно в ai_templates
.
land_xp_spend_priority
????
???? "Не используется".
pp_spend_priority
<решение> <гарантия> <отношение> и т.д.
Устанавливает приоритет расходования политической власти на указанное действие.
template_prio
<тип объекта>
Устанавливает приоритет шаблона указанного типа юнита для ИИ.
template_xp_reserve
????
Устанавливает XP, зарезервированный для AI, чтобы учитывать изменения шаблона.
equipment_design_priority
????
????
equipment_stockpile_surplus_ratio
????
Устанавливает прибавочную стоимость базового оборудования.
air_factory_balance
????
Изменяет заводское соотношение воздуха.
equipment_production_factor
<тип объекта>
Изменяет порядок производства оборудования для указанного типа юнита.
equipment_variant_production_factor
<оборудование>
Изменяет расположение производства варианта оборудования для указанного оборудования.
equipment_production_min_factories
<тип объекта>
Устанавливает минимальное заводское количество, необходимое для начала производства оборудования для указанного типа юнита.
ignore
<тег>
Подталкивает ИИ к игнорированию указанного тега.
area_priority
<область ии>
Поощряет военный ИИ нацеливаться на указанную область ИИ.
send_volunteers_desire
<тег>
Изменяет настрой ИИ на отправку добровольцев на указанный тег.
occupation_policy
<тег>
Определяет политику оккупации по отношению к указанному тегу.
support
<тег>
Изменяет настрой ИИ на поддержку указанного тега против партизан.
naval_avoid_region
<стратегический регион>
Изменяет режим избегания ИИ указанного стратегического региона военно-морскими силами.
prepare_for_war
<тег>
Подталкивает ИИ к планированию атаки для возможной войны с целью
save_equipment
<оборудование>
Заставляет ИИ сохранять оборудование указанного типа до установленного значения.
pp_spend_amount
<решение> <гарантия> <отношение> и т.д.
Устанавливает сумму, разрешенную для траты политической власти на указанное действие.
declare_war
<тег>
Подталкивает ИИ к объявлению войны указанному тегу.
ignore_army_incompetence
????
Устанавливает склонность ИИ игнорировать некомпетентность армии.
spare_unit_factor
????
Устанавливает коэффициент боевого резерва. Используется, чтобы побуждать ИИ отправлять больше юнитов для помощи на союзных фронтах, а не гарнизонировать свою территорию.
dont_join_wars_with
<тег>
Подвигает ИИ к отказу от защиты целевой страны, когда задействован указанный тег. Использует target_country
для определения целевой страны.
added_military_to_civilian_factory_ratio
????
Изменяет коэффициент соотношения количества военных и гражданских предприятий.
factory_build_score_factor
????
Изменяет расположение сборки ИИ для состояния. Используйте target
для определения целевого стейта
ignore_claim
<тег>
Устанавливает игнорирование ИИ претензий к указанному тегу. Принимает 1 как значение.
dockyard_to_military_factory_ratio
????
Изменяет соотношение верфей и военных заводов.
dont_defend_ally_borders
????
Подталкивает ИИ к отказу от защиты указанного союзника.
force_defend_ally_borders
????
???? "Не используется".
building_target
<здание>
Приказывает ИИ увеличивать количество <постройки>. Сюда входят те, которые уже находятся в собственности и приобретены торговлей (гражданский завод).
production_upgrade_desire_offset
<оборудование>
???? "Не используется".
force_build_armies
????
Заставляет ИИ строить армии
strike_force_home_base
<регион>
Приоритет портов региона для военно-морских операций
garrison_reinforcement_priority
????
Приоритет гарнизона
intelligence_agency_branch_desire_factor
????
????
intelligence_agency_usable_factories
????
????
Атрибуты ИИ:
allowed: (тип: AND триггер) Оценивается только один раз в начале игры, поэтому условия должны быть статическими (например,
tag = GER
илиis_historical_focus_on = yes
). Если запись не разрешена, она больше никогда не проверяется, поэтому это можно использовать для повышения производительности.enable: (тип: AND триггер) Включает запись (если abort также не является пустым и истинным).
abort: (тип: AND триггер) Если не пусто и истинно, отключает запись.
abort_when_not_enabled: (тип: да/нет, по умолчанию: нет) Если включено, запись будет отключена, когда
enable
станет false.ai_strategy: (тип: стратегия ИИ, может появляться несколько раз) стратегия ИИ, применяемая с этой записью
reversed: (тип: да/нет, по умолчанию: нет) использовать обратную семантику, как описано выше
enable_reverse: (тип: AND триггер) дополнительный триггер для страны-источника для передачи обратного триггера
target_array: (тип: переменная) Переменная массива, содержащая обратные цели, например
neighbors
,exiles
илиenemies
.target: (тип: список переменных) Список индивидуальных обратных целей, например
{ GER ENG FRA }
Шаблоны ИИ:
В /common/ai_templates
файлы определяют шаблоны, используемые роли, которые ИИ должен использовать.
Роли - это ядро системы шаблонов ИИ. Их можно создавать произвольно, что позволяет мододелам создавать собственные роли.
Каждый шаблон, назначенный роли, будет формировать группу для этой роли, а затем оценка пригодности каждого доступного шаблона используется для определения того, какой из них используется в определенный момент для конкретной роли.
В качестве примера, используем шаблон "средних танков - ОБТ" Economic Crisis:
armor_generic = { #<role_template_name>
#Блокирует шаблон для указанных тегов. По желанию.
blocked_for = {
# <tags>
}
#Ограничивает шаблон только указанными тегами. По желанию.
available_for = {
# <tags>
}
#Определяет фактические роли, которые покрывает шаблон.
roles = {
cat_heavy_tracked_vehicle
armor
}
#Определяет важность шаблона роли, высшая важность - роль, используемая AI.
upgrade_prio = {
factor = 2.17 # Базовый коэффициент
modifier = { # Изменяет модификатор базового фактора
factor = 7
OR = {
has_tech = medium_tank_t1
}
}
modifier = { # Можно использовать несколько раз.
factor = 2
has_tech = main_battle_tank_t3
}
}
#Определяет, какие существующие шаблоны включены в эту роль
match_to_count = 0.5
#Шаблон, который принадлежит этой роли. Для одного шаблона роли допускается несколько.
medium_tank_default = {
#Определяет важность шаблона среди других шаблонов, перечисленных в той же роли.
upgrade_prio = {
factor = 2
modifier = { factor = 1 }
}
#Определяет, какой шаблон ИИ назначит строке развертывания для роли. Побеждает наивысший балл.
production_prio = {
factor = 1
modifier = { factor = 1 }
}
can_upgrade_in_field = { # Определяет требование для обновления в поле
has_equipment = { medium_tank_equipment < 100 }
}
#custom_icon = <int> #В шаблоне не используется, можно убрать коммент
#reinforce_prio = <int> #В шаблоне не используется, можно убрать коммент
target_width = 18.0
width_weight = 1.0
column_swap_factor = 0.5
#Определяет веса для каждой характеристики этого шаблона.
#Порядок определяет, на какой стат влияет значение.
stat_weights = {
0.00 #-- default_morale
1.10 #-- defense
1.10 #-- breakthrough
0.60 #-- hardness
1.00 #-- soft_attack
0.00 #-- hard_attack
0.10 #-- recon
0.01 #-- entrenchment
0.10 #-- initiative
0.01 #-- casualty_trickleback
-0.05 #-- supply_consumption_factor
-0.01 #-- supply_consumption
0.00 #-- suppression
0.00 #-- suppression_factor
0.01 #-- experience_loss_factor
0.00 #-- equipment_capture_factor
0.00 #-- fuel_capacity
#-- Air Values
0.02 #-- air_attack
#-- Common Values
30.00 #-- max_organisation
0.80 #-- max_strength
2.0 #-- maximum_speed
0.20 #-- armor_value
0.05 #-- ap_attack
0.10 #-- reliability
0.10 #-- reliability_factor
0.00 #-- weight
0.00 #-- fuel_consumption
0.00 #-- fuel_consumption_factor
0.00 #-- strat_attack
0.00 #-- carrier_size
0.00 #-- acc_hot_gain
0.00 #-- acc_cold_gain
0.00 #-- build_cost_ic
}
target_template = {
weight = 0.9
match_value = 4000.0
support = {#Поддержка
airborne_support_company = 1
recon_battalion = 1
artillery = 1
}
regiments = {
medium_tank = 5
motorized = 4
}
}
allowed_types = { #Разрешенные типы
medium_tank
motorized
airborne_support_company
recon_battalion
artillery
}
replace_at_match = 0.4
replace_with = main_battle_tank_default
target_min_match = 0.5
}
#Можно объявить новый тип шаблона
}
Шанс ИИ
Обнаруженный во многих файлах, ai_will_do
- это элемент, который выдает число, которое ИИ использует при взвешивании решений. Функционально он очень похож на mean_time_to_happen
и использует ту же систему модификаторов, которая там описана. Однако у него другая интерпретация базы и фактора.
Обратите внимание, что интерпретация ИИ полученного числа не одинакова во всех случаях использования, но обычно выборка пропорциональна вероятности размеру.
base (Тип: переменная с заданной областью действия, по умолчанию: 1) Базовое значение вычисления до применения каких-либо модификаторов.
factor (Тип: число (с 3 десятичными знаками), по умолчанию: 1) Последний коэффициент, применяемый при вычислении.
Пример:
ai_will_do = {
base = 10.5 # также может быть переменной
# Если страна Германия, установите значение 0,
# вызывая раннее завершение оценки.
modifier = { tag = GER factor = 0 }
modifier = { is_major = yes add = 1 }
modifier = {
factor = 3
add = 2.5
tag = FRA
}
factor = 2
}
Результат: 0 для GER (10.5 0 = 0) 74 для FRA (((10.5 + 1) 3 + 2.5) 2 = 74) 23 для остальных мажоров ((10.5 + 1) 2 = 23) 21 для миноров (10.5 * 2 = 21)
ИИ мир
В /common/ai_peace
файлы управления ИИ при мирной конференции.
Существует пять типов мирного поведения:
гражданская война
демократичный
коммунист
фашист
по умолчанию
Есть пять базовых вариантов мира, а именно:
annex
liberate
puppet
take_states
force_government
Пример:
<type>_peace = {
# Определяет, когда этот мирный ИИ используется ИИ (ROOT берет, FROM дает)
enable = {
<triggers>
}
# Случайные факторы, применяемые к принятию решений ИИ при определении какой вариант мира использовать.
annex_randomness = <int>
liberate_randomness = <int>
puppet_randomness = <int>
take_states_randomness = <int>
force_government_randomness = <int>
# Взвешивание опциона. (ROOT берет, FROM дает)
<мирный вариант> = {
factor = <float>
<triggers>
modifier = {
factor = <float>
<triggers>
}
}
}
ИИ фокусы
Каждый фокус ИИ можно изменить с помощью соответствующего модификатора для конкретной страны, называемого ai_focus_<x>_factor
, который применяется после вычислений по умолчанию, указанных выше. Например, ai_focus_naval_air_factor = 0.5
добавляет 50% бонус к фокусу морской авиации страны.
Приоритет исследования В common/ai_focuses
файлы управления, сколько фокусы ИИ влияет на какие виды исследований и национальных фокусов.
Каждое имя фокуса может иметь постфиксный тег страны, чтобы сделать конкретную настройку фокуса для страны, например, ai_focus_aviation_GER
.
Пример:
<focus> = {
research = {
<technology category> = <weight>
}
}
Исторические фокусы Этот фокус не имеет значения, но ИИ будет следовать за национальными фокусами в указанном порядке, если включены исторические фокусы ИИ.
Чтобы добавить исторические национальные фокусы, вы добавляете ai_historical_focus_list_<tag>
, который содержит национальные фокусы, которым ИИ должен уделять приоритетное внимание. Эта система была в некоторой степени дополнена стратегическими планами ИИ, которые учитывают исторические списки фокусов, но также отклоняются от них, когда основные предположения нарушаются.
Пример:
ai_historical_focus_list_ <tag> = {
ai_national_focuses = {
<national focus>
}
}
Область ИИ
В /common/ai_areas
управления каталогов отнесений земельных провинций именованным областей ИИ. Они, в свою очередь, используются только стратегией ИИ, area_priority
описанной ниже. Каждая сухопутная провинция относится только к одной области ИИ. Используется первая совпадающая область. Нет необходимости назначать область ИИ каждой провинции земли, но неназначенные области не могут быть указаны в area_priority
стратегии. Область ИИ отображается во всплывающей подсказке отладки провинции.
Пример:
<название области> = {
# Используется для добавления континентов
continents = {
<continent>
}
# Используется для добавления определенных стратегических регионов
strategy_regions = {
<strategic region ids>
}
}
Планы ИИ
В /common/ai_strategy_plans
файлы определяют конкретное общего поведение ИИ для конкретных тегов, используемые для исторических планов по умолчанию.
Пример:
<strategy_plan> = {
name = <name> # Название плана
desc = <desc> # Описание плана
#Когда этот план включен.
enable = {
<triggers>
}
#Когда этот план отменен.
abort = {
<triggers>
}
#Определяет, на какой стране фокусируется ИИ первым в этом плане.
ai_national_focuses = {
<focus> # ИИ выбирает сверху вниз
}
#Определяет, какие категории технологий ИИ имеет вес в отношении/против во время этого плана.
research = {
<category> = <weight>
}
#Определяет, какие идеи ИИ имеет вес в отношении/против во время этого плана.
ideas = {
<idea> = <weight>
}
#Определяет, какие черты ИИ имеет вес в отношении/против во время этого плана.
traits = {
<trait> = <weight>
}
#Определяет стратегии ИИ для применения в этом плане.
ai_strategy = {
<strategy attributes>
}
#Определяет веса выбора для конкретных фокусов во время этого плана.
focus_factors = {
<focus> = <weight>
}
#Сохраняйте небольшие размеры , поскольку они используются как фактор для некоторых вещей (например, потребностей в исследованиях)
#Рекомендуется около 1.0. Полезно для связи между планами
weight = {
factor = 1.0
modifier = {
factor = 1.0
}
}
}
Last updated
Was this helpful?