Регистрация
Регистрация Поиск Сообщество  
CGM > Покер > Школа покера > Теории, стратегии, основы покера
Опции темы

Алгоритмы

Важные объявления
Старый 24.12.2004, 15:49   #21 (permalink)
Ветеран
 
Аватар для denker
 
Регистрация: 28.04.2004
Сообщений: 1,377
Отправить сообщение для denker с помощью ICQ
Может я выбрал неправильный термин... Имелся в виду постоянно находящийся в памяти некий объект, позволяющий ускорить расчет раскладов....
__________________
http://forum.betflop.com/viewtopic.php?f=23&t=333
Дневник
denker вне форума      
Старый 24.12.2004, 19:11   #22 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Цитата:
Сообщение от pokerchatko писал(а) пт, 24 декабря 2004 14:47
Понятно, данный факт волновал многих, и никакой рум этот random теперь не использует, а использует дорогостоящие специализированные решения, с прилагающимися сертификатами. Но я не специалист.
Вот фриварный ГСЧ с исходниками на сях.
This is a Mersenne Twister pseudorandom number generator
with period 2^19937-1 with improved initialization scheme,
modified on 2002/2/10 by Takuji Nishimura and Makoto Matsumoto
[Зарегистрироваться?]
__________________
Arthur Grey
Grey вне форума      
Старый 25.12.2004, 12:20   #23 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
В принципе, 13^7=62 748 517. 4 байта под номер хватит. Итого Нужна табличка в 250 994 068 байт. Это для нефлешовых ситуаций.

korovin вне форума      
Старый 25.12.2004, 14:52   #24 (permalink)
Интересующийся
 
Аватар для Sfanrod
 
Регистрация: 14.02.2004
Адрес: Москва
Сообщений: 88
Очень интересно. Номер мы получим. А как по номеру определить какая именно комбинация. Или в табличке уже будет стоять числовое значение комбинации, но тогда и 2-х байтов достаточно ( 4-раза по 4бита ). Но тогда всё равно остаётся вопрос - предворительного анализа и заполнения таблички.

Кстати, ведь есть ещё и недостроенные комбинации (когда меньше 7-ми карт+ недострит), так что табличка будет 14^7, плюс байт под недостриты.
__________________
decimalseparator := \'.\';
Sfanrod вне форума      
Старый 25.12.2004, 22:10   #25 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
А без разницы какая комбинация. Просто сравнил номера и все. Заполнить ее надо всего 1 раз
korovin вне форума      
Старый 26.12.2004, 01:00   #26 (permalink)
Интересующийся
 
Аватар для Sfanrod
 
Регистрация: 14.02.2004
Адрес: Москва
Сообщений: 88
Да, но в задачах симуляции и анализа ситуации за столом на первый план выходят не сравнение, а определение относительной силы и рангов рук.
Для примера:
Флоп - у одного игрока пара двоек, у другого AK и недостроенный флеш.
Формально первый впереди, но фактически в большинстве ситуаций вторая рука оказывается более играбельная.
__________________
decimalseparator := \'.\';
Sfanrod вне форума      
Старый 26.12.2004, 14:35   #27 (permalink)
Ветеран
 
Аватар для denker
 
Регистрация: 28.04.2004
Сообщений: 1,377
Отправить сообщение для denker с помощью ICQ
Что есть "относительная сила"? Для КАЖДОЙ руки можно сказать чисто математически сильнее она или нет другой, даже с учетом предполагаемого тёрна и ривера...
__________________
http://forum.betflop.com/viewtopic.php?f=23&t=333
Дневник
denker вне форума      
Старый 26.12.2004, 16:16   #28 (permalink)
Интересующийся
 
Аватар для Sfanrod
 
Регистрация: 14.02.2004
Адрес: Москва
Сообщений: 88
Denker нам ведь в сущности не важно сильнее наша рука другой определённой руки (1на1), собственно потому что её нет, как конкретно-определённой руки. А есть N противников, совершивших некое множество некоторых действий. И важно для нас становиться вероятность выиграть, для нашей руки и для данных условий.

Вот эта вероятность, как я себе представляю и есть “относительная сила” руки. А относительная потому, что она будет разной, для одной и той же комбинации, но в разных условиях.
__________________
decimalseparator := \'.\';
Sfanrod вне форума      
Старый 26.12.2004, 16:55   #29 (permalink)
Ветеран
 
Аватар для denker
 
