| ||||
| ||||
|
Важные объявления |
|
25.03.2007, 08:41 | #102 (permalink) | |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Цитата:
__________________
Arthur Grey |
|
0 |
25.03.2007, 13:30 TS | #104 (permalink) | |
Ветеран
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
|
Цитата:
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883 |
|
0 |
25.03.2007, 13:40 TS | #105 (permalink) | ||
Ветеран
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
|
Цитата:
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883 |
||
0 |
26.03.2007, 14:01 | #107 (permalink) | |
Новичок
Регистрация: 06.03.2007
Адрес: Москва
Сообщений: 27
|
Мой тест тоже готов. Лучше Sharky 13 ranks в 2,4 раза, 45 cards в 2,3 раза. Если откомпилировать в MVS, то получается еще в 1,3 раза быстрее (я делал консольное приложение), чем в Builder6. Честно не использовал сжатия мастей. Мог бы даже вынести подсчет маски флеша из внутреннего цикла, тоже касается номера профиля, но я этого не делал. (Профиль - количества 0,1,2 и 3 свободных карт на всех рангах, кроме ранга КД, всего их 1820.)
Цитата:
Интересно какие мены можно рассматривать, и каким должен быть новый тест? |
|
0 |
26.03.2007, 14:12 | #108 (permalink) | |
Бессмертный
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
|
Цитата:
Я как любитель уже вижу что мне тягатся с проф. програмистами смысла нет, остается только надеятся что кто-нибудь когда-нибудь выложит свои гениальные исходники. |
|
0 |
26.03.2007, 15:00 | #110 (permalink) | |||
Новичок
Регистрация: 06.03.2007
Адрес: Москва
Сообщений: 27
|
Цитата:
Для теста мен карт хорошо бы сделать оболочку, к которой можно было бы подключать свою dll или, наоборот сделать оболочку, как dll. Цитата:
Цитата:
Я абсолютно не знаю какие мены и разновидности правил нужно считать. Вообще, очень далек от карт. В моей программе уже 8 лет дама была обозначена, как D, а не Q, только сейчас исправил, посмотрев на демонстрацию Sharky из другой темы форума. Названия мастей я забываю периодически. В старой программе bet и fold у меня обозначены как play и refuse - я сам так придумал, зная правила. То, что я в казино никогда не был, думаю, что не нужно объяснять. Я не умею и не особенно хочу делать красивые визуальные эффекты в программах, как Sharky, больше я умею и предпочитаю писать алгоритмы. Кроме того, я не признаю MVS и NET Framework, хотя компилятор в MVS дает более быстрый код. И, вообще, в чем смысл этой работы? Быть во всеоружии, когда казино сделает мены карт, которые старые программы не успевали рассчитывать? Или еще какой-то смысл. |
|||
0 |
26.03.2007, 15:46 | #112 (permalink) |
Новичок
Регистрация: 06.03.2007
Адрес: Москва
Сообщений: 27
|
Программистских идей несколько. Основная идея в моем алгоритме - то, что по профилю и по количеству свободных карт в ранге КД можно расчитать количество комбинаций с парой (2, 2+2, 3 3+2, 4). Профиль определяется количеством 0,1,2,3 карт в рангах, кроме ранга КД. Каждое из этих чисел от 0 до 12, но их комбинаций 1820. Можно сделать массив [13][13][13][13], переводящий совокупность этих количеств, в номер от 0 до 1819 для экономии места (эта же идея используется, например, для определения комбинации box'а, особенно в случае 6 карт, но там индексы - ранги карт, а не количества). Но лучше сделать один номер - индекс, объединяющий 4 индекса - r0+13*r1+169*r2+2197*r3. Такой индекс инкриментально подсчитать модифицировать, при изменениях в ri. Для подсчета количества, например, трех карт без совпадения ранга, тоже нужно использовать профиль. Для определения старшинства комбинаций, кроме S,F,FS и FR приходится иметь профиль (его индекс) не для всех рангов, а для рангов от 0 до каждого ранга. Поэтому, для этих комбинаций нужно получать массив этих индексов [13]. Он не подлежит для инкрементальных изменений. Рассчет старшинства AK и всех комбинаций с парой обходится вообще без циклов, каждая величина считается сразу по формуле. Хотя, сравнение старшинства пары по первой карте, только чуть-чуть лучше таким образом, чем явное суммирование по меньшей половине ранга по немного более простым формулам.
Вообще, в моей основной процедуре нет ни одного цикла. Рассчет strait быстрее, как switch по всем 13 рангам КД с явными формулами, оптимизированными в каждом конкретном случае. Для рассчета флешей заводится индекс - свободность карт в масти, как биты. Этот индекс удобно инкриментально изменять, модифицировать, а также получать его для рангов от 0 до нужного. Сейчас из этого индекса у меня исключен ранг КД. Но, помоему, этого лучше не делать, придется переделывать. Более мелкие рекомендации - следить, чтобы элементы массивов, в т.ч. их подмассивы меньшей размерности, имели размер 1,2 или 4n байт. Для этого нужно добавить ложные записи в структуры или лишние элементы во вложенные массивы (считается, что поля в структурах не выравниваются по 2 или 4 байтам). Не использовать глобальных переменных. Правильно выбирать размер целых типов. Размещать часто используемые данные по небольшим адресам в стеке или в структурах. Понимать, как происходит адресация в стек, в структуру, по индексу массива. В силу этого, некоторые изменения, кажущиеся лучшими, могут дать тот же результат. Я не использовал ассемблерных вставок. Вообще, совет - чтобы программировать, нужно сначала хорошо владеть математикой - настолько, что бы суметь придумать новый метод, расчитать новые формулы. Все формулы по игре с заданным МО и дисперсией я вывел самостоятельно. Было достаточно знать, что какая-то формула существует, а иногда и этого не нужно. |
0 |
26.03.2007, 15:51 | #113 (permalink) | |
Бессмертный
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
|
Цитата:
|
|
0 |
26.03.2007, 15:52 TS | #114 (permalink) |
Ветеран
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
|
Для начала мои поздравления! Но сдаваться я еще не собираюсь
На счет стандартной терминологии.. предлагаю: Games -– количество просчитанных игр. 1 игра = варианту Bet/Fold (каждый конкретный showdown). Если у дилера закрыто 4 карты и в колоде например 30, то это будет C{30,4} = 27405 games. Hands -- количество просчитанных рук. То есть, если считаем всю колоду как C{52,1} * C{51,5} * C{46,4} то это будет games = C{52,1} * C{51,5} * C{46,4}, hands = C{52,1} * C{51,5} Если добавить обмены, hands остается прежним, games увеличивается на обмены * вскрытия... При обменах можно ввести QualifiedGames или просто QGames -- игры принятые в расчет МО, только непонятно как будем аккумулировать результаты, к общему знаменателю что ли?
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883 |
0 |
26.03.2007, 16:29 | #115 (permalink) | |
Новичок
Регистрация: 06.03.2007
Адрес: Москва
Сообщений: 27
|
Цитата:
Раз все свои цели с покером вы выполнили, какие же цели теперь вас интересуют? Или все же, для завершенности сделать этот алгоритм сжатия мастей, когда нет покупки игры, включить это в мою имеющуюся программу, обновить на своем сайте опять вместе со всеми исохдинками, тогда можно спокойно перейти к другим задачам, а об этой навсегда забыть с чувством полного удовлетворения. Всего для этого ощущения нужна неделя работы. Вы меня почти убедили. |
|
0 |
27.03.2007, 13:08 | #117 (permalink) | |
Новичок
Регистрация: 06.03.2007
Адрес: Москва
Сообщений: 27
|
В следующем тесте можно будет разрешить использование сжатия мастей в той же задаче. Когда время у всех будет порядка сотых долей секунды или меньше, можно будет усреднять по полному перебору еще 1,2 или 3 дополнительной мертвой карте. Но лучше сразу писать алгоритмы для всех возможных мен, для этого нужно знать, какие мены нужно рассматривать (в том числе, добор 6-ой карты). Это усложняет задачу.
Цитата:
Можно было бы сделать в переспективе коммерческую версию с красивым оформлением, но я точно не буду заниматься таким оформлением. Не лучше ли специализироваться, тем более, что у некоторых людей найдутся идеи по оформлению. Интересно, что думает по этому поводу Sharky? |
|
0 |
27.03.2007, 17:03 | #118 (permalink) | |
Участник
Регистрация: 13.10.2004
Сообщений: 165
|
Цитата:
|
|
0 |
27.03.2007, 23:44 TS | #119 (permalink) | ||
Ветеран
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
|
Цитата:
Насчет обменов, сжатий мастей и прочее -- я признаю абсолютно точные алгоритмы. Всяческие упрощения меня не интересуют.. Поэтому если соревноваться, то только при нулевой погрешности. Цитата:
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883 |
||
0 |
28.03.2007, 14:11 | #120 (permalink) | |
Новичок
Регистрация: 06.03.2007
Адрес: Москва
Сообщений: 27
|
Цитата:
[Зарегистрироваться?] . Опишу еще раз, как подсчитать МО Русского покера. Еще раз пересказать. 1) вызываете программу rp.exe, 2) можете нажать "Kind", 3) можете изменить настройки (см. pkr.doc, где они кратко описаны), 4) нажимаете на правую кнопку бокса дилера - самого верхнего и на кнопку, стоящую справа от 1-ого бокса, при этом нажмутся все кнопки на этом боксе, 5) нажимаете на кнопку "Start", 5) достоверное значение МО начинается после завершения цикла 2+ (см. pkr.doc). В одном цикле считается 4902 игры. Идут циклы 1,1+,2,2+,3,3+... Вычисление МО, используя деление на группы позволяет для получения той же точности просчитать в 100 раз меньше позиций. При этом используется тот факт, что дисперсия внутри каждой группы небольшая. Для того, чтобы подсчитать МО с точностью 0,1% нужно дождаться цикла с номером ~10 (точно я не помню). Результаты по в конце каждого цикла и после нажатия на кнопку "Stop" сохраняются в файл pkrlog.txt. Чтобы подсчитать на 2-ом боксе в пункте 4) делаете два бокса и на втором тоже нажимаете на все кнопки (можно подсчитать с любым количеством известных карт). Режим Play - сделан для рассмотрения покупки игры. Его можно использовать для получения ошибки алгоритма покупки игры, так как в случае Play все считается без приближений. Также можно проверить верность основного алгоритма подсчета позиции. Сделать это можно следующим образом: 1) Выбираете позицию (1 карта дилера и 5 карт или 6 на 1-ом боксе). 2) Выбираете "Play". 3) Нажимаете на 4 свободных карты дилера. 4) Нажимаете "Start" - происходит полный перебор 4 карт дилера с усреднением результата. 5) Выбираете "0 Change". 6) Нажимаете на кнопку с изображением таблицы слева от таблицы результатов. 7) В окне "Results" видите текущий и предыдущий результаты, а также их разницу. Аналогично можно проверить правильность всех программы, кроме доборов 6-ой карты (если мне не изменяет память). |
|
0 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Автозамена. TEST | Grey | Техническая поддержка форума | 10 | 21.12.2008 13:01 |
Japanese IQ Test | Vors | Поговорим за жизнь | 9 | 28.04.2008 11:40 |
был такой Donkey test | Гламуризатор-р-р | Около покерного стола | 1 | 22.04.2007 03:25 |
|
|