zubzalinaza
Непосредственно “на рынке” мониторить не получится. Арта нужного качества может и не быть, или может быть “фейковая” цена, ты обязан обращаться к хистори сервису и брать среднюю.

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

А долбить его приходится по той причине, что за 1 запрос ты можешь получить инфу ТОЛЬКО за 200 продаж конкретного артефакта которые будут включать в себя вообще все качества, т.е фильтрации как таковой вообще нет и выгружать ты будешь все подряд.
Соответственно, чтобы получить историю по какому-нибудь осколку нужно откинуть 50 запросов минимум и получить 10к продаж. Нужны искл арты - нужно выгрузку делать еще больше т.к они продаются редко через аук.
Если арт не очень популярные - тоже самое.

Вот к примеру выгрузка на 20к продаж по редкому осколку +15.

А вот по искловому

Для выгрузки 10к записей по 1 арту у меня уходит около 50 секунд во всяком случае.

@Bupyc пожелаем удачи чуваку)

Rostrok9999 Соглашусь в данном случае. В текущем виде прога имеет низкую полезность, поскольку не учитывает тех самых “неявных” запросов, но я уже думаю над тем, что можно переиначить и скажем сделать в качестве входных параметров обобщенные пожелания по типу: “на живучесть”, которые будут подразумевать параметры эффективки, живучести, регенерации и т.д., а также ограничивать по качеству желаемых артов (это если мы все ещё не привязываемся к api и мониторингу цен), после чего выдавать будем ряд самых результативных сборок, которые достигли наибольших баффов в заданной редкости.

По крайней пока такая мысль родилась

zubzalinaza Была такая мысль о формировании сразу библиотеки сборок, но почему-то показалось, что ту мач в плане затрат)
Да и удобнее в файлике поменять значение после патча

jedboy идиоты безмозглые мне еще никто из ебаных сталкрафтерят не ответил правильно

    Gagutuun Про учёт цены я идею в данный момент откинул в связи с тем, что api (насколько знаю) нет

    Есть

    • Изменено

    Gagutuun шлаком являются сборки с 2 контр артами, артами не дающими активный баф, т.е. всякие реакции (исключение солнце и вихрь), впринципе остальные можно уже как то комбинить

    Upd. Я говорю про массовые сборки, а не узконаправленные, допустим 2 кур. Бога под Сатурн и т.п.

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

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

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

      Darkest_MRG Никто и не знать, нашёл у кого спрашивать, у нас вообще лапки вместо рук😼

      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 собрать в альбатрос говночист