гайд Гайд по модификации поведения ИИ
Лучшие авторы в этой теме
-
Lazarka 3 сообщений
-
Али Гарх 1 сообщение
-
___svb___ 1 сообщение
-
MrBorC 1 сообщение
-
Канцлер Шольц 1 сообщение
-
AlexMercerIV 1 сообщение
Популярные дни
Популярные сообщения

Lazarka
Оригинальная статья находится здесь: Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. Здесь будет не просто перевод, но и пояснения как это применяется на практике, с конкретными примерами. Разделы
Али Гарх
Идея хорошая. Можно начать с простого, с обучения ИИ делать котлы. Потом прогнать обученный ИИ в сингле, определить слабые места и сделать его лучше.
-
Сейчас на странице 0 пользователей
- Нет пользователей, просматривающих эту страницу
-
Модераторы онлайн
- alexis
Рекомендованные сообщения
Оригинальная статья находится здесь: Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое.
Здесь будет не просто перевод, но и пояснения как это применяется на практике, с конкретными примерами.
Разделы и папки отвечающие за поведении ИИ, как отдельных стран, так и всех сразу:
ai_areas - названия областей включающих в себя список регионов, которые используются для приоретизации размещения войск для ИИ.
ai_equipment - шаблоны для проектировки кораблей, и приоритеты для разных стран, какие чаще использовать.
Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. - приоритеты для последовательности изучения технологий.
ai_peace - поведение ИИ во время мирных конференций, предпочтения - аннексировать, сделать марионеткой, забрать регион и т.д.
Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. - общая стратегия оказывающая влияние на множество аспектов (подробнее ниже)
ai_strategy_plans - последовательность изучения нац.фокусов, технологий и приоритеты для советников, и других идей (призыв,экономика, конструктор)
ai_templates - шаблоны армии каким ИИ будет отдавать приоритет.
Также не забываем про файл defines, где также существует множество параметров отвечающих за общее поведение ИИ.
AI_strategy подробно:
Общая структура: примеры можно найти в common/ai_strategy
GER_industry_we_are_the_baddies = { # название любое задаем произвольно (без пробелов)
allowed = { # указываем тэг страны, для которой будет доступна стратегия. Ничего другого кроме страны здесь указывать нельзя
original_tag = GER
}
enable = { # условия когда эта стратегия станет активной. Германия будет придерживаться этой стратегии после заданной даты. Условия могут быть и любыми другими. Полный список условий(триггеров) можно посмотреть здесь: Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое.
date > 1937.8.1
}
abort={ # условия когда эта стратегия деактивируется
date > 1940.1.1
}
ai_strategy = { # собственно сама стратегия. В конкретном случае Германия после 1937 года будет желать построить больше военных заводов, по отношению к количеству гражданских фабрик
type = added_military_to_civilian_factory_ratio
value = 50
}
ai_strategy = { # увеличение кол-ва заводов используемых для производства самолетов
type = air_factory_balance
value = 100
}
# можно указать сколько угодно много дополнительных стратегий
}
Для уменьшения объема текста я буду использовать сжатую конструкцию, также можно использовать и в самом коде:
ai_strategy = { type = added_military_to_civilian_factory_ratio value = 50 }
Строительство:
added_military_to_civilian_factory_ratio - соотношение военных заводов к гражданским фабрикам
ai_strategy = { type = added_military_to_civilian_factory_ratio value = 50 }
dockyard_to_military_factory_ratio - соотношение верфей к военным заводам
ai_strategy = { type = dockyard_to_military_factory_ratio value = 50 }
building_target - задать цель построить определенное кол-во зданий(включая те что уже есть)
ai_strategy = { type = building_target id = arms_factory value = 20 }
полный список зданий находится здесь: Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое.
build_building - построить здания в указанной области или провинции (target) и до какого уровня(value)
ai_strategy = { type = build_building id = naval_base target = 13003 value = 8 }
factory_build_score_factor - задаем приоритет на постройку фабрик в указанном стейте(области)
ai_strategy = { type = factory_build_score_factor target = 613 value = 300 }
target = 613, это номер стейта, (Нанкин, Китай)
Производство:
air_factory_balance - бонус к кол-ву военных заводов задействованных для производства авиации, в соотношении с сухопутным производством
ai_strategy = { type = air_factory_balance value = 50 }
equipment_production_factor <unit type> - приоритет для производства определенного снаряжения
например если мы не хотим(отрицательное значение) что бы первые два года страна производила тактические бомбардировщики
ai_strategy = { type = equipment_production_factor id = tactical_bomber value = -30 }
equipment_variant_production_factor <equipment> - приоритет для производства определенного снаряжения
Похоже на equipment_production_factor, только применяется к более конкретным типам снаряжения.
Не просто к истребителям, а к истребителям к первого, второго или третьего поколения?
ai_strategy = { type = equipment_variant_production_factor id = fighter_equipment_1 value = 50 }
equipment_production_min_factories <unit type> - задать минимальное количество заводов используемых для производства определенного снаряжения
Например если у нас есть 10 заводов (num_of_military_factories > 9), и мы хотим чтобы как минимум два завода было задействовано в производстве истребителей
ai_strategy = { type = equipment_production_min_factories id = fighter value = 2 }
production_upgrade_desire_offset <equipment> - желание производить более новое снаряжение, если оно уже исследовано.
Например такое прописано для СССР, что бы они не спешили производить новые винтовки, потому что предыдущие производить дешевле,
а у СССР много МП который нужно укомплектовать.
ai_strategy = { type = production_upgrade_desire_offset id = infantry_equipment_2 value = -100 }
equipment_stockpile_surplus_ratio - объемы запасов снаряжения на складах, в % соотношении с количеством снаряжения на поле боя
например если у нас есть 100000 винтовок в дивизиях, то ИИ будет стремиться иметь запас в 10%(10000) винтовок на складе, прежде чем захочет вербовать новые дивизии
ai_strategy = { type = equipment_stockpile_surplus_ratio value = 10 }
save_equipment <equipment> - если мы хотим чтобы ИИ стремился иметь запас конкретного снаряжения на складе. Например 500 винтовок. И пока этого запаса нет, новые дивизии не будут вербоваться.
ai_strategy = { type = save_equipment id = infantry_equipment value = 501 }
role_ratio <unit role> - это % соотношение юнитов какое должно быть в армии. Оказывает прямое влияние на производство.
ai_strategy = { type = role_ratio id = naval_capital_bc value = -100 } # меньше линкоров
ai_strategy = { type = role_ratio id = naval_carrier value = 25 } # больше авианосцев
ai_strategy = { type = role_ratio id = infantry value = 100 } # больше пехоты
ai_strategy = { type = role_ratio id = armor value = -10 } # меньше танков
unit_ratio <unit_type> - принцип тот же что и role_ratio, применимо в основном для производства авиации.
ai_strategy = { type = unit_ratio id = fighter value = 100 } # больше истребителей
ai_strategy = { type = unit_ratio id = strategic_bomber value = -10 } # меньше стратегических бомбардировщиков
force_build_armies - Заставить ИИ вербовать больше дивизий. Например для подготовки Китая к войне с Японией.
ai_strategy = { type = force_build_armies value = 100 }
ignore_army_incompetence - Разворачить армию до того как её подготовка завершена на 100%.
ai_strategy = { type = ignore_army_incompetence value = 100 }
template_prio <unit_type> - изменить приоритет для использования определенных шаблонов в дивизиях.
ai_strategy = { type = template_prio id = infantry value = 100 } больший приоритет для шаблонов с преобладанием пехоты
ai_strategy = { type = template_prio id = light_armor value = 30 }
Дипломатия:
befriend<tag> - заставляет ИИ быть более дружелюбным по отношению к определенной стране. Не начинать оправдание цели войны, акцептировать дипло запросы и т.д.
ai_strategy = { type = befriend id = "GER" value = 1000 } # дружить с Германией
antagonize<tag> - заставляет ИИ быть более агрессивно настроенным по отношению к определенной стране.
ai_strategy = { type = antagonize id = "GER" value = 1000 }
в таком сочетании ИИ гарантированно начнет оправдывать цель войны против заданной страны и начнет войну по завершении оправдания.
ai_strategy = { type = befriend id = "GER" value = -1000 }
ai_strategy = { type = antagonize id = "GER" value = 1000 }
alliance<tag> - побуждает ИИ присоединиться к альянсу возглавляемому этой страной или пригласить в свой альянс.
ai_strategy = { type = alliance id = "GER" value = 1000 }
contain<tag> - дословно сдерживать. Предпринимать дипломатические шаги направленных на сдерживание агрессивной экспансии указанной страны, например если Япония начинает оправдывать цель войны против Индии, то США стремятся гарантировать её независимость, а если война уже идет, то они будут стремится посылать лендлиз в страны воюющие против Японии.
ai_strategy = { type = сontain id = "JAP" value = 1000 }
ignore<tag> - ИИ будет всячески игнорировать эту страну. Например не объявит ей войну, даже если у него уже есть клайм, и не будет распологать войска возле границ с этой страной и вообще не будет придпринимать никаких положительных/отрицательных действий в отношении этой страны, как будто её не сущетсвует.
ai_strategy = { type = ignore id = "CZE" value = 1000 }
consider_weak<tag> - Япония будет считать Китай слабым, и не будет боятся объявить войну, даже если у неё меньше дивизий.
ai_strategy = { type = consider_weak id = "CHI" value = 1000 }
ignore_claim<tag> - ИИ не будет объявлять войну указанной стране, даже если у него уже есть клайм, полученный через фокус например.
Принимает значение 1(правда)
ai_strategy = { type = ignore_claim id = "CZE" value = 1 }
protect<tag> - побуждает ИИ гарантировать независимость указанной страны.
ai_strategy = { type = protect id = "POL" value = 1000 }
support<tag> - ИИ помогает в случае гражданской войны.
ai_strategy = { type = support id = "SAF" value = 1000 }
send_volunteers_desire <tag> - повышает желание отправить добровольцев в указанную страну.
ai_strategy = { type = send_volunteers_desire id = "ENG" value = 1000 }
send_lend_lease_desire <tag> - повышает желание помочь ленд-лизом указанной стране.
ai_strategy = { type = send_lend_lease_desire id = "ENG" value = 1000 }
diplo_action_desire id = <tag>, target = <diplomatic action type> -
повышает или понижает желание выполнить те или иные дипломатические действия.
ai_strategy = { type = diplo_action_desire id = SOV target = military_access value = -5000 } # предоставить проход войск
ai_strategy = { type = diplo_action_desire id = SOV target = docking_rights value = -5000 } # предоставить доступ на стоянку в портах
ai_strategy = { type = diplo_action_desire id = POL target = guarantee value = 5000 } # гарантировать независимость
ai_strategy = { type = diplo_action_desire id = SOV target = declare_war value = 5000 } # объявить войну
ai_strategy = { type = declare_war id = "SOV" value = 1000 } # объявить войну
ai_strategy = { type = diplo_action_desire id = ENG target = improve_relation value = 5000 } # улучшить отношения
ai_strategy = { type = diplo_action_desire id = ENG target = call_allies value = 5000 } # призвать к оружию союзников
ai_strategy = { type = diplo_action_desire id = ENG target = join_allies value = 5000 } # присоединиться к войне союзников
diplo_action_acceptance id = <tag>, target = <diplomatic action type> -
Желание ИИ акцептировать дипломатические запросы от других стран.
ai_strategy = { type = diplo_action_acceptance id = BUL target = join_allies value = -99999 } # если Болгария зовет нас на помощь, - мы морозимся
dont_join_wars_with id = <tag>, target_country - не присоединятся к войне указанного союзника, против указанного врага
ai_strategy = { type = dont_join_wars_with id = "ENG" target_country = "SOV" value = 99999 }
Война. Управление дивизиями и флотом. Батлпланы.
area_priority Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. - приоретизация регионов куда ИИ будет стремиться направить больше флотов и армий.
Списки регионов находятся в common/ai_areas. Можно создавать собственные списки.
ai_strategy = { type = area_priority id = sea_around_japan value = -100 }
ai_strategy = { type = area_priority id = europe value = 100 }
strike_force_home_base <region> - приоритезация регионов с портами для морских операций
ai_strategy = { type = strike_force_home_base id = 105 } # 105 region ID - Пёрл Харбор
naval_mission_threshold <mission type> - приоритезация видов морских операций
ai_strategy = { type = naval_mission_threshold id = "MISSION_PATROL" value = 20000 } # Патрулирование
ai_strategy = { type = naval_mission_threshold id = "MISSION_STRIKE_FORCE" value = 20000 } # Ударное соединение
ai_strategy = { type = naval_mission_threshold id = "MISSION_CONVOY_ESCORT" value = 20000 } # Сопровождение конвоев
ai_strategy = { type = naval_mission_threshold id = "MISSION_CONVOY_PLANTING " value = 20000 } # Охота на конвои
ai_strategy = { type = naval_mission_threshold id = "MISSION_NAVAL_INVASION_SUPPORT" value = 20000 } # Поддержка морского вторжения
naval_avoid_region <strategic region> - избегать указанный морской регион(боевые корабли и конвои)
ai_strategy = { type = naval_avoid_region id = 51 value = 10000 }
prepare_for_war<tag> - Подготовиться к войне. ИИ приготовит баттлплан против указанной страны раньше времени.
ai_strategy = { type = prepare_for_war id = "ROM" value = 1000 }
invade<tag> - Морской десант. Вторгаться или не вторгаться с моря в указанную страну.
ai_strategy = { type = invade id = "ENG" value = -1000 }
conquer<tag> - Завоевать указанную страну.
ai_strategy = { type = conquer id = "CZE" value = 1000 }
front_armor_score<tag> - кол-во брони необходимое задействовать на фронте с указанной страной
ai_strategy = { type = front_armor_score id = "POL" value = 100 } # больше танков на фронт с Польшей
ai_strategy = { type = front_armor_score id = "FRA" value = -100 } # меньше танков на фронт с Францией
occupation_policy <tag> - Определяет оккупационную политику в отношении указанной страны. Значения 0-3
ai_strategy = { type = occupation_policy id = "HOL" value = 3 }
garrison <integer> (scale of 100) - процент от общего кол-ва войск который должен быть задействован для обороны внутренней территории
ai_strategy = { type = garrison value = -50 } # США не держит дома много войск, если состоит в союзе с ВБ и если нет войны с Канадой или Мексикой.
dont_defend_ally_borders <tag> - ИИ не будет распологать свои войска вдоль фронтов указанного союзника.
ai_strategy = { type = dont_defend_ally_borders id = "ITA" value = 100 }
spare_unit_factor - Отправлять больше войск на фронты своих союзников, нежели чем на оборону собственной территории.
ai_strategy = { type = spare_unit_factor value = 100 }
Теперь более точечное управление войсками:
put_unit_buffers. ИИ расположит заданное кол-во войск в указанных регионах, которые могут быть использованны для военных операций в этих регионах или просто как гарнизоны/оборона территории.
ai_strategy = {
type = put_unit_buffers
# процент от общего кол-ва всех войск, который будет задействован в этом приказе (0.4 - 40%)
ratio = 0.4
# можно указать ID приказа. Если несколько приказов будут иметь одинаковы ID, то они будут использовать один и тотже процент армии.
order_id = 2
# номера стейтов где следует расположить войска (если хотя бы один из стейтов не принадлежит стране, то приказ не активируется)
states = {
125
126
127
}
# регионы в которых могут быть задействованны войска из этого приказа. Если у вас там будет фронт или высадка, то войска из этого гарнизона будут # задействованы на фронте(только если вы разрешите ниже)
area = europe
area = asia
# разрешить использовать войска из этого гарнизона(буфера) для фронтов или для десантных операций?
subtract_invasions_from_need = yes # запретить брать отсюда войска для морского десанта
subtract_fronts_from_need = no # разрешить задействовать войска из этого гарнизона для фронтовых операций (в указанных выше регионах(area))
}
ai_strategy = {
type = put_unit_buffers
ratio = 0.2
order_id = 1
states = { 125 126 127 }
area = europe
area = asia
subtract_invasions_from_need = no
subtract_fronts_from_need = no
}
front_unit_request / invasion_unit_request - используется для увелечения/уменьшения кол-ва юнитов задействованных на фронте/десанте
ai_strategy = {
# использовать один из них:
type = front_unit_request
type = invasion_unit_request
#invasions will check invasion target, fronts will check provinces at front
tag = GER # province of a specific country
state = 42 # province on a state
strategic_region = 65 # province on a strategic region
area = europe # province on a specific ai area
country_trigger = { always = no } # a trigger to check agaisnt a specific country. scope is enemy country from scope is our country
state_trigger = { always = no } # a trigger to check agaisnt a state. scope is state. from scope is enemy country from.from scope is our country
value = 40 # will be added as a factor over regular requests
}
примеры использования
ai_strategy = { # ИИ не будет создавать никаких фронтов вдоль границ с указанными странами, если они также управляются ИИ, а не являются игроком.
type = front_unit_request
country_trigger = {
is_ai = yes
OR = {
tag = CHI
tag = XSM
tag = PRC
tag = YUN
tag = GXC
tag = SHX
}
}
value = -1000
}
ai_strategy = {
type = front_unit_request
state_trigger = {
OR = {
region = 143
region = 144
}
NOT = { state = 597 }
}
value = 1000
}
ai_strategy = {
type = front_unit_request
# norway
state = 110
state = 142
state = 143
state = 144
value = -1000
}
ai_strategy = { type = front_unit_request state = 28 value = 50 } # расположить больше юнитов перед линией Мажино
ai_strategy = { type = front_unit_request tag="POL" value = -200 } #никаких фронтов на границе с Польшей
ai_strategy = { type = inavasion_unit_request tag="ENG" value = -200 } #никаких десантов в Англию
ai_strategy = { #никаких морских вторжений ни в одну из стран
type = invasion_unit_request
country_trigger = { always = yes }
value = -100
}
front_control - используется для регулирования морских вторжений или фронтов
#ai_strategy = {
# type = front_control
#
# #you can define a target in following ways. you can define more than one
#
# tag = GER # target against a specific country
# state = 42 # target on a state
# strategic_region = 65 # target on a strategic region
# area = europe # target on a specific ai area
# country_trigger = { always = no } # a trigger to check agaisnt a specific country. scope is enemy country from scope is our country
# state_trigger = { always = no } # a trigger to check agaisnt a state. scope is state. from scope is enemy country from.from scope is our country
#
# ratio = 0.7 # стратегия активируется если у нас достаточно войск чтобы закрыть хотя бы 70% длины фронта
#
# priority = 0 # default 0, higher prio strats will override lower # если активируется приказ с высшим приоритетом, то этот будет игнорироваться
# ordertype = front # front or invasion. if set this strategy will only apply to that specific order type # фронт или морской десант
# execution_type = careful # one of careful balanced rush rush_weak. if set will override the execution type of front (only for front orders)
# execute_order = yes # yes or no. if set will override execute or not decision of front
# manual_attack = yes # default yes. if no ai will not do manual pokes at enemy (only for front orders)
#}
Примеры использования
ai_strategy = {
type = front_control
tag = "FRA"
priority = 1
ordertype = front # front or invasion
execution_type = rush # one of careful balanced rush rush_weak (осторожно, сбалансированно, агрессивно, прорыв)
execute_order = yes # испольнять приказ или нет, если нет то просто будут стоять в обороне
manual_attack = yes # точечные атаки, если нет, то ИИ не будет совершать никаких отдельных атак, кроме батлплана (да да ИИ тоже умеет ручками)
}
ai_strategy = {
type = front_control
area = europe
ordertype = invasion
execute_order = yes
}
Пример того как США и ВБ синхронизируют морские вторжения в Европу.
USA_ENG_sync_invasions_on_europe = {
allowed = {
OR = {
tag = USA
tag = ENG
}
}
# only allow invasion on europe on every third month
enable = {
set_temp_variable = { days = global.num_days }
modulo_temp_variable = { days = 90 }
check_variable = { days < 60 }
}
abort_when_not_enabled = yes
ai_strategy = {
type = front_control
area = europe
ordertype = invasion
execute_order = no
}
}
AI_strategy семантика:
SOV_dont_upgrade_to_weapons_2_too_early = {
allowed = { original_tag = SOV } # allowed ипользуется для уменьшения нагрузки на производительность. То что написано здесь проверяется только один раз сразу после запуска игры. Поэтому здесь можно указывать только статические условия, например tag = GER или
is_historical_focus_on = yes
enable = {
date < "1943.1.1" # До 43-го
}
abort_when_not_enabled = yes # когда стратегия перестанет соответствовать условиям прописанным в enable, то она перестанет выполняться.
# В противном случаем, если не указано abort_when_not_enabled и нет никаких условий в abort = { }, то стратегия будет выполняться вечно, даже после 43-го года.
# до 43-го производим больше дешевых винтовок, потому что у нас есть много МП
ai_strategy = { type = production_upgrade_desire_offset id = infantry_equipment_2 value = -100 }
}
SOV_dont_mess_with_volunteers_for_european_democratic_nations = { # Reverse strategy
# Если мы хотим что бы стратегия прописанная здесь, для Сов.Союза, применялась им к большему кол-ву стран, и не указывать тэг каждой страны явно, то мы используем reversed
reversed = yes
allowed = { original_tag = SOV }
enable = { # тригер для активации данной стратегии. Так как мы используем reversed, то условия проверяются по отношению к другим странам
has_government = democratic # если в стране есть демократический режим
SOV = { has_government = communism } # если в Сов.Союзе коммунизм
NOT = { original_tag = SPR } # и если эта страна не является Испанией
capital_scope = { is_on_continent = europe } # и если столица этой страны находится в Европе
}
abort_when_not_enabled = yes
# то Сов. Союз не изъявит желания отправить в эту страну(которая прошлая условия в enable) волонтеров
ai_strategy = { type = send_volunteers_desire id = "SOV" value = -500 }
}
Опубликовано Lazarka,
Закреплено StrаtegiumПрисоединиться к обсуждению
Вы можете оставить комментарий уже сейчас, а зарегистрироваться позже! Если у вас уже есть аккаунт, войдите, чтобы оставить сообщение через него.