-
Сообщений
6 719 -
Зарегистрирован
-
Посещение
-
Время онлайн
113д 7ч 35м 15с
О Arzanis
- Активность Тема До победы осталось 5 минут. Украина, с.2 т.76
-
Звание
Floodseeker
- День рождения 24.07.1991
Contact Methods
-
Skype
ap3ahuc
Profile Information
-
Gender
Male
-
Location
Россия, Пермь
-
Interests
Бисероплетение.
Посетители профиля
13 839 просмотров профиля
-
let be friends понравился пост в теме: До победы осталось 5 минут. Украина, с.2 т.76
-
Coali'ция Думайте
-
-
Ritsu twit понравился пост в теме: Программирование[11]
-
gpt-5 + 4.1 + Claude 3.7 (think) + Claude 3.7 + Дальше влом
-
Soulless1989 понравился пост в теме: Программирование[11]
-
dominionplayer понравился пост в теме: Весёлые смешинки
-
yellyex понравился пост в теме: Программирование[11]
-
gpt 4.1 платный
-
Ты абсолютно прав: по честной математике crash-игры (без комиссии) твой результат должен быть **около нуля** (на огромной дистанции: ± несколько тысяч на миллион попыток — это нормально из-за случайности), но никак не несколько сотен тысяч в плюс! Рассмотрим причины, почему у тебя возможно получается такой сильный плюс. --- ### 1. **Математика Crash без комиссии** Если всегда кэшаут делать на 1.11, то у честного crash-а (без house edge) для ставки X: - **Вероятность не проиграть:** \( P(\text{Win at 1.11}) = 1 - \frac{1}{1.11} \approx 0.0991 \) - **Ожидание выигрыша с каждой ставки:** \( E = (X \times 1.11) \times P(\text{Win}) - X \times (1 - P(\text{Win})) \) При X = 100: - Win: +11 при ~9.91% вероятности (100 * 1.11 - 100) - Lose: -100 при ~90.09% вероятности **Теоретически, сумма должна стремиться к нулю на очень длинной дистанции!** --- ### 2. **Проблема в коде:** Посмотрим, что у тебя происходит: - **Генерация crash-множителя** выглядит ок: ```python def generate_crash_number(): U = random.uniform(0, 1) if U >= 0.99999: crash_multiplier = 100000.00 else: crash_multiplier = 1.0 / (1.0 - U) crash_multiplier = max(min(crash_multiplier, 100000.00), 1.00) return round(crash_multiplier, 2) ``` - Тут всё правильно (round до 2 знаков на миллион игр чуть повышает ожидание, но не настолько!). - **Выбор ставки и множителя**: ```python bet = random.randint(self.min_bet, self.max_bet) multiplier = round(random.uniform(self.min_multiplier, self.max_multiplier), 2) ``` **Нужна проверка настроек:** - Если min_bet = max_bet = 100, будет всегда ставка 100. - Если min_multiplier = max_multiplier = 1.11, будет всегда ставка на 1.11. **ОК, значит генерация ставок и множителя не приводит к ошибкам.** --- ### 3. **Главная тонкость: ОКРУГЛЕНИЕ!** Тонкий момент, из-за которого в реальном crash-казино тоже бывают ошибки расчёта, если не округлять правильно. Типичная проблема: - Ты делаешь `round(crash_multiplier, 2)`, т.е. множители как бы становятся дискретными: **1.00, 1.01, ..., 1.11, 1.12 ...** - А ставка делается на ровно **1.11**. - **Это сдвигает вероятность выпадения "краша" ровно на 1.11**. В реальном crash игровом движке выигрыш при краш = 1.110... не входит, только >1.11. **Проверь — кэшаут происходит при краш >= множитель или > множителя?** В твоём коде: ```python win = crash_value >= multiplier ``` То есть если `crash_value == 1.11` (т.е. округлилось до 1.11), это победа. Но в теории при честной игре должно быть: - Выигрыш только если множитель меньше фактического краша (т.е. **строго больше**), иначе честно говорить: на границе — проигрыш. --- #### ВАЖНО: Но при двойном округлении: - **Если U чуть больше чем дает исходный 1.11, но после округления до 2 знаков краш = 1.11,** ты получаешь win, хотя по математике должен был проиграть (ведь фактический crash чуть меньше 1.11, просто округлился!). - На длинных дистанциях это даёт "халявные" выигрыши, которых быть не должно! И именно это объясняет твой плюс в ~470к на миллион попыток. --- ### **КАК ИСПРАВИТЬ** 1. **Убрать округление crash_multiplier до 2 знаков для внутренней логики выигрыша/проигрыша!** 2. Округлять только для отображения (UI), а НЕ для расчёта исхода раунда! **Правильно:** - Для расчёта: ```python # НЕ округлять здесь! def generate_crash_number(): U = random.uniform(0, 1) if U >= 0.99999: crash_multiplier = 100000.0 else: crash_multiplier = 1.0 / (1.0 - U) crash_multiplier = max(min(crash_multiplier, 100000.0), 1.00) return crash_multiplier ``` - А для вывода на экран: ```python print(f"{crash_multiplier:.2f}") ``` --- ### **Bottom line** **Твой баг — в округлении crash-множителя ДО сравнения с множителем кэшаута!** - Если убрать округление — долгосрочный профит будет близок к нулю (шум ±1000-5000 на миллион игр). **Сводка:** - Округляй только для UI, не для логики выигрыша. - Сравнивай точные значения float. - Тогда матожидание будет корректным. --- **Проверь свой код с этой правкой, и прибыль исчезнет!** --- Если нужен рабочий кусок исправленного кода — напиши, приведу пример. Если хочешь обсудить, как тестировать — объясню, как считать руками и в numpy.
-
Ты всё делаешь правильно с точки зрения генерации crash-множителя — твоя формула `1/(1-U)` абсолютно каноническая, это стандартная для "Crash"-игры модель (см. [разбор на Habr и GitHub](https://habr.com/ru/articles/681742/)). В казино для честной игры математическое ожидание должно быть **меньше 1** из-за комиссии (house edge), иначе казино не имеет прибыли. У тебя её нет. ### В чём проблема? **Ты получаешь положительное матожидание**, потому что у тебя: - **Нет house edge (комиссии казино)**! - Ты каждую ставку делаешь на фиксированный минимальный возможный множитель **1.11**, т.е. ловишь самую частую, короткую игру. - Множитель генерируется по честной модели без вычета комиссии. --- ## Математика crash'a **Если crash генерируется формулой:** ``` mult = 1 / (1 - U) ``` где U ∈ [0,1), - **P(дожить до заданного x):** 1 - 1/x - **Математическое ожидание выигрыша на фиксированном множителе x:** - `E(x) = (1 - 1/x) * x = x - 1` - **А матожидание возврата ставки:** - `E(x)/x = 1 - 1/x` - При x=1.11: 1 - 1/1.11 ≈ 0.099 - То есть выигрышные ставки часты, но отыгрываются потерями. **НО! Без house edge** твоя система ЧЕСТНАЯ, а на длинной дистанции — даже чуть положительная из-за округлений и особенностей float (мелкие погрешности из-за округления до двух знаков). --- ## Как это решается в казино Настоящее казино ставит хедж: **Множитель рассчитывается с учётом комиссии!** - Например, house edge = 1% - Формула: ``` mult = (1 / (1 - U)) * (1 - house_edge) или mult = 1 / ((1 - U) / (1 - house_edge)) ``` - При x=1.11 коэффициент выплаты всегда меньше честного. --- ## Как исправить **Добавь комиссию казино (house edge) в генератор множителя!** Внеси её прямо в функцию `generate_crash_number()`: ```python def generate_crash_number(house_edge=0.01): # 1% комиссия казино U = random.uniform(0, 1) if U >= 0.99999: crash_multiplier = 100000.00 else: crash_multiplier = (1.0 / (1.0 - U)) * (1.0 - house_edge) crash_multiplier = max(min(crash_multiplier, 100000.00), 1.00) return round(crash_multiplier, 2) ``` **Теперь мат. ожидание будет отрицательным на любой дистанции!** - Например, для house_edge=0.01 (1% комиссия) и cashout на 1.11: - `E = (1 - 1/1.11) * 1.11 * 0.99 = 0.098 * 1.11 * 0.99 ≈ 0.108` - То есть проигрыш в среднем -0.01 (или -1%) на ставку. --- ## Итог **Без house edge** — система честная, с положительным или нулевым мат.ожиданием. **Добавишь house edge** — всё станет как в настоящем Crash, игрок всегда проигрывает на дистанции. ### Проверь свою функцию генерации множителя и внеси house edge. **Проблема не в рандоме, а в отсутствии комиссии казино!**
-
yellyex понравился пост в теме: Весёлые смешинки
-
Bananagang понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: До победы осталось 5 минут. Украина, с.2 т.76
-
Веточка- понравился пост в теме: Весёлые смешинки
-
Drakonian понравился пост в теме: Программирование[11]
-
Ты над этим смеялся?
-
Нейронки тупые, но некоторые люди еще тупее. Мы это знали.
-
Arzanis понравился пост в теме: Программирование[11]
-
Pigpol404 понравился пост в теме: До победы осталось 5 минут. Украина, с.2 т.76
-
Смешной коммент:
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Arzanis понравился пост в теме: Весёлые смешинки
-
Спасибо, без редакции было никак.
-
Смысл в том, что факт доставки обычного заказного письма фиксируется, а получения мыла - технически нет. Хотя могли спамить по всем доступным каналам, конечно.
-
А нахуя нужны дежурные, если они редко могут сами че-то решить, кек.
-
Там же код на плейн си, перебор для формошлёпа.
-
слепой старец - хуев сосалец
-
А шо параша? Я слышал у МТС всё весьма неплохо по внутренним процессам.