Автоматизация SaltyBet - мое живое и продолжающееся приключение

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

Первоначально я планировал просто использовать Selenium и открывать Java, но быстро обнаружил, что могу делать все, что хочу, с элементом управления WebBrowser в WPF (конечно, это IE, но я могу легко встроить его в приложение).

Краткое изложение моих текущих целей. (Забастовка = Готово!)

  • Разрешить делать ставки из моего приложения.
  • Создайте базу данных, чтобы отслеживать как можно больше статистических данных и прогнозировать исход боя.
  • Рекордные победы / поражения
  • Разрешить ввод определенных статистических данных вручную, чтобы помочь рассчитать шансы.
  • Попытайтесь найти способ обрабатывать символы с одинаковыми именами. (На самом деле этого не произойдет)
  • Сделайте так, чтобы мне не приходилось заходить на SaltyBet.com каждый раз, когда я открываю заявку. (К черту)

Самая сложная часть всего - это то, как я собираюсь разделить статистику на основе персонажей с тем же именем. Доступная информация сильно ограничена. Я могу получить имена бойцов, статус ставок (открытые и заблокированные) и все остальное, что отображается в стандартном тексте на экране. Мой лучший снимок, вероятно, - это попытаться запечатлеть части аватара персонажа рядом с индикатором здоровья. Это заставит меня попытаться заставить игрока Twitch работать с определенным размером, чтобы все мои захваченные аватары были одинакового размера независимо от размера окна. Если это не удастся, я могу просто поставить галочку, чтобы не делать ставки при обнаружении персонажа с несколькими вариациями.

Так что да, это то, что я пытаюсь сделать, и я планирую постоянно обновлять это.

Версия 0.01:

В настоящее время я могу делать ставки через приложение для Игрока 1 или Игрока 2. Теперь, когда все необходимые условия выполнены, я могу приступить ко всем забавным частям.

Версия 0.02:

Состояния ставок теперь отслеживаются. База данных также была создана, так что теперь я могу начать регистрацию результатов боя. My StreamPlayer теперь постоянно проверяет наличие обновлений в фоновом потоке. В настоящее время он отслеживает бой и знает, открыты ли ставки или заблокированы. Это также проверка результатов.

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

Ниже представлено то, что я только что записал перед обновлением этого блога. Записи, показывающие 0 секунд, я начал записывать в середине боя. Я встроил логику, чтобы не записывать время для них, потому что это было бы неправильно.

Никто не может прикоснуться к Alien Queen!

Версия 0.03:

В настоящее время все это время, пока я занимаюсь кое-чем здесь и там и внедряю текущий набор изменений, версия 0.02 работает и без проблем регистрирует все результаты. На данный момент я записал 68 боев, и Mature ведет со счетом 2: 0, сражаясь против Кёске Кагами (хотя это Кагами Кёске на SaltyBet) и Спауна.

Итак, что я сделал до сих пор? Я реализовал быстрый редактор персонажей, чтобы начать экспериментировать с реализацией правил для ставок. Я планирую связать рейтинг со списком уровней (я уверен, что в следующем обновлении он будет переименован в уровень). Это будет для реализации правил, основанных на уровнях, а не на отдельных персонажах. Прямо сейчас у меня есть только следующее:

  • Стандартный (для взвешивания характеристик персонажа)
  • Всегда делайте ставки (вы знаете, что у вас есть любимые персонажи)
  • Никогда не делайте ставок (зачем тратить время и шанс, когда вы знаете, что они просто отстой!)

Вот об этом. Моя цель на завтра (если будет время после работы) - начать писать правила. Я надеюсь, что к тому времени у меня будет достаточно данных. Этот ребенок будет работать всю ночь весь день (если ничего не выйдет из строя), добывая мне мои данные о соли. Я могу создать Google Doc завтра, который будет содержать все данные, которые я нашел до сих пор.

Обновление статистики!

Всю ночь ведутся драки. На данный момент записал 232 боя. Cyclops, Lavos Spawn, Saint Kyo и Super Skrull имеют рекорды 3-0 с тех пор, как я начал записывать вчера.

ResultDate в электронной таблице находится в формате UTC, поэтому, если вы действительно хотите использовать его для чего-то, вы можете сначала преобразовать их в свой часовой пояс.

Версия 0.04

Что ж, я записал 500 боев и зарегистрировал более 600 персонажей. К сожалению, здесь не хватает последних 7 часов боев, потому что мой интернет отключился примерно через 5 минут после того, как я лег спать.

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

Документ Google также был обновлен с моими текущими результатами боя. Тем не менее, я все еще очень зол из-за того, что пропустил последние 7 часов.

Версия 0.05

Мне удалось ввести некоторые правила, которые я хотел реализовать вчера вечером, но не смог. Я добавил логику для проверки новых претендентов (персонажей, которых я еще не зарегистрировал). Если один из персонажей противостоит новому претенденту, я теперь взвешиваю тот факт, выигрывал ли он ранее матч, и их процент побед составляет 50% или больше. Если нет, то я автоматически сделаю ставку на нового претендента.

Я также смог импортировать результаты боя @ itwongo, чтобы у меня было больше данных для работы. В настоящее время я получил более 800 результатов боев, которые можно использовать в качестве данных. В основном это все до того, как мои текущие правила вступили в силу. По большей части он полагался на случайные ставки, если у меня не было достаточно данных для работы. Я надеюсь, что как только я получу систему ранжирования и уровней, я смогу достичь 70% выигрыша. В настоящее время я просто ставлю 100 долларов и сижу с 3250 долларов, которые я начал с 684 доллара.

Версия 0.06 (2013.08.07)

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

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

Интересно, правда ли это? Мои данные не показывают, что они еще дрались.

Текущая статистика прогнозов после введения новых правил:

Побед Убытки
Все прогнозы14381 год64%
Новый набор правил19773%
Новый набор правил - не возвращаясь к случайному выбору17480%

Мне любопытно, какими будут эти числа завтра утром. Когда я говорю «Отступление», я имею в виду тот факт, что ни одно из моих правил не определяло победителя. Это может быть, если у обоих персонажей 0 побед или если кто-то новый обнаружил, что у меня нет данных и что он сражается против кого-то с соотношением побед к проигрышам менее 50%.

Теперь, когда у меня есть все это, я считаю, что пора приступить к внедрению рангов / уровней. Но посмотрим. Я, наверное, отвлечусь на что-нибудь еще.

Версия 0.07 (2013.08.10)

Что ж, разработка была остановлена ​​на несколько дней. Видеокарта сгорела, и мой компьютер, по-видимому, не загружается, если не установлена ​​хорошая видеокарта. Что ж, вчера вечером я использовал новенькую GTX 770 для просмотра SaltyBet вместо тестирования игр.

Итак, что я сделал? Я ввел новое правило боя. Это будет пытаться определить победителя на основе того, победил ли Игрок 1 кого-то, кому проиграл Игрок 2. В настоящее время он проверяет глубину 100 уровней. Я выбрал 100, потому что мне было трудно найти сценарий, в котором сработает это правило. Обычно, когда я говорю «100 уровней», я имею в виду проверку всех проигравших Игрока 2, а затем проверяю их проигравших, чтобы увидеть, есть ли у Игрока 1 шанс. Прошлой ночью во сне он сработал только дважды и один раз предсказал победителя. При написании этого я уже заметил проблему, которую мне нужно исправить.

Я не могу сказать, собирается ли автоматическая балансировка надрать мне задницу в этом проекте или серьезно помочь мне. У меня по-прежнему только 70% предсказаний, но, начав с 700 долларов прошлой ночью и сделав ставку на 50 долларов, я получил 1600 долларов. Обычно я бы был ниже этого, потому что шансы на выплату настолько односторонние, что я могу выиграть 6 матчей подряд и иметь только примерно + 25 долларов, а затем уже в следующем матче проиграть и быть на уровне -25. Единственная реальная безопасная ставка - 1 или 2 доллара, но это глупо.

