Улучшаем поведение ИИ - Легко! - Моды и моддинг - Strategium.ru Перейти к содержимому

Улучшаем поведение ИИ - Легко!

Рекомендованные сообщения

Lazarka

Было у меня желание написать свой мод, по улучшению поведения ИИ, оно и сейчас есть, но я понимаю что у меня абсолютно нет времени этим заниматься, даже несмотря на то что я безумно этого хочу.
Поэтому я решил поделиться тем, в чём мне удалось разобраться, возможно у кого то есть больше возможностей и данная информация поможет сэкономить время, чтобы не разбираться самому.
Здесь не будет базовой информации, типо как создавать мод, но перейдем сразу к рассмотрению файлов которые отвечают за поведении ИИ, и определимся с тем, - что мы можем, чего не можем, и как это лучше сделать.
Мы рассмотрим все аспекты, начиная от строительства зданий, дипломатии, воин, принятия законов и всего, что необходимо для того чтобы например заставить ИИ США или любой другой страны,
- стать супер страной, с мега показателями ВВП, и составить достойную конкуренцию игроку.

Сейчас мы не рассматривает настройки ИИ которые есть в defines, и которые отвечают за поведение ИИ абсолютно всех стран. Т.е. меняя значения в defines, мы меняем поведения сразу всех стран,
но мы хотим научится менять поведении ИИ конкретной страны, не затрагивая другие страны.

 

Файлы которые отвечают за поведении ИИ находятся в common/ai_strategies.
Здесь 4 файла. (скрин вставить)


Один общий, называется 00_default_strategy, стратегии прописанные здесь применимы ко всем странам сразу.
И три дополнительных файла:
01_admin_strategies отвечает за строительство зданий, импорт и экспорт, налоги.
02_diplomatic_strategies отвечает за дипломатию, с кем дружить, кого любить, на кого нападать, а также какие цели преследовать, например сделать марионеткой, или аннексировать или отнять область.

03_political_strategies отвечает за принятие законов.

 

То что прописано в admin, political, diplomatic перемножается, а иногда складывается с теми цифрами что уже есть в 00_default_strategy.

admin, political, diplomatic, - какая стратегия сейчас используется конкретной страной, мы можем это увидеть прямо в игре, нажав на страну (сделать скрин)

 

Здесь настраиваем: что и когда строить, налоги, политику импорта и экспорта

Спойлер

По аналогии с файлом 01_admin_strategies мы можем создать свой файл и придумать ему название, например 10_IAI_admin_strategies.

Далее прописываем саму стратегию и разбираемся что к чему:


ai_admin_strategy_iai_1_jap_1836 = { #<придумываем оригинальное название
    icon = "gfx/interface/icons/ai_strategy_icons/resource_expansion.dds" # картинка, которая будет отображаться в профиле страны
    type = administrative    # здесь задаем тип стратегии (administrative/diplomatic/politic). тип отвечает только за то в какой ячейке профиля страны будет отображаться стратегия.
    desired_tax_level = very_high  #желаемый уровень налогов very_low/low/medium/high/very_high
    max_tax_level = very_high #максимально допустимый уровень налогов
    min_tax_level = very_high #минимально допустимый уровень налогов

    building_group_weights = { # приоритеты для постройки зданий. Есть какие то базовые значения(они нам не известны или есть в defines),
    # то что мы пишем тут, работает addictively(т.е. не множитель, а сложение), цифры тут суммируются с базовыми значениями (но это не точно)

        bg_iron_mining = 80.0 # если мы хотим что бы ИИ сконцентрировался на постройке железных шахт bg_iron_mining поднимаем значение до 80.0.
        # Какое именно значение установить 50, 80, 100 или 1000, нужно смотреть на деле, запускаем игру, в консоли пишем Observe,
        # и наблюдаем строит ли ИИ нужное нам количество шахт или нет, и соответственно уменьшаем или увеличиваем.

        bg_tools_industry = 80.0 # инструменты
        bg_ships_industry = 60.0 # верфи
        bg_paper_industry = 40.0 # бумага
        bg_logging = 20.0 # дерево
        bg_light_industry = 0.5 # легкая индустрия (група объединяющая несколько зданий(бумага, инструменты, еда и др.))
        
        bg_construction = 0.5 # строительный сектор
        bg_public_infrastructure = 1.1 # порты
        
        # приоритет строительства некоторых зданий всегда выше чем других
        # например если bg_government = 1.0 а bg_iron_mining = 80.0,
        # то ИИ всёравно будет строить Правительственные здания, пока ему кажется что их нехватет, и он не обращает внимание на то что у нас  bg_iron_mining = 80.0
        # пока не удовлетворит дефицит правительственных зданий. Потому если мы хотим, в какой то период времени, полностью запретить строительство Казарм, Морских Баз, Университетов и    Правительственных зданий,
        # то мы задаем здесь отрицательные значения. Также всё проверяется путем прогонок в режиме наблюдения, насколько занизить или повысить эти значения
.
        bg_technology = -2.0 # университеты
        bg_government = -0.2 # правительственные здания
        bg_army = -2.0 # казармы
        bg_navy = -2.0  #  морские базы

        # полный список групп bg_ зданий мы можем найти в папке common/building_groups
        # но здесь есть ньюанс, не для каждого здания есть своя группа

# например есть группа bg_light_industry которая объединяет в себе инструменты, бумагу, еду и другое
# но мы хотим что бы ИИ сконцентрировался именно на строительстве инструментов сейчас, не повышая при этом приоритет бумаги и всего остального.

#для этого нам нужно создать новую группу
# название придумываем сами, например bg_tools_industry, там пишем что эта группа пошла от bg_light_industry ,

bg_tools_industry = {
    parent_group = bg_light_industry
    default_building = building_tooling_workshops - название которое мы берем из папки buildings
}
# и в папке buildings, в самом здании(инструменты находятся в файле 01_industry) пишем, что теперь оно принадлежит не к группе bg_light_industry ,

#  а к нашей новой конкретной группе bg_tools_industry

building_tooling_workshops = {
    building_group = bg_tools_industry < здесь меняем группу на нашу
    texture = "gfx/interface/icons/building_icons/tooling_workshops.dds"
    ....

    ....
}


# и теперь здесь мы можем использовать это bg_tools_industry и задавать ему значения которые нам нужны:  bg_tools_industry  = 80.0    
    }
    
    goods_stances = {
        # здесь задаем политику для экспорта и импорта,
        grain = { stance = wants_export } # значит ИИ выберет политику экспорт без пошлин
        tools = { stance = wants_high_supply } # обеспечить внутренне потребление = высокие налоги на экспорт
        clippers = { stance = wants_high_supply }
        iron = { stance = wants_high_supply }
        lead = { stance = wants_high_supply }
        wood = { stance = wants_high_supply }
        hardwood = { stance = wants_high_supply }
        sulfur = { stance = wants_high_supply }            
    }

    # если мы хотим чтобы ИИ построил больше зданий строительного сектора,
    # то добавляем в нашу стратегию  wanted_construction_sector_levels

    wanted_construction_sector_levels = {
        value = 0 
        add = { # +1 здание за каждые 2 миллиона ВВП
            value = gdp
            divide = 2000000                            
        }    

        add = { # + 1 здание за каждые 2 миллиона населения
            value = total_population
            divide = 2000000    
        }   
        if = { # тут можно добавить каки то условия, например,
               #если у нас принят закон Традиционализм, то умножаем значения полученые выше на 0.75

            limit = { has_law = law_type:law_traditionalism }
            multiply = 0.75
        } # эти условия проверяются только один раз, при смене стратегии. Например сейчас у ИИ нет закона традиционализм,
        # а потом он появился, то это условие не срабатfет, пока ИИ не сменит стратегию. лучше перезначать стратегию в ивентах, используя команду set_strategy, но об этом позже.

        min = 1
        max = 100
    }
    
    # Тоже самое работает для казарм и морских баз
    # How many levels of barracks should the AI have
    # Using this value in other strategies will function additively

    wanted_army_size = {
        value = 0
        # На основе ВВП
        add = {
            value = gdp
            divide = 100000 # 1 level of barracks per 100k incorporated population    
            
            max = 10 # но не больше +10 от ВВП
        }            
    }        
    wanted_navy_size = { } # здесь для флота пишем условия. Опять же, если мы не хотим увеличивать флот или армию, то можно вообще не прописывать в нашей стратегии wanted_army_size или wanted_navy_size

    possible = { exists = c:JAP THIS = c:JAP } # ограничение, кому можно использовать эту стратегию. Например эту стратегию может использовать только Япония.
    weight = { # вес, или приоритет стратегии. Стратегии переназначаются сами, примерно раз в три месяца, в зависимости от приоритета прописанного здесь
        value = -100 # приоритет минус 100, если мы не хотим что бы ИИ сам выбирал эту стратегию, пока не сработают заданые нами условия, или пока мы не назначим явно эту стратегию.
        
        # условие: если это Япония, если сушествует глобальная переменная:Имя_переменной, если дата меньше 1838 года, то добавить 2000 к приоритету этой стратегии.
        if = { limit = { exists = c:JAP THIS = c:JAP has_variable = IAI_strategy_1_JAP current_game_date < 1838.1.6 } add = 2000 }
        
        #Важно: по моим наблюдения, условия когда ИИ должен сменить одну стратегию на другую, лучше проверять в ивентах и назначать новую через set_strategy,
        # потому что условия прописанные тут, проверяются с большой задержкой и могут вообще не сработать, по каким то неведомым мне причинам.

    }    
}

 

 