Регистрация: 28.04.2004
Сообщений: 1,377
Отправить сообщение для denker с помощью ICQ
В принципе согласен, математически определяется "абсолютная" 8-) сила руки, а если вводить зависимость от действий оппонентов, то понятие "относительная" действительно имеет место быть. Т.к. определить насколько изменится вероятность выиграть на данной руке, после определённых действий других игроков представляется достаточно сложным... Т.к. теже самые действия имеют различные значение от игрока к игроку, да и не только, один и тот же игрок в зависимости от своего состояния(тилт?) может совершать одни и теже действия в противоположных(!) ситуациях... И опеределить весовые коэфициенты каждому действию с определённой точностью позволяет только опыт, опирающийся на математический аппарат.
__________________
http://forum.betflop.com/viewtopic.php?f=23&t=333
Дневник
denker вне форума      
Старый 27.12.2004, 12:03     TS Старый   #30 (permalink)
Участник
 
Аватар для duMka
 
Регистрация: 15.09.2004
Адрес: Ural
Сообщений: 135
Hello!
Цитата:
Сообщение от Yras писал(а) чт, 23 декабря 2004 01:52
самы простой алгоритм тасовки одной колоды:
for (i=1;i<=52;i++) {a[i]=i;};
for (i=52;i>1;i--)
{
k=random(i)+1;
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}
Чтобы не быть голословным привожу результаты тестирования этого алгоритма. Я хотел посчитать МО и дисперсию выпадения пар, но глянув результат решил что это излишне. Результат говорит сам за себя. Можно бы это отнести за счёт некачества random, но я сделал два теста с разными колодами, так что видно перекос за счёт тасовки.

Всего 1 000 000 рук сдано. Вначале результат тасовки колоды, которая собрана по картам, т.е. колода 222233334444..ККАААА. Тасуем её и сдаём по две карты 10 игрокам.

1 игрок
,6647,7541,6496,6019,5306,4802,4271,4061,3727,3302 ,3045,2866 ,2578
2 игрок
,4767,7739,6840,6079,5619,5025,4577,4068,3830,3553 ,3187,2923 ,2656
3 игрок
,4348,6455,6857,6279,5779,5136,4703,4251,3794,3628 ,3420,3063 ,2801
4 игрок
,4458,4354,7187,6336,5779,5363,4870,4432,3983,3813 ,3450,3147 ,2980
5 игрок
,4472,4089,5860,6681,6100,5523,5023,4737,4219,3833 ,3544,3307 ,3070
6 игрок
,4535,4018,4099,6791,6286,5709,5179,4728,4398,3986 ,3613,3375 ,3215
7 игрок
,4250,4133,3743,5629,6302,5781,5406,4928,4531,4164 ,3845,3531 ,3429
8 игрок
,4463,4055,3809,3891,6626,5916,5580,5131,4750,4376 ,4129,3754 ,3492
9 игрок
,4495,4091,3861,3610,5592,6334,5803,5208,4943,4547 ,4226,3874 ,3587
10 игрок
,4465,4008,3867,3643,3703,6526,6074,5456,4953,4659 ,4329,3968 ,3786

А теперь колода собрана по мастям, т.е. 23456789TJQKA23....QKT

1 игрок
,4411,4786,5018,4940,4915,4832,4692,4504,4274,4348 ,4142,4027 ,3962
2 игрок
,4572,4531,4183,4680,4876,4895,4712,4636,4609,4435 ,4368,4268 ,4090
3 игрок
,4675,4490,4401,4350,4229,4614,4830,4851,4623,4597 ,4505,4306 ,4234
4 игрок
,4776,4573,4623,4545,4338,4264,4359,4478,4840,4834 ,4547,4548 ,4353
5 игрок
,4896,4811,4629,4657,4599,4276,4422,4234,4026,4508 ,4737,4759 ,4484
6 игрок
,4967,5044,4839,4622,4717,4567,4374,4243,4134,4126 ,4118,4356 ,4759
7 игрок
,4805,5092,5040,4872,4730,4648,4540,4354,4459,4229 ,4156,4091 ,4128
8 игрок
,4396,4358,4732,4979,4908,4837,4788,4553,4511,4441 ,4517,4195 ,4182
9 игрок
,4507,4369,4431,4187,4484,4811,4893,4833,4514,4645 ,4529,4492 ,4291
10 игрок
,4607,4579,4451,4450,4361,4167,4514,5021,4729,4753 ,4674,4536 ,4525

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

P.S. Первая колода перетасованная два раза становится довольно убедительна в плане распределения пар:

1 игрок
,4604,4530,4487,4596,4529,4638,4737,4625,4644,4519 ,4551,4565 ,4572
2 игрок
,4517,4574,4595,4572,4555,4545,4632,4496,4499,4658 ,4581,4521 ,4548
3 игрок
,4458,4507,4520,4465,4522,4581,4618,4478,4579,4619 ,4599,4665 ,4650
4 игрок
,4583,4538,4478,4596,4594,4624,4550,4475,4469,4490 ,4614,4688 ,4475
5 игрок
,4496,4600,4594,4605,4567,4574,4566,4591,4405,4589 ,4556,4619 ,4483
6 игрок
,4723,4631,4568,4501,4461,4598,4561,4399,4571,4563 ,4613,4696 ,4392
7 игрок
,4540,4497,4422,4519,4509,4551,4562,4532,4620,4479 ,4547,4588 ,4461
8 игрок
,4643,4528,4593,4744,4528,4613,4554,4572,4648,4443 ,4431,4576 ,4640
9 игрок
,4501,4669,4574,4490,4567,4457,4515,4567,4516,4615 ,4536,4664 ,4516
10 игрок
,4586,4499,4603,4630,4689,4605,4569,4602,4661,4742 ,4554,4498 ,4611



__________________
Thanks.
duMka вне форума      
Старый 27.12.2004, 13:58   #31 (permalink)
Аксакал
 
Регистрация: 15.03.2004
Адрес: Ukraine
Сообщений: 2,217
duMka, ты ГОНИШЬ...

Возможно, у тебя Random seed выдает повторяющиеся серии? В примере вызов Randomize не указан, так может ты забываешь его инициализировать?

Но скорее всего, у тебя проблемы с распознаванием и агрегированием результатов.

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

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

Ну, про нейросети я промолчу...
pokerchatko вне форума      
Старый 27.12.2004, 14:31     TS Старый   #32 (permalink)
Участник
 
Аватар для duMka
 
Регистрация: 15.09.2004
Адрес: Ural
Сообщений: 135
Hello!
Цитата:
Сообщение от pokerchatko писал(а) пн, 27 декабря 2004 13:58
duMka, ты ГОНИШЬ...

Возможно, у тебя Random seed выдает повторяющиеся серии? В примере вызов Randomize не указан, так может ты забываешь его инициализировать?

Но скорее всего, у тебя проблемы с распознаванием и агрегированием результатов.

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

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

Ну, про нейросети я промолчу...
Нет, не гоню , и ramdomize у меня в программе присутствует. Дело именно в алгоритме тасования.

Обратите внимание в первом случае результаты сразу видно что не случайны. Колода инициализирована так:
for i:=1 to 13 do
begin
koloda[i*4-3]:=i; koloda[i*4-2]:=i; koloda[i*4-1]:=i; koloda[i*4]:=i;
end;

Во втором случае результат более случаен и единственное отличие в инициализации колоды:

for i:=1 to 13 do
begin
koloda[i]:=i; koloda[i+13]:=i; koloda[i+26]:=i; koloda[i+39]:=i;
end;

Третий результат похоже имеет даже меньшую дисперсию чем второй (не посчитал но похоже на то), там единственно добавлена сортировка второй раз (просто скопировал кусок кода 2 раза).

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

P.S. Масти в программе для простоты я не учитывал, поэтому исследовал только появление пар. Кому интересно пример могу кинуть. Думаю потестировать разные способы тасования и сейчас буду переписывать с учётом мастей, и наверно надо карты на стол кидать и исследовать случайность выпадения покерных комбинаций и количества побед.
__________________
Thanks.
duMka вне форума      
Старый 27.12.2004, 15:50   #33 (permalink)
Аксакал
 
Регистрация: 15.03.2004
Адрес: Ukraine
Сообщений: 2,217
Чтож, осталось посмотреть, как ты подбиваешь результаты.

А алгоритм, собственно, известный.
pokerchatko вне форума      
Старый 27.12.2004, 15:53   #34 (permalink)
Интересующийся
 
Аватар для Sfanrod
 
Регистрация: 14.02.2004
Адрес: Москва
Сообщений: 88
duMKa ИМХО прав, если последнии карты, будут распределяться более-менее равномерно, то первые будут иметь тенденцию всплывать к началу колоды, отсюда и эффекты неравномерности.

Непонятна вот эта строчка:

k := random( i ) + 1; - почему именно рандом в пределах i ?

duMKa попробуй так:

k := random( 52 ) + 1;

ps. Про нейросети я тоже молчу, но по другой причине ...
__________________
decimalseparator := \'.\';
Sfanrod вне форума      
Старый 27.12.2004, 16:03   #35 (permalink)
Аксакал
 
Регистрация: 15.03.2004
Адрес: Ukraine
Сообщений: 2,217
Да ни фига подобного!

Прогоняю свою симуляцию на 1000000 для 10 игроков.

Каждая карта роздана конкретномуигроку минимальное количество раз - 37850, максимальное - 39080.

Мин. кол-во какой-нибудь пары у какого-нибудь игрока - 4330, максимальное - 4719