Думаю, мне просто нужно больше данных. Те последние 2 дня, когда не регистрировались никакие статистические данные, действительно сильно повлияли на ситуацию. Теперь с автоматическим балансом мне любопытно, останется ли мой коэффициент выигрыша около 72%, где я всегда плавал.

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

Версия 0.08 (2013.08.13)

Рейтинги! Они были представлены. Проведя пару дней, ударившись головой о стол, я, наконец, разобрался в базовых рейтингах. Благодаря моему хорошему другу Джеймсону и Бакарди я смог справиться со своими проблемами.

В основном это работало так:

  • Посадите определенных персонажей с определенными значениями ранга. Это существо, которое я считал лучше или хуже другого персонажа. Думаю, я посеял около 20 персонажей из более чем 1200.
  • Как только они были на месте, я просмотрел все свои записанные поединки. Примерно около 2600 вчера вечером, когда я это сделал. Я просто начал проверять ранги победителя и проигравшего, чтобы определить, должен ли победитель двигаться вверх, а проигравший - вниз. Однако я не просто перебрал один раз. Я переиграл все бои примерно 30 раз, чтобы как можно больше разложить персонажей и ранги.
  • После этого я повторно предсказал все свои записанные бои без использования правила реванша (если персонаж x побеждает персонажа y, сделайте ставку на x). Я добился 97% прогнозов. Значит, что-то было сделано правильно =)

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

Итак, как это работает? в последних 48 зарегистрированных боях с тех пор, как я сделал последнее небольшое изменение кода сегодня утром, я выиграл 38 боев. Так что примерно 79%, что очень близко к моей цели в 80%. Конечно, очень скоро это может составить 70%.

Вот результаты боя. (Извините, вам нужно нажать второй блок спойлера)