Ссылка на комментарий

Закреплённые сообщения
Lazarka

Почему я не могу редактировать тему, вместо этого получаю такое сообщение?

Oops!

Эта публикация больше не может быть изменена. Возможно, она была перемещена или удалена, или прошло слишком много времени с момента её публикации.
 
Ответьте в личку пожалуйста или исправьте это, спасибо.
Ссылка на комментарий

Lazarka

Ниже под спойлером, рассмотрим как настроить дипломатическую стратегию, а именно, насколько агрессивно, рационально или нейтрально, ИИ выбранной страны, будет вести себя по отношению к другим странам. Когда и против кого начинать войну, и какие цели ставить в этой войне, что и где колонизировать и в каких регионах иметь интересы.
 

Спойлер

#----------------------------------------------------------------------------------------------
ai_diplo_strategy_bai_1_fra = { # также по аналогии, с админ стратегией, придумываем своё оригинальное название
    icon = "gfx/interface/icons/ai_strategy_icons/maintain_power_balance.dds" # выбираем картинку, которая будет отображаться в профиле страны, когда эта стратегия активна  
    type = diplomatic # и тип, к какому виду стратегий, принадлежит эта стратегия
    undesirable_infamy_level = { value = 25 } # Бэдбой, ИИ будет стараться не превышать этот уровень бэдбоя, только если у него не появится очень веская причина для этого
    unacceptable_infamy_level = { value = 50 } # Бэдбой, ИИ никогда не превысит этот уровень бэдбоя, ни при каких обстоятельствах.
    ideological_opinion_effect_mult = { value = 1.00 }  # желании ИИ дружить со странами, у которых такая же форма правления и схожие законы. 0.0 если мы не хотим этой зависимости     
    diplomatic_play_neutrality = { value = 50 } # желание ИИ оставаться нейтральным в дипломатических играх других стран.
    diplomatic_play_boldness = {

       value = 2  # смелость в дипломатических играх, будет ли ИИ сдаваться если испытывает страх или чувствует себя слабее, или нет.

       # как и во всех других настройках, здесь можно задать условие, под конкретную страну

       # например по умолчанию значение 2, но если это Тайвань, в дипломатической игре против Китая, мы можем прописать чтобы Тайвань не сдавался, несмотря ни на что.

        if = { #Taiping should never surrender against China.
            limit = {
                exists = c:TPG # тэг Тайваня (тэг страны можно увидеть если навести на неё мышкой, в режим разработчика)
                THIS = c:TPG
                exists = c:CHI
                is_diplomatic_play_enemy_of = c:CHI # тэг Китая
            }
            add = 1000 # добавляем 1000 к смелости Тайваня в игре против Китая
        }

    } 
    # Безрассудство - умножает оценку ИИ своей силы, поэтому при уровне безрассудства 2 он считает, что его силы вдвое сильнее, чем они есть на самом деле. 

    # Чтобы ИИ не боялся начинать дипло игру, из соображений рациональности, и был уверен в том что он сильнее, боятся нечего, можно нападать.  
    recklessness = {

       value = 0.25

       if = { limit = { exists = c:FRA THIS = c:FRA scope:target_country = { c:TUN = this } } add = 100 }
       if = { limit = { exists = c:FRA THIS = c:FRA scope:target_country = { c:TUR = this } } add = 100 }

       # выше прописано, чтобы Франция считала себя гораздо сильнее Турции и не боялась нападать на Тунис, который под протекторатом Турции

    }    
    # Агрессия. Насколько вероятно, что ИИ начнет дипломатическую игру против другой страны, если их отношения позволяют сделать это.
    aggression = {

        value = -50

        if = { limit = { exists = c:GBR scope:target_country = { c:GBR = this } } add = -50000 } # Отрицательное значение - ни при каких обстоятельствах не нападать на Великобританию
        if = { limit = { exists = c:TUN scope:target_country = { c:TUN = this } } add = 5000 } # Быть более агрессивным по отношению к Тунису

    }    

 

    # Сколько маневров мы можем использовать на начальном этапе, чтобы добавить больше военных целей?
    # (значения ниже 0 или выше 1 не имеют дальнейшего эффекта)
    wargoal_maneuvers_fraction = {
        value = 0.35
        # ниже написано что надо быть скромнее, если ранг вражеской страны, превышает ранг нашей страны
        if = {  limit = { scope:enemy_country.country_rank > country_rank  }  add = -0.1 }

 

        # ниже: если у США есть задание "Manifest a lot of Destiny", то надо стараться забрать у Мексики все штаты указанные в этом списке.
        if = {
            limit = {
                has_journal_entry = je_manifest_destiny_mexico
                scope:enemy_country = {
                    any_scope_state = {
                        OR = {
                            state_region = s:STATE_CALIFORNIA
                            state_region = s:STATE_NEVADA
                            state_region = s:STATE_UTAH
                            state_region = s:STATE_ARIZONA
                            state_region = s:STATE_NEW_MEXICO
                            state_region = s:STATE_TEXAS
                        }
                    }
                }
            }
            add = 0.25
        }

    }  


    # Что именно должен желать ИИ, по отношению к другим странам: захватить область, аннексировать всю страну или сделать доминионом
    wargoal_weights = {
        conquer_state = 0.0
        make_puppet = 0.0
        make_dominion = 0.0
        make_vassal = 0.0
        annex_country = 1.0
    }    
    # Насколько важно, чтобы ИИ сохранял интерес к конкретному стратегическому региону

    # (добавляется поверх значений региона, установленных в defines)
    strategic_region_scores = {

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

        # и отрицательное значение, если мы хотим чтобы ИИ не имел никаких интересов в заданном регионе.

        #  полный список названий стратегических регионов можно найти в \common\strategic_regions
        region_pacific_coast = { add = 1000 }            
        region_great_plains = { add = 1000 }            
        region_dixie = { add = 1000 }                
        region_the_midwest = { add = 1000 }                    
    }    
    # Здесь задаем колониальный интерес к определенным областям.   
    colonial_interest_ratio = {
        value = -0.5 #например, по умолчанию, колониальный интерес отрицательный, ко всем областям

        # но если мы хотим, чтобы США колонизировали свои области в Америке и не лезли колонизировать ничего в Африке или где то еще

        # то конкретно повышаем интерес США к заданным областям
        if = { limit = { scope:target_country = { any_scope_state = { bai_usa_colonization_states = yes } } } add = 1.0 }    
        if = { limit = { scope:target_state = { bai_usa_colonization_states = yes } } add = 1.0 }     

        # чтобы Франция не лезла в Южную Африку или Конго, а колонизировал только Сенигал и Нигер, то мы тоже это всё можем задать явно

        if = { limit = { scope:target_country = { any_scope_state = { OR = { region = sr:region_congo region = sr:region_zanj region = sr:region_southern_africa } } } } add = -0.5 }
    }
    

    # ниже, также как и в админ стратегии, прописываем к какой стране и при каких условиях, может применятся данная стратегия
    possible = { exists = c:USA THIS = c:USA  }
    weight = {
        value = -100
        if = { limit = { exists = c:USA THIS = c:USA has_strategy = ai_diplo_strategy_bai_1_usa } add = 5000 }    
    }    
}
#----------------------------------------------------------------------------------------------

 