--------------------------

А насчет всплывания - это все надумано. Иллюзия.

Если кажется, что что-то всплывает - просто сдвигай массив вверх, начиная с выбранного элемента. Но это более накладно.
pokerchatko вне форума      
Старый 27.12.2004, 16:24   #36 (permalink)
Интересующийся
 
Аватар для Sfanrod
 
Регистрация: 14.02.2004
Адрес: Москва
Сообщений: 88
Ещё про RANDOMAZE, вызов этой процедуры через малые промежутки времени, будет преводить к инициализации близких случайных последовательностей.
Поэтому, RANDOMAZE нужно вызывать не каждый раз перед тусовкой колоды, а засунуть куда-нибуть в onFormShow.
__________________
decimalseparator := \'.\';
Sfanrod вне форума      
Старый 27.12.2004, 18:48   #37 (permalink)
Интересующийся
 
Регистрация: 12.06.2004
Сообщений: 59
2 duMka:
скинь пожалуйста как ты тасуешь.
прямо из кода
есть подозрение, что у тебя вместо
for i:=52 dowto 1 do
стоит
for i:=1 to 52 do

симптомы очень похожие
yras вне форума      
Старый 28.12.2004, 08:14     TS Старый   #38 (permalink)
Участник
 
Аватар для duMka
 
Регистрация: 15.09.2004
Адрес: Ural
Сообщений: 135
Hello!
Цитата:
Сообщение от Yras писал(а) пн, 27 декабря 2004 18:48
2 duMka:
скинь пожалуйста как ты тасуешь.
прямо из кода
есть подозрение, что у тебя вместо
for i:=52 dowto 1 do
стоит
for i:=1 to 52 do

симптомы очень похожие
Прошу прощения! Действительно, код я использовал не тот. Счёт у меня с единицы идёт. (Показалось без разницы) Кроме того, я как и Sfanrod решил что k := random(i) + 1; ошибка и поставил k := random(53). Действительно, я невнимательно отнёсся - решил что суть последовательная перестановка каждой карты с любой карты из колоды, но теперь вижу, что по Вашему алгоритму карта что переставленна в конец , больше уже не переставляется. Ну и соответственно начало колоды (откуда сдача идёт!) перемешанно более тщательно. Что-то в этом есть. Похоже алгоритм этот лучше чем у Sfanrod.

To pokerchatko and Sfanrod.
А почему собственно молчите про нейросети. Кажется это было бы интересно и в тему форума: "Применение нейросетей для анализа покерных ситуаций".




__________________
Thanks.
duMka вне форума      
Старый 28.12.2004, 09:43   #39 (permalink)
Интересующийся
 
Регистрация: 12.06.2004
Сообщений: 59
еще раз про алгоритм:
в начале выбирается 1 карта из 52. кладется на 52 место.
потом 1 из оставшихся 51, кладется на 51-е.
итд.
и тут неважно, с начала брать карты в раздачу или с конца или рандомом, распределение будет нормальным.
yras вне форума      
Старый 29.12.2004, 07:54   #40 (permalink)
Энтузиаст
 
Регистрация: 12.03.2004
Адрес: Екатеринбург
Сообщений: 337
Привет,
Мой ответ возможно не совсем в тему. А почему для поиска некой оптимальной сисетмы нужно писать именно свой покер рум и ботов? Почему не использовать тот же Turbo Texas Holdem 5 для симуляции раздач с игроками/профилями который готов уже сейчас? Каждый профиль можно заточить под агрессию/пассивность/беты/блеф-полублеф как на флопе для каждой позиции (1й, средний, последний со словом), так и на терне. Задать максимум бетов, к примеру максимум 3 бет на флопе с последним словом. Все это для каждой ситуации - их вроде около 25 (типа у тебя 2х стороний старший стрейт дро против 2х флешевой доски при неспаренной борде на флопе/на терне). Префлоп тоже настраивается. Есть уже готовые группы соперников - Агрессивные/Пассивные/Средние/Лузовые/Жеские. Подставляй заточенного бота/профиля и запускай считалку на N раздач.
ИМХО.
Mckoy вне форума      



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Быстрый переход
Правила форумов CGM Контакты Справка Обратная связь CGM.ru Архив Вверх Главная
 
Использование материалов сайта разрешено только при наличии активной ссылки на источник.
Все права на картинки и тексты принадлежат Информационному агентству CGM и их ПАРТНЕРАМ. Политика конфидециальности
CGM.ru на Youtube CGM.ru на Google+ CGM.ru в Twitter CGM.ru на Facebook CGM.ru в vKontakte CGM.ru в Instagram

В сотрудничестве с Pokeroff.ru
Текущее время: 06:11. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot