Bupyc Было бы интересно по возможности включиться в обсуждение)

  • Bupyc ответили на это сообщение.

    DjvisybalTM Если есть мысли, буду рад)

    Попозже распишу что я вообще намудрил с алгоритмом, расписать его для понимания как ищутся сборки

    Gagutuun напиши свой дискорд, мы добавим тебя.

    • Gagutuun ответили на это сообщение.

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

      Bupyc ник Gagutuun

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

      если говорить о более низком качестве можно к API сталкрафта обратится. Возможно будут хоть и не самые объективные, но хоть какие-то близкие цены брать с данных аукциона.

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

      Ну чтож, поехали!

      1| Все начинается с загрузки файла, содержащего параметры артефактов. Эту условную “БД” я поместил в json файл, поскольку понятная структура, объектов не так много, удобно хранить и обрабатывать. Ниже пример структуры:

      Как можно понять, взял я точку отсчета артефакты с редкостью “обычные”, качеством 100% и потенциалом 0, думаю в этом моменте вопросов возникнуть не должно. Данные из этого файлика будут подгружаться в основную программу.

      2| Далее происходит инициализация входных данных в виде контейнера (его вместительности и защиты) и желаемых баффов в понятной форме: “Название баффа”: “Значение”. Этих баффов может быть сколько угодно, хоть все сразу.
      Важный момент : желаемое значение конкретного баффа может быть любым путем использования знака “*”, что говорит программе о том, что данный бафф просто должен присутствовать в итоговой сборке, но его значение не имеет границ.

      Буду предоставлять выдержки из окна среды разработки для лучшей наглядности.

      3| После входим в основной цикл в котором первым делом мы формируем список артов, которые содержат нужные нам баффы. Лучше для начала показать на примере: возьмем входные параметры из скрина сверху и посмотрим какой список подходящих артефактов программа нам предлагает.

      Красный - сам артефакт
      Зеленый - показывает, что у арта 2 баффа из вводимых пользователем
      Желтый - 1 бафф из вводимых пользователем.

      Таким образом на этом этапе подбираются подходящие арты и сортируются сначала по кол-ву желаемых баффов, а затем по их величине. Все это нужно, что передать на следующий этап - перебора.

      4| Перебор комбинаций осуществляется следующим образом:

      • сначала определяем на сколько слотов мы подбираем сборку. Я задал следующее условие: если защита конта ниже 85, то ищем сборку на n-1 артефактов, где n - количество слотов в контейнере. Такое решение принято в связи с тем, что в берлоге крайне тяжело подобрать адекватную сборку на 6 слотов без контрартефакта, а также в целях оптимизации, поскольку перебор на 6 слотов займет гораздо больше времени чем на 5.
      • на вход возможных артефактов подается ранее отобранный и отсортированный список, поэтому сам процесс перебора начинается с наиболее подходящих под требования пользователя артефактов. В ходе этого подбора осуществляется выбор комбинации артефактов, а затем перебор их параметров. На скрине более наглядно.

        Как можно заметить, то параметры подбираются таким образом: сначала повышается качество всех артов до 106%, затем все арты повышаются до +15 потенциала, а после идут на повышение качества вплоть до 150%. Хочу объяснить почему сделал так: на мой взгляд нет смысла перебирать артефакты ниже 100%, поскольку это действительно рофло сборки и они не смогут дать более менее внятных баффов (поправьте, если не прав). Повышение сначала до 106% обусловлено тем, что вряд ли кто-то захочет использовать артефакты данной редкости на меньшем качестве, чаще всего их просто перероливают. Последующее повышение потенциала обусловлено тем, что даже необычные сборки точат до +15 и это нормально. Все эти условия были взяты сугубо из моего опыта игры и действительно могут быть не оптимальны, но я посчитал, что так лучше.

      Еще одно очень важное замечание: для оптимизации времени перебора использовал функцию combinations_with_replacement из библиотеки itertools, которая создает сочетания с учетом повторений объектов, но без повторения самих комбинаций, т.е. если была проверена комбинация 1-2-3, то комбинация 3-2-1 откинется. Вспоминаем формулу . Понимаю, что это очевидно, потому что все понимают, что порядок артов в сборке не играет роли, но решил уточнить.

      • каждая такая комбинация проверяется на соответствие заданным параметрам в рамках погрешности -3%…+3%.., поскольку точное значение нам не нужно и получить его крайне малая вероятность.

      • Перебрав и проверив все комбинации составляется список валидных сборок, которые ВНИМАНИЕ сортируются по суммарному среднему качеству таким образом, что в начале оказываются сборки с наименьшим суммарным качеством. Именно это решение и определяет, что в начале списка будут самые бюджетные из возможных комбинаций, которые дают нужны баффы. Далее все комбинации ждет следующий этап - проверка на допустимость их дебаффов.

      • если дебаффа сборки с учетом защиты контейнера не превышают лимитов, то сборка заносится в список допустимых. Если нет, то для нее ищется контрартефакт и подбираются параметры по уже знакомой нам схеме - он должен погасить дебаффы так, чтобы войти в лимиты организма персонажа. Если контрартефакт найден, то он добавляется в контейнер и сборка считается допустимой, иначе - недопустима.

        тут изображены итерации поиска контрартов для найденых комбинаций.

      • если сборка не проходит по допустимым дебаффам и не имеет свободных слотов, то осуществляется перебор уже для N-1 артефактов так, чтобы свободное место для контрартефакта появилось.

      • по итогу прохождения всех кругом ада итераций на выход подается список допустимым комбинаций с подобранными контрартами (или допустимым дебаффами), из которых выбирается 5 уникальных сборок (то есть комбинации артов не будут повторяться) с наименьшим суммарным качеством:

        часть вывода

      Вроде все рассказал. С радостью поясню какие-то моменты, учту предложения, поскольку действительно мог чего-то не учесть.

      • quantumWebX ответили на это сообщение.

        Прикольный концепт, но для того, чтобы стало работоспособным придется прикручивать невероятное количество вещей.

        Цены скорее всего придется обновлять вручную

        • Gagutuun ответили на это сообщение.

          YTdestroyerYT чтобы стало работоспособным придется прикручивать невероятное количество вещей.

          Можешь уточнить, пожалуйста, что имеешь в виду?

          залупа только потому что убивает нахуй мозг юзера позволяя ему вообще не шевелить мозгами а тупо вбивать нужные статы в прогу чтоб она ему сама всё собрала
          и так заебали аболтусы которые спрашивают че им в три зип берлогу4 собрать в альбатрос говночист

          Gagutuun а как определяется минимально допустимое качество артефакта?

          • quantumWebX ответили на это сообщение.

            Gagutuun ебашь проверку цен аука, распред, точка , совместимость и будет збс

            quantumWebX
            1)Ну т.е как у тебя преобразование происходит % артефакта в фактическую характеристику?
            2)Судя по подбору комбинаций у тебя меняются статы сразу всех артефактов в сборке одновременно, разве не может получиться так, что сборка пройдет при например 105 _ 104 _ 104 _ 104 _ 104 или такие условия не рассматриваются в угоду ускорения поиска?

            3)Так же я возможно чего-то не понимаю, но не логичнее ли при подборе потенциала и качества было использовать бин. поиск?

            • Gagutuun ответили на это сообщение.

              quantumWebX 1) для этого отдельная функция написана, которая осуществляет подсчет характеристики, высчитывая их в зависимости от процента качества и потенциала, если я правильно понял вопрос)

              2) Если посмотреть на этот скрин, то видно, что проценты качества у артов не всегда одинаковые

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

              3) На счёт использования бинарного поиска почему-то возникли небольшие сомнения, связанные в первую очередь с тем, что поиск может осуществляться единовременно только для одного артефакта, а не для всей сборки, а узнать оптимальные параметры рассматривая артефакты по очереди невозможно, поскольку нас изначально интересует вся совокупность.

              • quantumWebX ответили на это сообщение.

                Gagutuun

                А какой пул из артефактов у тебя используется? Самые используемые или вообще все с игры?

                2)А да, увидел
                3)Действительно. Я подумал, что в случае одинаковых статов это будет работать ок, но хотелось-то у каждого по отдельность подобрать, поэтому да

                1)Почему спрашиваю, в АПИ СК там у каждого процента свое число передается и его перевод в проценты - не самое очевидное действие, я когда расписывал, мб пригодится для более точных подсчетов или если вдруг в апи полезешь

                Единственное, учитывай квалити просто еще там

                • Gagutuun ответили на это сообщение.
                • Gagutuun оценил это.

                  Chezviex около близко к правде

                  quantumWebX О, крайне благодарю, надо изучить))

                  Вообще вот мои изыскания, которые я описывал товарищу.

                  Если брать арт со 100%, то
                  повышение качества на 1% равно увелчению баффов на 1 процент
                  Повышение потенциала на 1 уровень равно увеличению баффов на 2 процента

                  Дебаф арта возрастает с 1 по 10 уровень в рамках одной редкости и на нулевом уровне следующей редкости приводится к стандартному значению и не зависит от потенциала и качества исследования. Базовое значение дебаффа зависит только от редкости арта. Допустим обычный Осколок имеет дабафф био -2.5 на обычной редкости и 100%, но на необычной редкости и последующих редкостях при качестве 1×0 дебафф уменьшится на 10% и будет составлять 2.25 и с каждым процентом потенциала в рамках этой редкости будет повышаться на 1% до 2.5
                  Увеличение редкости арта на одну ступень равно увлечению баффов на 10 процентов.
                  При понижении качества меньше 100% за каждый процент качества баффы уменьшаются на 0,5 процента.

                  Не забывай учитывать и вещественные числа в процентах для более точного результата.

                  • Gagutuun ответили на это сообщение.

                    309 Справедливости ради конечно нужно и я это понимаю, но даже учитывая как минимум десятые части у каждого артефакта это уже в 10 раз больше вариантов, а самое главное, что даже если программа выдаст человеку какую-то сборку с такими подробными процентами, то вот шанс, что он наролит ее именно такую крайне низкий, поэтому возникает вопрос о целесообразности, на мой взгляд