Некоторые дипломатические действия, всё же легче активировать через ивенты.

Например, чтобы ровно в 1846 году США начали войну против Мексики и потребовали все штаты, которые мы укажем ниже.

Можно всё это прописать и в дипломатической стратегии, как мы рассмотрели выше. Но всё же это не всегда надежно. Иногда ИИ начинает войну, иногда нет, иногда требует нужные области, иногда может глючить. Поэтому по моему опыту, такие вещи как войны, лучше прописать через ивент, меньше возни и гораздо надёжней. Но вы конечно вольны это делать как вам нравится.

Спойлер

В самом начале, (позже покажу где) мы запускаем ивент, который должен активироваться через 10 лет, это как раз будет 1846 год

trigger_event = { id = bai_1_strategy_diplomatic.2 years = 10 } #Start war with Mexico in 1846

 

И вот сам ивент:

namespace = bai_1_strategy_diplomatic

###------------------------------------------------------------------------------------------
bai_1_strategy_diplomatic.2 = { # --- 1846 ---- WAR WITH MEXICO
    type = country_event
    hidden = yes
    immediate = {
        if = {
            limit = { # тут делаем необходимые проверки:
                exists = c:MEX # что Мексика существует
                c:MEX = { is_subject = no is_player = no }  # что Мексика управляется ИИ, а не игроком 
                exists = s:STATE_ARIZONA.region_state:MEX # и что штат Аризона принадлежит сейчас Мексике
            }
            c:USA = {
                create_diplomatic_play = { # начинаем дипломатическую игру, от имени США
                    type = dp_return_state # тип дипломатической игры, возврат области(это если есть клайм), а если нет клайма, то завоевание области
                    target_state = s:STATE_ARIZONA.region_state:MEX # требуем вернуть себе Аризону

                    # и дополнительные цели войны, где требуем все остальные нужные нам Штаты

                    add_war_goal = { holder = c:USA type = return_state target_state = s:STATE_TEXAS.region_state:MEX }
                    add_war_goal = { holder = c:USA type = return_state target_state = s:STATE_CALIFORNIA.region_state:MEX }
                    add_war_goal = { holder = c:USA type = return_state target_state = s:STATE_NEVADA.region_state:MEX }
                    add_war_goal = { holder = c:USA type = return_state target_state = s:STATE_UTAH.region_state:MEX }
                    add_war_goal = { holder = c:USA type = return_state target_state = s:STATE_NEW_MEXICO.region_state:MEX }
                    add_war_goal = { holder = c:USA type = return_state target_state = s:STATE_COLORADO.region_state:MEX }
                    # а это ответная цель, со стороны Мексики, где они требуют возврат Техаса
                    add_war_goal = { holder = c:TEX type = return_state target_state = s:STATE_TEXAS.region_state:USA }

                   

                    # полный список названий дипломатичес игр, можно посмотреть здесь: common\diplomatic_plays
                }                    
            }        
        }        
    }
}
###------------------------------------------------------------------------------------------

 

