> For the complete documentation index, see [llms.txt](https://paradoxmodding-ru.gitbook.io/modding/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://paradoxmodding-ru.gitbook.io/modding/rabota-s-ii/main.md).

# Введение в ИИ

{% hint style="danger" %}
**НЕ ДЛЯ НОВИЧКОВ**

Этот раздел рассчитан на опытных скриптеров, имеющие базовые познания в программировании ИИ.<br>
{% endhint %}

**Что стоит знать перед работой:**

* ИИ в HOI4 ***ужасен*** ~~убейте меня....~~ , хуже только работа с ним.<br>
* Вы **не можете** редактировать боевой ИИ, **вам это не позволено.**<br>
* ИИ **может игнорировать** коэфициенты выставленные вами.<br>
* ИИ **не умеет** видеть местность. Единственное что он видет - континент. <br>
* ИИ **нельзя задать** статическую покупку ресурсов, а значит, невозможно заскриптить стандартными методами.<br>
* ИИ **сам выстраивает** интерес к ресурсам базируясь на потребности в производстве техники. Если ресурс для техники не используется, значит он не нужен. Заскриптить самому невозможно. <br>

## Сущность стратегий ИИ:&#x20;

Сущноть стратегий содержит одну или несколько стратегий ИИ и определяет, когда и как они должны применяться. Когда страна проверяет сущность, она будет разрешена только в том случае, если `enable` она истинна, а `abort` пустая или ложная. Сущность отключается, если `abort` она не пуста и истинна. Он также отключается, если `abort_when_not_enabled` установлен и `enable` имеет значение `false`.<br>

Обращенная сущность работает совсем по-другому. сущность включается для страны-источника, если она указана как `id` в `ai_strategy` и `enable_reverse` пуста или истинна. Затем сущность проверяется на соответствие целям. Если `target_array` и/или `targets` установлен, они используются как возможные цели. В противном случае все страны используются в качестве возможных целей. `enable` и `abort` спусковые проверяются для каждой возможной цели. Если цель проходит эти проверки, все `ai_strategy` элементы записи включены для источника, но заменяются `id` на цель.<br>

## Стратегии ИИ:

Стратегический ИИ влияет на принятие решений в других компонентах ИИ по определенным стратегическим соображениям **(типы)**, которые также могут быть нацелены. Например, страна может быть стратегически заинтересована в защите другой страны, независимо от текущих дипломатических отношений и статуса альянса. Или он может захотеть произвести больше единиц определенного типа.<br>

С точки зрения структуры, стратегия AI имеет только четыре атрибута: `type`, `value`, `id`, и `target`. Только некоторые типы используют `id` и/или `target`. Все четыре атрибута по своей сути являются целыми числами, но если они `type` указаны первым, `id` атрибут может ссылаться на соответствующие значения по имени. `target_country` это еще один способ установить `target`. Он принимает индекс страны или тег и в обоих случаях проверяет, относится ли он к допустимой стране.<br>

ИИ сам создает динамические стратегии, но можно добавлять и статические. Статические стратегии в первую очередь определяются с помощью записи стратегии ИИ в `Hearts of Iron IV/common/ai_strategy` или плана стратегии ИИ. Черты лидера страны (в `/common/country_leader`) могут нести стратегии ИИ, которые активируются, когда соответствующий человек становится правителем. Индивидуальные стратегии также могут быть добавлены напрямую с помощью эффекта `add_ai_strategy` (например, в случае событий, национальных фокусов и тд. и тп).<br>

Эффективные стратегии ИИ страны сохраняются в файлах сохранения как `ai` атрибут страны.<br>

### Типы:

Так как скриптеры ИИ обращаются к списку стратегиям очень часто, значит и разумнее их выставить наверх.\
&#x20;При определении `ai_strategy` тип определяет, какой аспект стратегии ИИ изменяется. Дополнительные ai\_strategy от LaR можно найти в `/common/ai_strategy/default.txt`<br>

| Тип                                           | 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` файлы определяют шаблоны, используемые роли, которые ИИ должен использовать.\
&#x20;Роли - это ядро системы шаблонов ИИ. Их можно создавать произвольно, что позволяет мододелам создавать собственные роли.\
&#x20;Каждый шаблон, назначенный роли, будет формировать группу для этой роли, а затем оценка пригодности каждого доступного шаблона используется для определения того, какой из них используется в определенный момент для конкретной роли.<br>

В качестве примера, используем шаблон "средних танков - ОБТ" 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` и использует ту же систему модификаторов, которая там описана. Однако у него другая интерпретация базы и фактора.<br>

Обратите внимание, что интерпретация ИИ полученного числа не одинакова во всех случаях использования, но обычно выборка пропорциональна вероятности размеру.<br>

* base\
  &#x20;*(Тип: переменная с заданной областью действия, по умолчанию: 1)* Базовое значение вычисления до применения каких-либо модификаторов.
* factor\
  &#x20;*(Тип: число (с 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)*\
&#x20;*74 для FRA (((10.5 + 1)* 3 + 2.5) *2 = 74)*\
&#x20;*23 для остальных мажоров ((10.5 + 1)* 2 = 23)\
&#x20;21 для миноров (10.5 \* 2 = 21)<br>

## ИИ мир

В `/common/ai_peace` файлы управления ИИ при мирной конференции.\
&#x20;Существует пять типов мирного поведения:<br>

* гражданская война<br>
* демократичный<br>
* коммунист<br>
* фашист<br>
* по умолчанию<br>

  Есть пять базовых вариантов мира, а именно:<br>
* annex<br>
* liberate<br>
* puppet<br>
* take\_states<br>
* force\_government<br>

Пример:

```
<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% бонус к фокусу морской авиации страны.\
&#x20;*Приоритет исследования* В `common/ai_focuses` файлы управления, сколько фокусы ИИ влияет на какие виды исследований и национальных фокусов.\
&#x20;Каждое имя фокуса может иметь постфиксный тег страны, чтобы сделать конкретную настройку фокуса для страны, например, `ai_focus_aviation_GER`.\
&#x20;Пример:

```
<focus> = {
    research = {
        <technology category> = <weight>
    }
}
```

*Исторические фокусы* Этот фокус не имеет значения, но ИИ будет следовать за национальными фокусами в указанном порядке, если включены исторические фокусы ИИ.\
&#x20;Чтобы добавить исторические национальные фокусы, вы добавляете `ai_historical_focus_list_<tag>`, который содержит национальные фокусы, которым ИИ должен уделять приоритетное внимание. Эта система была в некоторой степени дополнена стратегическими планами ИИ, которые учитывают исторические списки фокусов, но также отклоняются от них, когда основные предположения нарушаются.\
&#x20;Пример:

```
ai_historical_focus_list_ <tag> = { 
    ai_national_focuses = { 
        <national focus> 
    } 
}
```

## Область ИИ

В `/common/ai_areas` управления каталогов отнесений земельных провинций именованным областей ИИ. Они, в свою очередь, используются только стратегией ИИ, `area_priority` описанной ниже. Каждая сухопутная провинция относится только к одной области ИИ. Используется первая совпадающая область. Нет необходимости назначать область ИИ каждой провинции земли, но неназначенные области не могут быть указаны в `area_priority` стратегии. Область ИИ отображается во всплывающей подсказке отладки провинции.\
&#x20;Пример:

```
<название области> = { 
    # Используется для добавления континентов 
    continents = { 
        <continent> 
    } 

    # Используется для добавления определенных стратегических регионов 
    strategy_regions = { 
        <strategic region ids> 
    } 
}
```

## Планы ИИ

В `/common/ai_strategy_plans` файлы определяют конкретное общего поведение ИИ для конкретных тегов, используемые для исторических планов по умолчанию.<br>

Пример:

```
<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 
        } 
    } 
}
```
