Введение в ИИ

НЕ ДЛЯ НОВИЧКОВ

Этот раздел рассчитан на опытных скриптеров, имеющие базовые познания в программировании ИИ.

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

  • ИИ в 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