Такие дипломатические действия, как: улучшить отношения, предложить/принять торговое соглашение, оборонительный союз и все похожие действия, которые мы делаем через взаимодействие со страной, эти вещи настраиваются для ИИ в папке common\diplomatic_actions. Здесь можно прописать вероятность того что ИИ предложит торговое соглашение, примет или откажется, в случае предложения от другой страны. Страны и модификаторы можно задавать явно. Позже приведу пример как это делать.

 

p.s. позже когда у меня будет возможность редактировать свои посты, я добавлю это к первому посту.

Ссылка на комментарий

Lazarka

Осталась еще политическая стратегия - как заставить ИИ принимать правильные законы.

Плюс, заключение, как всё правильно организовать, для создания мода по ИИ.

Затем скину файлы собственного мода, он не завершен, но даже если бы я создавал мод с нуля, то постоянно бы подглядывал в эти свои файлы.

И всё, тема можно считать раскрыта полностью.

Сделаю это после 27 октября, когда с моего аккаунта снимут ограничения. Ну и добавило бы мотивации, если кто то скажет что ему эта тема как то интересна.

Ссылка на комментарий

Херсонський Кавун

Как заставить ИИ отступать в войнах при максимальном страхе? Ладно там, когда полное завоевание страны..но в других случаях...