Борьба Пари Победитель Выплата Дата (EST)
Резиновый соул против Хаггар600 на ХаггареХаггар1213 августа 2013, 18:23
Фландре Скарлет vs Ким600 на КимКим453813 августа 2013, 18:20
Кудзё джотаро против Гоку SB1600 на Кудзё джотароКудзё джотаро31 год13 августа 2013, 18:16
Робо-кий против лей лей600 на лей лейЛей лей57 год13 августа 2013, 18:12
Регина против Камикколо600 на КамикколоКамикколо20913 августа 2013, 18:08
Веном против Дэна600 на данДэн41113 августа 2013, 18:03
Неко-арка против Ренамона600 на Neco-arcНеко-дуга1913 августа 2013, 17:59
Лей-лей против Frieza600 на FriezaFrieza131913 августа 2013, 17:56
Сменить дракона на драконий коготь600 на Когте Драконакоготь дракона613 августа 2013, 17:52
Гохан борется с деньгами против Джея Гаррика600 на Джея ГаррикаДжей Гаррик20713 августа 2013, 17:45
Минорико аки vs красный рейнджер600 о Красном рейнджереМинорико аки-60013 августа 2013, 17:43
Команда Реймисен vs Намор600 в Team reimisenКоманда reimisen3913 августа 2013, 17:39
Джокер против Мисти600 на МистиМисти9413 августа 2013, 17:35
Бэтмен за гранью против Кенширо600 о Бэтмене за пределамиБэтмен за гранью1713 августа 2013, 17:32
Дио Брандо vs Сильверсамурай600 на СильверсамураеСильверсамурай513 августа 2013, 17:29
Джейсон тодд против Наюки минасе600 на минасе НаюкиДжейсон Тодд-60013 августа 2013, 17:26
Висбоу vs Жирный Альберт600 о Жирном АльбертеЖирный альберт2613 августа 2013, 17:22
Харли Куинн против Джироубу600 на Харли КуиннХарли Куинн12313 августа 2013, 17:17
Gotenks gt против Rogue600 на РазбойникеGotenks gt-60013 августа 2013, 17:14
Флэш против Кшск-шуко600 на Кшск-ЩукоВспышка-60013 августа 2013, 17:09
Элла vs (сман)600 на ЭллеЭлла50713 августа 2013, 17:06
Дио против Рекум600 на ДиоДио3413 августа 2013, 17:01
Атом против Гоку ssj5600 на АтомеАтом44 год13 августа 2013, 16:59
Стволы против Мега оружия600 на Мега оружииМега оружие513 августа 2013, 16:55
Вегета против Дио600 на ВегетеВегета21713 августа 2013, 16:52
Миссмарвел против Эша600 на ЯсенеMissmarvel-60013 августа 2013, 16:49
Зомби против Arrange_unknown600 на Arrange_unknownArrange_unknown1113 августа 2013, 16:45
Ультрачеловек против Кая600 по КиУльтрачеловек-60013 августа 2013, 16:42
Рю против Кайо Шин600 на РюРю5613 августа 2013, 16:38
Марвин против костного мозга600 на МарвинеМарвин37313 августа 2013, 16:34
Темный псайлок против K 'xiii600 о Темном псайлокеТемный псайлок30913 августа 2013, 16:30
Кума против Джека Фроста600 на КумеДжек Фрост-60013 августа 2013, 16:26
Билли ли против Асахины Микуру600 на Билли ЛиБилли ли2613 августа 2013, 16:23
Руж против Гарпагоса600 на ХарпагосахГарпагос1786 г.13 августа 2013, 16:20
Ssj gohan vs Axl600 на осиSsj gohan-60013 августа 2013, 16:17
Урю против Сецуны600 на СецунеСецуна1613 августа 2013, 16:12
Think vs Neco600 на NecoNeco31 год13 августа 2013, 16:09
Хотару против Рю600 на РюРю38813 августа 2013, 16:02
Бизон против Гелиона600 на ГелионеБизон-60013 августа 2013, 15:54
Милан вспышка против сенны vp600 на миланской вспышкеСенна вице-президент-60013 августа 2013, 15:51
Карен на Хито vs Арчер600 на ЛучникаЛучник23313 августа 2013, 15:44
Аура против экзоциста (dnf)600 на АуреАура1013 августа 2013, 15:41
Бэтгерл против Корю600 на КорюКорю713 августа 2013, 15:38
Отличный с. мужчина против Бэтгерл600 на Великой с. человекОтличный с. человек22513 августа 2013 г., 15:30
Намазу vs Юрий ди ааааааа600 на НамадзуНамадзу1813 августа 2013, 15:26
Mystique vs Chibi ubuu600 на MystiqueМистика6613 августа 2013, 15:23
2к против Камека600 на КамекеКамек1413 августа 2013, 15:19
Психологическое оружие против Лекса Лютора600 на лекс люторЛекс Лютор3413 августа 2013, 15:16

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

Версия СДЕЛАНА !!

После 115 матчей с сегодняшнего утра я сижу с 87 победами и поступающим положительным денежным потоком.

Считаю, что добился своей цели. Не те 80%, которые я искал, но мои 75% теперь намного прибыльнее. Раньше он составлял 72% для легких ставок и постоянно терял деньги в течение определенного периода времени. Обычно ставите 600 долларов, выигрывайте как 200 долларов после 5 матчей, а затем проигрывайте следующие 3 матча. Эти 200 долларов только что превратились в (1600 долларов). знак равно

С тех пор, как вчера вечером я постоянно делал ставки по 600 долларов и начиная с 7000 долларов, я получил 22000 долларов. Наверное, мелочь для многих игроков, но я делал это не для того, чтобы заработать миллион долларов в Salty Bux. Я просто хотел принять вызов, и я получил это, учитывая, сколько информации мне нужно было уйти. В конце концов, все сводится к имени Игрока 1, имени Игрока 2, победителю и дате. Это вся информация, которую я фактически использовал.

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

Моей лучшей ставкой на данный момент был Fat Boo против Koopa Troopa (600 долларов ->3817 долларов). Было несколько действительно серьезных расстройств, которые принесли бы мне много денег. Если эта штука сделает ставку на любой из них, я обязательно дам вам знать.