Alexell / XEmpireBot

Bot that earn money in X Empire (Musk Empire)
115 stars 28 forks source link

Умная логика PvP / Smart PvP logic #4

Closed iskizreal closed 2 weeks ago

iskizreal commented 1 month ago

Заметил, что иногда их сервер отдает ошибку 500 при клайме. Такое кстати бывает и в самом приложении иногда. Было бы здорово, если бы бот не отключал ПВП после ошибки, а например засыпал на 10 сек и пробовал еще раз. А вот если будет больше ошибок, чем в ERRORS_BEFORE_STOP (ну или новую переменную завести), тогда уже выключать или засыпать на час (как это сейчас). К сожалению не шару в python :(

Пример ошибки: PvP error: 500, message='Internal Server Error', url=URL('https://api.muskempire.io/pvp/claim') PvP negotiations finished

Alexell commented 1 month ago

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

Что касается вашего вопроса, я сделаю это в предстоящем обновлении.

iLimus commented 1 month ago

Тоже пользуюсь... А как правильно задать платиновую лигу? gold - норм. platinum - ошибку выдает, что не правильная лига ((( А в чем риски?

Alexell commented 1 month ago

Технические названия лиг из игры: bronze, silver, gold, platina, diamond (потом в readme укажу). Риски в том, что ты не факт, что будешь выигрывать. Например на профиле низкого уровня и со слабо прокачаными переговорами и этикой, часто проигрываешь. А вот на профиле 10 уровня, с переговорами и этикой 8 уровня, я выигрываю довольно часто. Поэтому я и написал, что включайте PvP на свой страх и риск.

iLimus commented 1 month ago

Спасибо! У меня переговоры - 21, этика - 22 ))) Отлично капает! ) Предложение по доработке: Есть предположение, что юзеры выбирают стратегию не равновероятно. Хорошо бы вести статистику, сколько в Переговорах каких стратегий использовал противник. Хотя бы в файл. Если есть наиболее популярная стратегия - можно заметно повысить эффективность, играя против нее. Ну и ввести в бота - "интеллектуальный" выбор стратегии.

Duwaz commented 1 month ago

Есть предположение, что юзеры выбирают стратегию не равновероятно.

Я натыкал руками в бронзе 30 раз "агрессивную" и в 70% у оппонента была "защитная". Так что не верю я в то, что это реальные игроки. Так что дальше это буду называть ботом.

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

Я потестил и что-то подобное есть и в логике этой игры. Только иногда рандом выскакивает. Мб, чтоб не спалиться, хз

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

По коду это что-то типа такого:

if prev_prev_opponent_strategy == prev_opponent_strategy:
   curent_strategy = get_stronger(prev_opponent_strategy)
else:
   current_strategy = get_weaker(prev_opponent_strategy)

где (*мб перепутал названия местами. Не знаю порядок элементов в self.strategies)

def get_stronger(strategy):
   return self.strategies[(self.strategies.index(strategy) - 1 + len(self.strategies)) % len(self.strategies)]

def get_weaker(strategy):
   return self.strategies[(self.strategies.index(strategy) + 1) % len(self.strategies)]

# тут хочется работать как с enum'ом, чтоб было наглядней... Но я не знаю, что хранится в self.strategies
Alexell commented 1 month ago

Интересная логика.

Alexell commented 1 month ago

@Duwaz self.strategies - это List такого вида: ['aggressive', 'flexible', 'protective'] Названия стратегий там скорее всего будут именно в таком порядке, т.к. в таком порядке они в dbs, откуда я их забираю. Итак, значит, если у бота (игрока) в этот и прошлый раз была одинаковая стратегия, например aggressive, то я в следующий раз переключаюсь на ту, что её выигрывает, т.е. protective, иначе наоборот на более слабую, т.е. flexible. Я правильно понимаю? Должен ли я "помнить" последние 2 стратегии оппонета в следующем запуске переговоров (через час) или это должно работать в пределах одной партии переговоров? Какую стратегию выбирать в 1 и 2 раз после запуска бота, когда этих двух переменных еще не будет? Опять же, в начале ты пишешь про условия, связанные с тем, выиграл ты или проиграл, а основное твое предложение вообще не учитывает этот факт, так что я запутался.

iLimus commented 1 month ago

Мое мнение - эта стратегия так себе. Она основана на психологии, для игры с одним игроком. Не, для к-н-б с одним игроком она норм. Но тут то каждый раз разные противники (хоть и попадаются бывает подряд одни и те же ). Тут же важнее статистика и теория вероятности. Больше всего выбирают ЗАЩИТУ, потом идет ГИБКАЯ стратегия, и реже всего АГРЕССИВНАЯ. Да, может попасться 5 агрессий подряд, это рандом, но на больших числах - именно как я написал. В последних моих замерах (я дописал вывод стратегий в файл): агрессия - 176, гибкая - 201, защита - 217. До этого (до поломки бота): 140-159-165. Со стратегией flex я всегда в плюсе на 40 боев, не только по победам, но и по деньгам (не забываем про налог). Главное - про прокачку Переговоров не забывать. PS: Могу посчитать все в значениях вероятностей, но лень ))) Запустите 50 переговоров по очереди с каждой стратегией - сами все увидите по результату ) PS2: Наблюдаю так же небольшой "дрейф" периодический. Когда большинство видимо решает, что их стратегия стала хуже - и переходят на агрессию, там начинают сливать еще больше - и возвращаются. Но на 100 переговорах этот "дрейф" сглаживается. PS3: Хорошо бы считать и выводить расширенную статистику в конце сеанса:

Duwaz commented 1 month ago

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

Да, ты прав. Мысль ушла вперёд напечатанных слов. Там есть своя логика, но с конечной идеей я будто поторопился и многое упростил.

Чтоб не писать кучу букв и вводить в заблуждение, сел считать статистику.

Затестил слова @iLimus . Поставил только flexible. Сыграл 115 игр. Стата такая: мой ход - ход противника - количество игр flexible - aggresive - 38 🔴 flexible - flexible - 40 flexible - protective - 37 - WIN *так что мой аргумент, что там бот, который подстраивается под игрока - глупость

Запустил свою стратегию описанную выше. Забрал код из коммента. Сыграл 185 игр. Стата: aggresive - aggresive - 22 aggresive - flexible - 22 - WIN aggresive - protective - 15 🔴 flexible - aggresive - 17 🔴 flexible - flexible - 22 flexible - protective - 25 - WIN protective - aggresive - 28 - WIN protective - flexible - 17 🔴 protective - protective - 17

Без понятия, почему распределение немного лучше. Возможно, просто повезло. А мб что-то в этом есть

В любом случае, думаю, лучше тогда уж не торопиться с не рандомной логикой

iLimus commented 1 month ago

Тоже тестирую... Иногда protective лучше играет. Agressive - пока было всегда хуже, но не факт, что это не изменится. Но какие то "волны" по статистике есть, это точно. Заметил падение дохода, поставил protective - стало лучше. То же самое делал до поломки бота, но тогда падение было на protective и перешел на flexible. UPD: По последним 200 боям - agr: 70 flex:49 prot:81 Флексеры перекинулись в агров ) Но это я на Платинуме сейчас смотрю. На Голде может другая статистика. Но все равно Протект - чаще юзают. Поэтому думаю стоит играть за него (с хорошей прокачкой Переговоров) или против него (флекс, если переговоры не очень).

zv09 commented 1 month ago

Делал задания руками. ПВП выбирал справа налево, от самой крайней правой Protective, и далее шифт влево на 1 стратегию в каждом раунде. Винрейт где-то 60-70%. Как бы этот порядок прописать в боте? Просто по кругу.

khosrowkhazraei commented 1 month ago

PVP loses in any condition :) 2024-08-11 19:15:14 | INFO | 394 | MainNumber | PvP negotiations started | League: diamond | Strategy: random 2024-08-11 19:15:18 | INFO | 413 | MainNumber | Searching opponent... 2024-08-11 19:15:26 | SUCCESS | 455 | MainNumber | Contract sum: 63M | Your strategy: aggressive | Opponent strategy: protective | You LOSE (-63M) 2024-08-11 19:15:29 | INFO | 413 | MainNumber | Searching opponent... 2024-08-11 19:15:42 | INFO | 413 | MainNumber | Searching opponent... 2024-08-11 19:15:50 | SUCCESS | 455 | MainNumber | Contract sum: 79.8M | Your strategy: aggressive | Opponent strategy: protective | You LOSE (-79.8M) 2024-08-11 19:15:52 | INFO | 413 | MainNumber | Searching opponent... 2024-08-11 19:15:59 | SUCCESS | 455 | MainNumber | Contract sum: 50.5M | Your strategy: aggressive | Opponent strategy: aggressive | You LOSE (-50.5M) 2024-08-11 19:16:01 | INFO | 413 | MainNumber | Searching opponent... 2024-08-11 19:16:09 | SUCCESS | 455 | MainNumber | Contract sum: 88.3M | Your strategy: aggressive | Opponent strategy: protective | You LOSE (-88.3M) 2024-08-11 19:16:11 | INFO | 413 | MainNumber | Searching opponent... 2024-08-11 19:16:20 | SUCCESS | 455 | MainNumber | Contract sum: 83.7M | Your strategy: protective | Opponent strategy: flexible | You LOSE (-83.7M)

zv09 commented 1 month ago

i switch it off, so many loses

zv09 commented 1 month ago

I have not found a clear description of what skills are needed to win each strategy specifically. Maybe someone knows or has seen where it is described?

ask support, wait for reply

Я не нашел четкого описания того, какие навыки необходимы для победы в каждой стратегии конкретно. Может быть, кто-то знает или видел, где это описано?

написал в саппорт, жду что скажут

zv09 commented 1 month ago

рассматривал логи у PvP, и наблюдаю, что при установке на protective часто начинают попадаться flexible-противник. Тут есть кривая распределения, то что в каждое временное окно когда отрабатывается сентимент той или иной карты, по её текущей популярности, происходит ранжирование веса всех трех карт. И по этому весу определяется, самая популярная, средняя и последняя (малая). Обозначим - MAX, MID, MIN. В этом временном интервале выбирать нужно всегда MID и переходить с других стратегий. Потому-что стратегия веса MID будет превалировать в победе над MAX, и проигрывать в стратегии против MIN как проигрышная по правилам игры, но в меньшей степени, ибо вес MIN меньше и она реже выбирается противником.

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

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

Alexell commented 2 weeks ago

Закрываю эту ветку. В дальнейшем развитии PvP нет особого смысла.