Ссылка на комментарий

Lazarka
3 часа назад, Херсонський Кавун сказал:

Как заставить ИИ отступать в войнах при максимальном страхе? Ладно там, когда полное завоевание страны..но в других случаях...

Diplomatic play boldness, открой под спойлером, дипломатическая стратегия, там об этом пишу.

Ссылка на комментарий

Lazarka

я так понял что никому не интересно, кому надо тот и сам во всем разберется, а чисто из любопытства никто технический текст читать не будет.

Ссылка на комментарий

Vana332228

Блин(. Тоже хотел сделать мод, но ты перестал дополнять(. Очень жаль

Ссылка на комментарий

KovAlexey

Да почему? Лишним бы не было.

Материала очень мало, хороший бы гайд не помешал, как вообще писать "скрипты" (если это вообще ими можно назвать) под этот движок, искать модификаторы и тд

У меня с наскока не вышло по крайней мере, несмотря на опыт в нескольких языках

Изменено пользователем KovAlexey
Ссылка на комментарий

Тимстер Липкенс
В 01.11.2023 в 23:23, Lazarka сказал:

я так понял что никому не интересно, кому надо тот и сам во всем разберется, а чисто из любопытства никто технический текст читать не будет.

 

Чувак, ты остановился буквально на самой интересной политической части)

Ссылка на комментарий

Присоединиться к обсуждению

Вы можете оставить комментарий уже сейчас, а зарегистрироваться позже! Если у вас уже есть аккаунт, войдите, чтобы оставить сообщение через него.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Ваша ссылка автоматически преображена.   Отображать как простую ссылку

×   Предыдущее содержимое было восстановлено..   Очистить текст в редакторе

×   You cannot paste images directly. Upload or insert images from URL.

  • Ответы 10
  • Создано
  • Последний ответ
  • Просмотры 1527

Лучшие авторы в этой теме

  • Lazarka

    7

  • Тимстер Липкенс

    1

  • KovAlexey

    1

  • Херсонський Кавун

    1

  • Vana332228

    1

Лучшие авторы в этой теме

Популярные сообщения

Lazarka

Было у меня желание написать свой мод, по улучшению поведения ИИ, оно и сейчас есть, но я понимаю что у меня абсолютно нет времени этим заниматься, даже несмотря на то что я безумно этого хочу. Поэт

Lazarka

Добро, закончу на днях, как будет время.

Lazarka

Ниже под спойлером, рассмотрим как настроить дипломатическую стратегию, а именно, насколько агрессивно, рационально или нейтрально, ИИ выбранной страны, будет вести себя по отношению к другим странам.

Lazarka

Осталась еще политическая стратегия - как заставить ИИ принимать правильные законы. Плюс, заключение, как всё правильно организовать, для создания мода по ИИ. Затем скину файлы собственного

Lazarka

я так понял что никому не интересно, кому надо тот и сам во всем разберется, а чисто из любопытства никто технический текст читать не будет.

KovAlexey

Да почему? Лишним бы не было. Материала очень мало, хороший бы гайд не помешал, как вообще писать "скрипты" (если это вообще ими можно назвать) под этот движок, искать модификаторы и тд У ме

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу


Copyright © 2008-2025 Strategium.ru Powered by Invision Community

×
×
  • Создать...