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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://paradoxmodding-ru.gitbook.io/modding/rabota-s-ii/main.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
