Сел я тут писать миниигрулю по типу пвп пасьянса. Вообще правила почти полностью спизжены с карточной игры Ордонанс. Игрулю слепил меньше чем за час, и решил, что не плохо бы сделать бота. Уже второй день шатаю матстат и охуеваю от происходящего. Не думал, что написать аи для простенькой карточной игры окажется так сложно. Так что реквестирую литературу по этой теме.
>>300343 (OP)Если кому-то тоже интересно поломать голову, то вот правила: http://www.gamewar.ru/ordonans/game.htmБота кстати писал исходя из такой логики:На руке у бота 4 карты, положить карту он может в один из 5 стеков. Получается нужно выбрать один из 20 вариантов(меньше, если какие-то стеки уже собраны), руководствуясь качеством этого варианта. За качество варианта взял функцию sum(f1^2+f2^2+...+fn^2), где n-количество стеков (5), а fi - разница между крутостью i-го стека игрока и крутостью i-го стека бота. Крутость стека высчитывал так:высчитывается четырехмерный массив(по количеству типов войск), где каждый элемент это сумма всех войск соотвествующего типа + матожидание кол-ва оставшихся войск, например если в стеке стоят карточки с двумя первыми войсками, то это значение будет 2+30.5.Вот полный пример:в стеке лежат карты 1010 и 1110, получившийся массив будет выглядеть так: [1+1+30.5, 0+1+30.5, 1+1+30.5, 0+0+3*0.5] = [3.5, 2.5, 3.5, 1.5].Из этого массива находится та самая крутость стека по правилам игры (см. раздел "Войско и контроль над территориями"). И все бы хорошо, но когда я поиграл с ботом, то оказалось, что он не совсем туп, но все же не очень хороший игрок. Позже до меня дошло, что функция крутости стека не линейная и мое колдунство с матожиданием идет нахуй. Если кто-то прочитал эту шизофазию и даже что-то понял, был бы рад услышать ваше мнение.
Если для карточной игры есть алгоритм, который играет лучше человека за разумное время - на помойку такую игру. Т.к. уже через неделю после релиза будут godmode-боты.Основной прием - сделать непросчитываемый геймплей, но дать АИ больше ресурсов. Или позволить ему читерить - знать карты оппонента, сид колоды.
>>300348Я пришел к выводу, что тут такой алгоритм нельзя написать. Если решать в лоб без всякой статистики, перебором, то на первом ходу придется совершать проход по дереву с >320^20 ветвями. Но все же хочется сделать бота, который приемлемо играл бы по правилам. Пока есть хитрый план построить для нелинейной функции крутости стека линейную регрессию, прогнать ее на тесте Чоу (тест на качество регрессии) и если результаты норм, применять ее к сделанной модели. Идеально такой бот не будет играть, но статистически должен быть не плох.
>>300349Главное, чтобы он играл хуже человека. Но тогда он иногда будет делать очень тупые ходы, т.к. эвристика не сможет учесть сложные стратегии.Я долго думал, как поступить, и решил дать своему ИИ больше армии и сильнее скиллы.
>>300350Ну и нахуй такой баланс? Это как играть в шахматы, где у оппонента в 2 раза больше фигур и рубят они все фигуры в радиусе 1 клетки. Но при это двигает он их основываясь на игральных костях и лунном календаре.Смысл в этом цирке рандома? Лучше вообще никаких чем такие.
>>300350>больше армии и сильнее скиллыИ сразу игра воспринимается как нечестная. Вот с какого одинаковые по механике скиллы у компа сильнее?
>>300356Так а что ты предлагаешь? Тут безвыходная ситуация. АИ играет лучше человека - будет замес ботов, играет хуже - будет эксплуатируем.Во всех играх либо АИ читерит, либо играет очень плохо.
>>300357Так основа - это мультиплеер.Стоит сказать - все что, я говорю, касается только мультиплеера. Если от фарминга АИ игрок получает игровую валюту, без читинга никак. Просто воспринимается это как босс.Если же цель сделать синглплеер казуалочку, конечно, можно делать честный АИ с уровнями сложности. Даже если игрок напишет бота, он не будет ни на кого влиять.
>>300358Предлагаю не делать АИ вообще, кки - это игра для двух людей. Единственное зачем может быть нужен бот - потренироваться новичкам, а после освоения механики только для гринда голды. Так что боты в кки - зло, бустанутые - еще большее.
>>300361В хартстоне АИ очень сильно тупит. Но они все равно добавили компанию. Чисто пофаниться и получить карты. То есть их нельзя фармить.
>>300362>получить карты>нельзя фармитьУбийство мобов ради ништячков - разве не фарм? Ну может конечно фарм подразумевает репетативность, но тут же тоже, чтобы catchthemall не одного бота надо побороть.
>>300363Чтобы против них сразиться, нужно купить пропуск за игровую валюту или реальные деньги. Фактически ты покупаешь карты. И больше одного прохождения тебе ничего не даст.
>>300361Удваиваю. Таки бота опа наверняка уже хватает для небольшой тренировки, а потом только в мультик или хотсит.
Все ИИ для пошаговых игр имеют один принцип: перебор и оценка действий.
>>300367Дело в том, что эту карточную игру я использую как миниигру в другой сиглплеерной игре. И хотелось бы, чтобы бот давал нормальный отпор. А пока он делает только тех, кто до конца с правилами не разобрался и даунов-аутистов.
>>300344Короч, почитал правила и интуитивно кажется, что оптимальнее всего собирать по одному полку из (3?-)4-5 отрядов в каждый стек и докидывать в них мелочь (1-2-3) до батальонов и рот, в надежде что у игрока не выйдет собрать полк выше рангом или два полка скопом, а по мелочи он будет сасай. Можно раскидывать карты даже не глядя на ходы игрока.И да, первые две карты в стек компа должны всегда быть ведомыми и с отрядом выше рангом чем у игрока.Вот. А еще можно для каждого стека просто выбирать некоторую условно беспроигрышную комбинацию и ее собирать в меру сил.Заранее загадывать что первому стеку собираю: полк-4отряда роту-3отряда батальон-2отрядавторому стеку собираю: полк-5отряда роту-4отряда полк-1отрядаи т.п.Не знаю насколько это тупо, но очевидно игрок может заметить, что комп его игнорит, лол.Насчет твоей функции оценки силы стека: проблема в том, что ее мотает с каждой новой картой в стеке и комп мотается вместе с ней изменяя свою главную стратегию буквально на последней карте стека и ломая себе почти готовые комбинации. Очевидно, что после второй-третьей сыграной карты на эту функцию нужно забить болт и идти по стратегическому плану загаданой комбинации.ответил шизой на шизу
>>300344Не нужны никакие функции оценки игрока.Нужно просто заставить ии делать хорошие ходы, т.е нужна функция оценки карты и хода в целом.В этой игре критерий хорошего хода очень прост.Каждая новая карта должна стекать как можно большее число отрядов на большую глубину.Есть особый критерий хорошего первого хода.Хороший первый ход - это такой ход в котором обязательно есть отряд максимальной силы и как можно большее кол-во прочих отрядов. Такой критерий даст возможность в лучшем случае собрать полк максимального ранга и упростит поиск подходяших карт для последующих ходов.Для победы нужно захватить минимум три земли из пяти.Самая лучшая стратегия игры: из пяти земель выбрать три "виновых" земли и подбирать туда сильнейшие карты, а в две оставшихся - "фейловых" сбрасывать слабейшие и неподходящие карты.Могу в пример расчета одного хода, но мне лень.Алсо, как видишь игра может ничего не знать про игрока, но игрок видя, что творит ии в некоторых случаях будет иметь челендж по сбору сразу двух полков в стеке чтобы отжать землю.>>300381Шизик, лол.
Monte Carlo tree search
>>300399Алсо, забыл сказать про веса стеков.Как ты заметил не все стеки одинаково полезны, самые лучшие веса это общее кол-во отрядов в степени ранг формации.Один отряд - 5^0Рота - 5^1Батальон - 5^2Полк - 5^4Такие веса дадут гарантию, что один больший стек всегда перевесит все слабешие в любом кол-ве. Т.е например один батальон всегда вперевесит 4 роты, и карта стекающая до него будет выгоднее чем до 4 рот.
>>300399>В этой игре критерий хорошего хода очень прост.Каждая новая карта должна стекать как можно большее число отрядов на большую глубину.Бляяяя... Точно. Спасибо.>>300415Но такая фигня не учитывает качество отряда, то есть вес стека 2403 будет таким же, как и у 0342 (0+01+15+125+1125 = 155). Если я правильно понял, о чем ты.
>>300460>такая фигня не учитывает качество отрядаТаки да, у каждого отряда тоже должен быть вес. И внезапно он не должен быть степеной зависимостью, чтобы не вытеснять меньшие комбинации.Хватит обычной линейной (например 5-4-3-2-1), но над весами придется поколдовать.Полная формула оценки хода картой = ценность стеков * ценность задействованых отрядов.