Софтина для подбора сборки из артефактов
DjvisybalTM Если есть мысли, буду рад)
Попозже распишу что я вообще намудрил с алгоритмом, расписать его для понимания как ищутся сборки
Бля, я каждый раз как название темы вижу - уже начинаю думать, что кого-то опять забанило и он решил написать об этом
- Изменено
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 уникальных сборок (то есть комбинации артов не будут повторяться) с наименьшим суммарным качеством:
часть вывода
Вроде все рассказал. С радостью поясню какие-то моменты, учту предложения, поскольку действительно мог чего-то не учесть.
Прикольный концепт, но для того, чтобы стало работоспособным придется прикручивать невероятное количество вещей.
Цены скорее всего придется обновлять вручную
YTdestroyerYT чтобы стало работоспособным придется прикручивать невероятное количество вещей.
Можешь уточнить, пожалуйста, что имеешь в виду?
залупа только потому что убивает нахуй мозг юзера позволяя ему вообще не шевелить мозгами а тупо вбивать нужные статы в прогу чтоб она ему сама всё собрала
и так заебали аболтусы которые спрашивают че им в три зип берлогу4 собрать в альбатрос говночист
Gagutuun а как определяется минимально допустимое качество артефакта?
Gagutuun ебашь проверку цен аука, распред, точка , совместимость и будет збс
quantumWebX
1)Ну т.е как у тебя преобразование происходит % артефакта в фактическую характеристику?
2)Судя по подбору комбинаций у тебя меняются статы сразу всех артефактов в сборке одновременно, разве не может получиться так, что сборка пройдет при например 105 _ 104 _ 104 _ 104 _ 104 или такие условия не рассматриваются в угоду ускорения поиска?
3)Так же я возможно чего-то не понимаю, но не логичнее ли при подборе потенциала и качества было использовать бин. поиск?
quantumWebX 1) для этого отдельная функция написана, которая осуществляет подсчет характеристики, высчитывая их в зависимости от процента качества и потенциала, если я правильно понял вопрос)
2) Если посмотреть на этот скрин, то видно, что проценты качества у артов не всегда одинаковые
я уже видимо догадываюсь в чем дело и это просто кривой лог, а я этому не придал значения. Но сама идея действительно заключается в ускорении поиска.
3) На счёт использования бинарного поиска почему-то возникли небольшие сомнения, связанные в первую очередь с тем, что поиск может осуществляться единовременно только для одного артефакта, а не для всей сборки, а узнать оптимальные параметры рассматривая артефакты по очереди невозможно, поскольку нас изначально интересует вся совокупность.
- Изменено
А какой пул из артефактов у тебя используется? Самые используемые или вообще все с игры?
2)А да, увидел
3)Действительно. Я подумал, что в случае одинаковых статов это будет работать ок, но хотелось-то у каждого по отдельность подобрать, поэтому да
1)Почему спрашиваю, в АПИ СК там у каждого процента свое число передается и его перевод в проценты - не самое очевидное действие, я когда расписывал, мб пригодится для более точных подсчетов или если вдруг в апи полезешь
Единственное, учитывай квалити просто еще там
Chezviex около близко к правде
- Изменено
quantumWebX О, крайне благодарю, надо изучить))
Вообще вот мои изыскания, которые я описывал товарищу.
Если брать арт со 100%, то
повышение качества на 1% равно увелчению баффов на 1 процент
Повышение потенциала на 1 уровень равно увеличению баффов на 2 процента
Дебаф арта возрастает с 1 по 10 уровень в рамках одной редкости и на нулевом уровне следующей редкости приводится к стандартному значению и не зависит от потенциала и качества исследования. Базовое значение дебаффа зависит только от редкости арта. Допустим обычный Осколок имеет дабафф био -2.5 на обычной редкости и 100%, но на необычной редкости и последующих редкостях при качестве 1×0 дебафф уменьшится на 10% и будет составлять 2.25 и с каждым процентом потенциала в рамках этой редкости будет повышаться на 1% до 2.5
Увеличение редкости арта на одну ступень равно увлечению баффов на 10 процентов.
При понижении качества меньше 100% за каждый процент качества баффы уменьшаются на 0,5 процента.
Не забывай учитывать и вещественные числа в процентах для более точного результата.
309 Справедливости ради конечно нужно и я это понимаю, но даже учитывая как минимум десятые части у каждого артефакта это уже в 10 раз больше вариантов, а самое главное, что даже если программа выдаст человеку какую-то сборку с такими подробными процентами, то вот шанс, что он наролит ее именно такую крайне низкий, поэтому возникает вопрос о целесообразности, на мой взгляд