Панель режима настройки вида форума
Что это?   Выключить режим   Сбросить настройки по умолчанию   Установить цвет категорий на Цветное или Ч/Б  
Офлайн-казино / Блэкджек / Считаем БС....
Перейти вниз
Считаем БС....   ID:45612 Пт, 16 августа 2002 00:00 [#] [»)
ЗилОн Закрыть блок (иконки IM) Форумы Покер.ру
Добрый день, уважаемые господа!
Недавно начал сам программировать. Пока удалось повторить "Таблицу различных исходов при наборе карт дилером" из книжки Лесного. А теперь вопрос.
Захотелось посчитать, например, брать или не брать на 13 против 8. Мысль такая: так как БС не известна(мы её считаем) придётся рассмотреть варианты
1/13 - приходит туз и снова считать брать/не брать 14 пр.8
,,,,,
4/13 - приходит 10 -> перебор.

Получается рекурсия как в функции факториал
F(n) = n*F(n-1) F(1)=1

Если не сложно, поправьте меня или поделитесь опытом.
Спасибо.
ЗЫ Можно мылом.
        
 
Re: Считаем БС....   ID:45614   ответ на 45612 Пт, 16 августа 2002 00:00 («] [#] [»)
Kerjo Закрыть блок (иконки IM) Форумы Покер.ру
Если я правильно понял ...

Начни с конца. "Заложи" базовую стратегию, согласно которой игрок набирает всегда до тех пор
пока у него не станет 21. Посчитай MO при всех возможных вариантах у дилера. Отступи на шаг -
пусть теперь игрок набирает всегда до 20. Опять посчитай МО. И т. д. Таким образом найдешь
оптимальную стратегию против каждой карты дилера.

Даблы и сплиты просчитаешь после того, как "нащупаешь" основную стратегию.

Я, правда, поступил несколько иначе - сразу заложил "правильную" БС, чтобы "скакать" от нее в
разные стороны.

Лично у меня возникла проблема с алгоритмизацией сплитования. Вначале даже хотел сделать
рекурсию. Но потом стало лень искать "образец" (С++ 'ом пользуюсь второй раз в жизни) и в
результате обошелся без рекурсии.

Я уж было сам дописал свой симулятор, но пришло лето и ...

Как доделаешь, свистни, сравним результаты.
        
 
Считаем БС... - Самостоятельно!   ID:45617   ответ на 45614 Пт, 16 августа 2002 00:00 («] [#] [»)
Pan Votruba Закрыть блок (иконки IM) Форумы Покер.ру
> Начни с конца. "Заложи" базовую стратегию, согласно которой игрок набирает
> всегда до тех пор пока у него не станет 21. Посчитай MO при всех возможных
> вариантах у дилера. Отступи на шаг - пусть теперь игрок набирает всегда до 20.
> Опять посчитай МО. И т. д. Таким образом найдешь оптимальную стратегию
> против каждой карты дилера.

"Самая кортокая дорога та, которую знаешь!" (с)

Kerjo, трудности были (имхо) за год с лишним до выхода книг Лесного. Инфы было мало и все
тесты приходилось разрабатывать самому (самим точнее!)... Сейчас проще, есть масса
контрольных цифр и практически любой бонус УЖЕ кем-то считался, не говоря о
распостроненных правилах.
Предложенные тобой алгоритмы (идеи) не смые короткие; долгой дорога к БС покажется. Ео
главное - чтобы хоть какой-то вариант заработал правильно.

Удачи!
ПВ
З.Ы. Всем програмерам желаю самостоятельно преодолеть трудности! Для ориентира: вся БС
(правила произвольные) считается менее чем за 0.1 сек на Цел-600...
        
 
Re: Считаем БС... - Самостоятельно!   ID:45619   ответ на 45617 Пт, 16 августа 2002 00:00 («] [#] [»)
HECTOP Закрыть блок (иконки IM) Форумы Покер.ру
"Не боги горшки обжигают"

Разберемся Smile
Естественно когда есть контрольные цифры, все намного проще.
Хотя книга Лесного мне показалась не очень, даже слова не подберу.
Академичности в ней мало что ли. Лично я люблю полные и подробные математические
выкладки. А то как в институте было: "Не трудно видеть что из формулы 3 следует 4" А меду ними
два листа выкладок Smile
А про скорость современных компов и говарить не приходится. Все очень быстро. Если уж только
сильно криво прогу не напишешь Smile (Да и то это надо еще очень постараться)
        
 
Re: Считаем БС....   ID:45620   ответ на 45612 Пт, 16 августа 2002 00:00 («] [#] [»)
HECTOP Закрыть блок (иконки IM) Форумы Покер.ру
Привет всем.
А я вот тоже начал изучать BJ. Надоели онлайновые игры (проблемы выигрыши вывести).
Решил попытатья в реале. Но прежде чем соваться играть решил погрузиться в математику.
Второй день уже пытаюсь воспроизвести указанную тобой табличку из Лесного.
Мозги скрепят Smile Теовер вспомнил. Пишу на VBA в Excel-ке (чтоб проще и быстрее, да и опыт
прогрмирования там большой). Алгоритмики оказываются не простые в смысле весьма
разветвленные. Ну ничего справимся. Уж если в сапера штуку баксов выиграли, то и BJ одолеем Smile
        
 
Про алгоритмы   ID:45621   ответ на 45620 Пт, 16 августа 2002 00:00 («] [#] [»)
HECTOP Закрыть блок (иконки IM) Форумы Покер.ру
Я так понимаю, что чисто средствами тервера в лоб посчитать вероятности не получается, а
придется перебирать все возможные цепочки карт и анализировать их в разветвленном
алгоритме.
        
 
Re: Считаем БС....   ID:45629   ответ на 45612 Пн, 19 августа 2002 00:00 («] [#] [»)
ЗилОн Закрыть блок (иконки IM) Форумы Покер.ру
Добрый вечер!
Вы будете смеятся, но для того, чтобы посчитать БС пришлось заново переписать код.
...И сразу разочарование. Контрольный пример: берём против туза.
Значения среднего выигрыша(проигрыша) на стр. 154 книги Лесного совпадают для 20, 19,18
А дальше фигня:
для 11 у меня ~ -22.7
для 10 у меня ~ -22.7 (в пределах погрешности*)
для 9 у меня ~ -34.75
для 9 у меня ~ -41.6

*погрешность может возникнуть из-за того, что вероятности набора дилером с туза я забил из
книжки. То есть {17,18,19 - 13.08 и т.д.)

Я считал так. Предположим, у игрока 20 очков, а у дилера туз. Делаем серию экспериментов -
в одном случае берём, в другом нет. Выясняется, что брать невыгодно. Поэтому, ЕСЛИ на 19
наберём 20, то НЕ БЕРЁМ. Может тут ошибка? Я предполагаю, что это функция непрерывна,
однако уже на 11 следует всплеск Smile))



Мне очень интересен алгоритм, по которому считали Вы. Как Вы программировали игрока, его
действия?

ЗЫ Выкладываю кусочек кода, дабы не быть голословным.

class Igrok {
public:
Igrok();
Igrok(int opr_summa_o4kov); //òèïà óæå ãîòîâûé
// Igrok(int karta1, int karta2); //òèïà óæå ãîòîâûé


int kolvo_kart; ///êîëè÷åñ&ogr ave;âî êàðò Âñïîìîã&agrave ;òåëüíàÿ âåëè÷èí&agrav e;
int summa_o4kov; ///êîëè÷åñ&ogr ave;îâ î÷êîâ
int nabor[16];

//double veroyatnocti[7];
// // 17, 18, 19, 20, 21,BJ, ïåðåáîð
int zest_myag; //bool
int perebor;

void vzyat_karty();
int* cdelat_nabor();
};
        
 
Re: Считаем БС....   ID:45633   ответ на 45612 Пт, 23 августа 2002 00:00 («] [#] [»)
ЗилОн Закрыть блок (иконки IM) Форумы Покер.ру
Нда...книжка Лесного преподносит всё больше и больше сюрпризов. Я решил проверить
стратегию удвоения. В-принципе, для подсчёта "выгодности" программирование не нужно.
Достаточно калькулятора. Идея такая. Есть вероятности набора определённого кол-ва очков
дилером и соотвветсвенно, такое же распределение можно получить для игрока на дабле. (Карта
берётся ВСЕГО ОДНА, всего 13 вариантов Smile ). Далее считаем так. Пусть игрок набирает меньше
17 - тогда он проиграет в случае, если дилер наберёт 17,18....21 и выиграет, если дилер уйдёт.
Если у игрока 17 - он проиграет, только если у дилера 18 - 21 и выиграет, если у дилера перебор.
Надеюсь алгоритм понятен. Так вот, в очень многих случаях (10,11 vs 7 и выше) у меня Дабл не
проканывет. Один раз пересчитал вручную Sad(((
Какие будут соображения?

ЗЫ Очень хотелось бы поделится именно програмистскими штучками. Как Вы алгоритмизируете
игру? Как представляете колоду? (у меня пока бесконечная)
Выкладываю кусочек кода, чтобы было о чём поговорить....

функция набора карт игроком

int* Igrok::cdelat_nabor()
{
do{
vzyat_karty();

summa_o4kov = 0;
for (int i=0; i<16; && &aring;&ntilde;&ograve;&uuml; &ograve;&oacute;&ccedil; (nabor[i]== (summa_o4kov (summa_o4kov+10) (zest_myag== + /// 1 1) 10; 17); < i++) if nabor[i]; summa_o4kov=summa_o4kov zest_myag=1; { } }while> 21)
perebor = 1;
return nabor;
}

Простейший вариант. Я пока не знаю, как считать таблицу и как её использовать....
        
 
Re: Считаем БС....   ID:45634   ответ на 45633 Пт, 23 августа 2002 00:00 («] [#] [»)
Pan Votruba Закрыть блок (иконки IM) Форумы Покер.ру
>> Так вот, в очень многих случаях (10,11 vs 7 и выше) у меня Дабл не
>> проканывет. Один раз пересчитал вручную Sad(((
>> Очень хотелось бы поделится именно програмистскими штучками.
>> Как Вы алгоритмизируете игру?
ЗилОн, может ты просто не своим делом занимаешься??... -)
Подумай о смене амплуа (без ехидства сказано).

Начинать надо не свопросов, а споиска - "blackjack + soft/program". С пяток версий ОТКРЫТОГО
кода на паскале, С, С++ находится сразу. Пусть они буржуйские, но не можешь сам сообразить -
разбирайся в чужом.

Следующий шаг - набор карт дилером. Всё должно от зубов отскакивать! Далее - игрок (все
стадии игры); потом - экзотические бонусы.

По осени (поищи!) выкладывал на С функцию набора карт дилером.

Удачи!
ПВ
        
 
Re: Считаем БС....   ID:45642   ответ на 45612 Вт, 27 августа 2002 00:00 («] [#] [»)
ЗилОн Закрыть блок (иконки IM) Форумы Покер.ру
2 Pan Votruba
Спасибо за Ваши советы, но пока они мало помогают Wink

Итак, я, последовава совету Kerjo решил не изобретать велосипед, а "забить" готовую базовую
стратегию, предварительно её ПРОВЕРИВ. Рассуждаем так:
1) Берём произвольную карту дилера.
2) Рассматриваем первые 2 карты игрока и подсчитываем очки. На 21 "взять" не удасться Smile
Переходим к [кол-ву очков -1] ( в данном случае к 20)
3) Сравниваем два МО: первое, когда берём карту, второе - когда нет. Если брать выгодно (МО
больше) СТАВИМ напротив этого кол-ва очков плюс, то есть надо брать.
!!!!
4) Используя непрерывность??? делаем такой переход: если с какого-то МЕНЬШЕГО, ЧЕМ Х кол-
ва очков набираем Х очков, ДЛЯ КОТОРЫХ ПРЕДВОРИТЕЛЬНО было подсчитано, что брать
выгодно - берём карту.
После не забываем всё-таки выполнить пункт 3, то есть сравнить два МО и решить, ставить "плюс"
или нет.

Это теория, а на практике я получил противоречие.
У игрока 8-18, у дилера 10. У меня получается, что брать карту не надо (МО = -25,95 против -24.15)
Возможно, брать требуется для того, чтобы вытащить десятку?
Какие у Вас будут комментарии?

PS Если вы использовали алгоритм, отличный от изложенного, с огромным удовольствием с ним
ознакомлюсь...
        
 
Re: Считаем БС....   ID:45643   ответ на 45642 Вт, 27 августа 2002 00:00 («] [#] [»)
Kerjo Закрыть блок (иконки IM) Форумы Покер.ру
На непрерывность я бы не стал в данном случае рассчитывать, хотя бы потому, что функция
дискретная. И к тому же это не позволит тебе обнаружить точки, где более выгодно сплитование
и дабл.

В отношениии карты к 8-18 против 10-ки - скорее всего у тебя где-то ошибка в алгоритме. (Хотя я
сам до сих пор еще не дописал свой симулятор и собственно ручно не проверил).
        
 
Читаем БС?   ID:45647   ответ на 45642 Ср, 28 августа 2002 00:00 («] [#] [»)
Pan Votruba Закрыть блок (иконки IM) Форумы Покер.ру
> 2 Pan Votruba
> Спасибо за Ваши советы, но пока они мало помогают Wink
Советы были направлены на поиск недостющей инфы в инете... - Что это так трудно???
Ну подсказываю топик:
http://www.poker.ru/?FID=1&LMID=1&MID=3&IN=1&FWIN=1&FMID=2244
А здесь:
http://www.poker.ru/?FID=1&IN=1&MID=3&FWIN=3&FMID=2258
в приаттаченном файле - набор карт дилером. (Демонстрация алгоритма, не более)

Второй совет тебе давался про фри-софт. На известных поисковиках набираешь
<blackjack & (software|program|code)> и получаешь сотни ссылок, в том числе и исходников
времен DOSa - середины 90-х годов... РАЗБИРАЙСЯ в них, если тематика действительно
интересна!

> Итак, я, последовава совету Kerjo решил не изобретать велосипед ...
> .............
> Это теория, а на практике я получил противоречие.
> У игрока 8-18, у дилера 10. У меня получается, что брать карту не надо
"Маразм крепчал..." (с)
Нет! Ну кому интересно, ЧТО и КАК ты делал неправильно? -(
Вот положительные примеры: Блитц, Петер, Алекс-Кардинал сделали свои версии софта
самостоятельно и без лишнего шума! И спокойно продемонстрировали... - И по 4 значащие
цифры результаты совпадают у всех (основные посиции БС).

С точки зрения алгоритмов, последовательность "познания БД" очевидна:
1) набор карт дилером (все форсированно!);
2) набор карт игроком на ЖЕСТКИХ на 12 и выше;
3) набор карт игроком на МЯГКИХ картах;
4) набор карт игроком на ЖЕСТКИХ до 12;
5) other.

Удачи!
ПВ
З.Ы. Честно: не ищи здесь нянек! - Заматерей, чтобы тебя считали равным...
        
 
Re: Считаем БС....   ID:45649   ответ на 45643 Чт, 29 августа 2002 00:00 («] [#] [»)
ЗилОн2 Закрыть блок (иконки IM) Форумы Покер.ру
На непрерывность я бы не стал в данном случае рассчитывать, хотя бы потому, что функция
дискретная.
Под непрерывностью я понимаю следующее утверждение: если известно, что на Х(для простоты
жёстких) очках я беру карту - я тем более должен брать на Х-1.

И к тому же это не позволит тебе обнаружить точки, где более выгодно сплитование
и дабл.
Не знаю, по-моему я их уже могу обнаруживоть. Рассмотрим пример. Сплит 6 (3,3) против 6.
Если не сплитуем МО = -1,28%
Ссли сплитуем МО - положительное (у меня пока численно с Лесным не совпадает Sad )
Вывод очевиден Smile


В отношениии карты к 8-18 против 10-ки - скорее всего у тебя где-то ошибка в алгоритме. (Хотя я
сам до сих пор еще не дописал свой симулятор и собственно ручно не проверил).
Ошибка найдена - см. ниже.
ЗЫ Если не секрет, Вы в казино ходите?

2 All серьёзные программеры.
Подкиньте, пожалуйста, задачку которую сами осознали.
Типа, мой друг утверждает, что на 16 против 10 брать не выгодно - мелочь выгоднее отправть
дилеру. Учитываете ли Вы Факт, что в шафле лежит КОНКРЕТНАЯ карта, то есть, если её НЕ
ВОЗЬМЁТ игрок - ИМЕННО её ВОЗЬМЁТ дилер.
А я заодно свой код проверю Smile
        
 
Re: Читаем БС?   ID:45650   ответ на 45647 Чт, 29 августа 2002 00:00 («] [#] [»)
ЗилОн2 Закрыть блок (иконки IM) Форумы Покер.ру
> 2 Pan Votruba
> Спасибо за Ваши советы, но пока они мало помогают Wink
Советы были направлены на поиск недостющей инфы в инете... - Что это так трудно???
Ну подсказываю топик:
http://www.poker.ru/?FID=1&LMID=1&MID=3&IN=1&FWIN=1&FMID=2244
А здесь:
http://www.poker.ru/?FID=1&IN=1&MID=3&FWIN=3&FMID=2258
в приаттаченном файле - набор карт дилером. (Демонстрация алгоритма, не более)

Извините, если вам не знакомы операторы do-while и case, то эффективность Вашего кода
сильно страдает.... Не обижайтесь, просто мне проще алгоритм описать словами...
НО обязательно дома разберу Ваши идеи...


Второй совет тебе давался про фри-софт. На известных поисковиках набираешь
<blackjack & (software|program|code)> и получаешь сотни ссылок, в том числе и исходников
времен DOSa - середины 90-х годов... РАЗБИРАЙСЯ в них, если тематика действительно
интересна!

Искал в Яндексе и Google, чест.слово... Мож стоит Lycos попробывать?


> Итак, я, последовава совету Kerjo решил не изобретать велосипед ...
> .............
> Это теория, а на практике я получил противоречие.
> У игрока 8-18, у дилера 10. У меня получается, что брать карту не надо
"Маразм крепчал..." (с)
Нет! Ну кому интересно, ЧТО и КАК ты делал неправильно? -(

Согласен, это скорее была психологическая уловка, чтобы привлечь внимание посетителей
форума
Smile
Кстати, я нашёл ошибку. Как не удивительно, жёсткие комбинации могут переходить в мягкие И
НАОБОРОТ. Таким образом, я ошибочно трактовал набор 5-7-туз как мягкий...


Вот положительные примеры: Блитц, Петер, Алекс-Кардинал сделали свои версии софта
самостоятельно и без лишнего шума! И спокойно продемонстрировали... - И по 4 значащие
цифры результаты совпадают у всех (основные посиции БС).

я потихоньку приближаюсь Smile

С точки зрения алгоритмов, последовательность "познания БД" очевидна:
1) набор карт дилером (все форсированно!);
2) набор карт игроком на ЖЕСТКИХ на 12 и выше;
3) набор карт игроком на МЯГКИХ картах;
4) набор карт игроком на ЖЕСТКИХ до 12;
5) other.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Если не сложно, подкиньте какую-нибудь задачку для обсчёта.
Что-то типа double на 9 vs 8...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



Удачи!
ПВ

З.Ы. Честно: не ищи здесь нянек! - Заматерей, чтобы тебя считали равным...

Спасибо ещё раз. И взаимно удачи.
        
 
Re: Читаем БС?   ID:45651   ответ на 45650 Пт, 30 августа 2002 00:00 («] [#]
Pan Votruba Закрыть блок (иконки IM) Форумы Покер.ру
>> А здесь:
>> http://www.poker.ru/?FID=1&IN=1&MID=3&FWIN=3&FMID=2258
>> в приаттаченном файле - набор карт дилером. (Демонстрация алгоритма, не более)
> Извините, если вам не знакомы операторы do-while и case,
> то эффективность Вашего кода сильно страдает....

"А мне то же самое. Только... с ПЕРЛАМУТРОВЫМИ пуговицами" (с)
-(((
ЗилОн2!
Во-первых, на тематическом форуме Главная инфа - правильный результат. Неважно каким
образом полученный. После програмной реализации - на фортране, бэйсике и т.д.;
вычисленный на логарифмической линейке или в уме; прочитанный где-либо...
Во-вторых, как было мною СРАЗУ указано - приводится исходник, демонстрирующий работу
алгоритма в НАИПРОСТЕЙШЕМ случае - набор карт дилером на равномерной, бесконечной
колоде. В частности, результаты совпадают с таблицей у Лесного. Для мало-мальски
САМОСТОЯТЕЛЬНО МЫСЛЯЩИХ программистов этот код уже может служить "точкой опоры" для
исчерпывающего моделирования БС.
В-третьих, лично Ваша программистская и "гэмблинг" квалификация (соотношение полезной
инфы/количество постов) пока ещё НЕ позволяют делать/давать публичные оценки кому- и чему-
либо... Ну, кроме наличия-отсутствия "перламутровости", разумеется.

*** Для програмеров:
За приведенный фрагмент кода не стыдно. По крайней мере, он, кроме правильности
исполнения, обладает еще двумя достоинствами: предельными (имхо) лаконичностью и
быстротой исполнения. Альтернативных реализаций в отечественном исполнении не видел.
((Напомню: вся БС для произвольного состава карт расчитывается быстрее 0.1 сек, т.е.
справедливо можно полагать - в реальном времени.))
У кого есть лучшие варианты - кидайте на мыло. Обсудим в привате.

Удачи!
ПВ
        
 
 
Предыдущая тема:Периодика по БД
Следующая тема:Wong или Лесной?
Закрыть блок Быстрый переход к форуму
  
Текстовая версия  RSS лента
Вернуться вверх

Закрыть блок Текущее время: Сб, 28 декабря 08:13:33 2024
Закрыть блок Время, затраченное на генерацию страницы: 0.03370 секунд