Re: Soft Speed Test ID:25038 ответ на 24894 |
Вс, 25 марта 2007 06:12 («] [#] [») |
|
|
Считает быстро, только с ошибками ))
Посмотри при большем кол-ве выкинутых карт чем 10 например. У меня и Grey совпадает, твое решение - новый вариант.
|
|
|
Re: Soft Speed Test ID:25039 ответ на 24894 |
Вс, 25 марта 2007 07:41 («] [#] [») |
|
|
Fabrica писал | Считает быстро, только с ошибками ))
Посмотри при большем кол-ве выкинутых карт чем 10 например. У меня и Grey совпадает, твое решение - новый вариант. | да нет, вроде бы сходится... Только у него тузы "неправильно" расположены, может быть из-за этого у тебя так получилось
|
|
|
Re: Soft Speed Test ID:25040 ответ на 24894 |
Вс, 25 марта 2007 12:17 («] [#] [») |
|
|
Цитата: | Короче гроб.. В лучшем случае будет в 210 (C{5,4} * C{42,1}) раз дольше Кто интересно будет ждать 3.5 часа? | Разве это не повод увеличить скорость еще раз в 100?
|
|
|
Re: Soft Speed Test ID:25041 ответ на 24894 |
Вс, 25 марта 2007 12:30 («] [#] [») |
|
|
Fabrica писал вс, 25 марта 2007 06:12 | Считает быстро, только с ошибками )) | Эээ. Я бы попросил повнимательнее...
|
|
|
Re: Soft Speed Test ID:25042 ответ на 24894 |
Вс, 25 марта 2007 12:40 («] [#] [») |
|
|
Korovin писал вс, 25 марта 2007 12:17 | Цитата: | Короче гроб.. В лучшем случае будет в 210 (C{5,4} * C{42,1}) раз дольше Кто интересно будет ждать 3.5 часа? | Разве это не повод увеличить скорость еще раз в 100? | Ну это вряд ли. Процентов 5-10% еще выжать можно.. Остальное только всякими сжатиями мастей и прочими хитростями.. Плюс нужен Int128
|
|
|
Re: Soft Speed Test ID:25043 ответ на 24894 |
Вс, 25 марта 2007 18:05 («] [#] [») |
|
|
Да, прошу прощения не заметил, что тузы в начале, а не в конце как у меня и Grey.
|
|
|
Re: Soft Speed Test ID:25044 ответ на 24894 |
Пн, 26 марта 2007 13:01 («] [#] [») |
|
|
Мой тест тоже готов. Лучше Sharky 13 ranks в 2,4 раза, 45 cards в 2,3 раза. Если откомпилировать в MVS, то получается еще в 1,3 раза быстрее (я делал консольное приложение), чем в Builder6. Честно не использовал сжатия мастей. Мог бы даже вынести подсчет маски флеша из внутреннего цикла, тоже касается номера профиля, но я этого не делал. (Профиль - количества 0,1,2 и 3 свободных карт на всех рангах, кроме ранга КД, всего их 1820.)
<img src="http://forum.cgm.ru/attachments/casino_soft/49863-soft_speed_test_-poker-snap.gif" border="0" alt="Название: snap.gif
Просмотров: 449
Размер: 33.7 Кб" style="margin: 2px" />
Korovin писал вс, 25 марта 2007 13:17 | Разве это не повод увеличить скорость еще раз в 100? | Полностью присоединяюсь - за счет сжатия мастей. При мене 1 карты можно убыстрить в 17 раз, 2 карт - в 113 раз, 3 - в 333 раза, 4 - в 448 раз, 5 карт - в 221 раза, 1+1 карты - в 569 раз, 2+1 - в 5004 раза. Я не шучу. Флеши считаются очень быстро, саршинство комбинации у меня считается сейчас в 1,9 раза быстрее, чем оболочка теста+ расчет нет игры (усредняя по всем игровым комбинациям (в усреднение не входит "нет игры")).
Интересно какие мены можно рассматривать, и каким должен быть новый тест?
|
Вложение:
kosshams.exe
(Размер: 202.50KB, Загружено 758 раз)
|
|
|
|
Re: Soft Speed Test ID:25045 ответ на 24894 |
Пн, 26 марта 2007 13:12 («] [#] [») |
|
|
Цитата: | Интересно какие мены можно рассматривать, и каким должен быть новый тест? | Вы теперь лидер, сам и предлагайте. Скорость это конечно важно, но уверен что многим было бы интресно сравнить еще и правильность своих алгоритмов на полном переборе (пусть и не так быстро), ведь ошибку при этом видно сразу. Только пожалуйста, не допускайте +МО в тестах, зарубите выплаты например.
Я как любитель уже вижу что мне тягатся с проф. програмистами смысла нет, остается только надеятся что кто-нибудь когда-нибудь выложит свои гениальные исходники.
|
|
|
Re: Soft Speed Test ID:25046 ответ на 24894 |
Пн, 26 марта 2007 13:19 («] [#] [») |
|
|
Ух ты. А что такое N?
|
|
|
Re: Soft Speed Test ID:25047 ответ на 24894 |
Пн, 26 марта 2007 14:00 («] [#] [») |
|
|
Sharky писал пн, 26 марта 2007 14:19 | А что такое N? | Так как количество у дилера комбинаций "нет игры", "<", "=" среди всех комбинаций его 4 закрытых карт считается комбинаторно, и не зависит от количества выбывших из колоды карт, то лучше считать количество вызовов этой процедуры (N), а не суммарное количество комбинаций у дилера. Это логичнее. Нужно ввести какую-нибудь стандартную терминологию. Например, назвать это основной процедурой, или позицией без мен, или еще как-то. Другая процедура - расчет покупки игры. Быстродействие характеризуется долей случаев, когда надо расчитывать покупку игры для основной процедуры, и отношением времени выполнения основной процедуры и расчета покупки игры. Раньше я дал неверную оценку замедления своей программы от покупки игры (в 2 раза). На самом деле - всего на ~1/5.
Для теста мен карт хорошо бы сделать оболочку, к которой можно было бы подключать свою dll или, наоборот сделать оболочку, как dll.
Korovin | но уверен что многим было бы интресно сравнить еще и правильность своих алгоритмов на полном переборе (пусть и не так быстро), ведь ошибку при этом видно сразу | Это решило бы вопрос сравнения правильности. Сам я использовал старую свою программу для тестирования новой. Использовал единичные сравнения и сравнение при переборе в тесте по каждой позиции. Что намного ускорило процесс отладки. Весь новый код я написал заново за полторы недели.
Korovin | Только пожалуйста, не допускайте +МО в тестах, зарубите выплаты например. | Эта мысль мне непонятна.
Я абсолютно не знаю какие мены и разновидности правил нужно считать. Вообще, очень далек от карт. В моей программе уже 8 лет дама была обозначена, как D, а не Q, только сейчас исправил, посмотрев на демонстрацию Sharky из другой темы форума. Названия мастей я забываю периодически. В старой программе bet и fold у меня обозначены как play и refuse - я сам так придумал, зная правила. То, что я в казино никогда не был, думаю, что не нужно объяснять. Я не умею и не особенно хочу делать красивые визуальные эффекты в программах, как Sharky, больше я умею и предпочитаю писать алгоритмы. Кроме того, я не признаю MVS и NET Framework, хотя компилятор в MVS дает более быстрый код.
И, вообще, в чем смысл этой работы? Быть во всеоружии, когда казино сделает мены карт, которые старые программы не успевали рассчитывать? Или еще какой-то смысл.
|
|
|
Re: Soft Speed Test ID:25048 ответ на 24894 |
Пн, 26 марта 2007 14:06 («] [#] [») |
|
|
Мену карт можно тоже написать за 1 неделю или еще быстрее.
|
|
|
Re: Soft Speed Test ID:25049 ответ на 24894 |
Пн, 26 марта 2007 14:46 («] [#] [») |
|
|
Программистских идей несколько. Основная идея в моем алгоритме - то, что по профилю и по количеству свободных карт в ранге КД можно расчитать количество комбинаций с парой (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 байтам). Не использовать глобальных переменных. Правильно выбирать размер целых типов. Размещать часто используемые данные по небольшим адресам в стеке или в структурах. Понимать, как происходит адресация в стек, в структуру, по индексу массива. В силу этого, некоторые изменения, кажущиеся лучшими, могут дать тот же результат.
Я не использовал ассемблерных вставок.
Вообще, совет - чтобы программировать, нужно сначала хорошо владеть математикой - настолько, что бы суметь придумать новый метод, расчитать новые формулы. Все формулы по игре с заданным МО и дисперсией я вывел самостоятельно. Было достаточно знать, что какая-то формула существует, а иногда и этого не нужно.
|
|
|
Re: Soft Speed Test ID:25050 ответ на 24894 |
Пн, 26 марта 2007 14:51 («] [#] [») |
|
|
Цитата: | И, вообще, в чем смысл этой работы? Быть во всеоружии, когда казино сделает мены карт, которые старые программы не успевали рассчитывать? Или еще какой-то смысл. | Даже не знаю что тут ответить. Ведь все, кто отметился в этой ветке, потратили на эту работу какое-то время, значит видели в ней СВОЙ смысл. Я тоже люблю кодировать алгоритмы, но исключительно для души, это мое хобби. Задачи, которые я ставил для себя, делая свой софт давно уже решены. Единственный вопрос, на который я сам себе не ответил и это меня смущает: МО Русского покера.
|
|
|
Re: Soft Speed Test ID:25051 ответ на 24894 |
Пн, 26 марта 2007 14:52 («] [#] [») |
|
|
Для начала мои поздравления! Но сдаваться я еще не собираюсь
На счет стандартной терминологии.. предлагаю:
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 -- игры принятые в расчет МО, только непонятно как будем аккумулировать результаты, к общему знаменателю что ли?
|
|
|
Re: Soft Speed Test ID:25052 ответ на 24894 |
Пн, 26 марта 2007 15:29 («] [#] [») |
|
|
Korovin писал пн, 26 марта 2007 15:51 | Единственный вопрос, на который я сам себе не ответил и это меня смущает: МО Русского покера. | Сжатие мастей легко не получится в случае покупки игры. Старая моя программа расчитывает и так МО Русского покера. Можно, конечно убыстрить в 5 раз за счет нового алгоритма (будет тормозить покупка игры, которую нельзя улучшить). Запустите эту программу на сутки на 1 box, потом еще на одни сутки - на 2 box'а. Результат будет правильным.
Раз все свои цели с покером вы выполнили, какие же цели теперь вас интересуют? Или все же, для завершенности сделать этот алгоритм сжатия мастей, когда нет покупки игры, включить это в мою имеющуюся программу, обновить на своем сайте опять вместе со всеми исохдинками, тогда можно спокойно перейти к другим задачам, а об этой навсегда забыть с чувством полного удовлетворения. Всего для этого ощущения нужна неделя работы. Вы меня почти убедили.
|
|
|
Re: Soft Speed Test ID:25053 ответ на 24894 |
Пн, 26 марта 2007 15:44 («] [#] [») |
|
|
Korovin писал пн, 26 марта 2007 14:12 | остается только надеятся что кто-нибудь когда-нибудь выложит свои гениальные исходники. | Я вам их послал по email.
|
|
|
Re: Soft Speed Test ID:25054 ответ на 24894 |
Вт, 27 марта 2007 12:08 («] [#] [») |
|
|
В следующем тесте можно будет разрешить использование сжатия мастей в той же задаче. Когда время у всех будет порядка сотых долей секунды или меньше, можно будет усреднять по полному перебору еще 1,2 или 3 дополнительной мертвой карте. Но лучше сразу писать алгоритмы для всех возможных мен, для этого нужно знать, какие мены нужно рассматривать (в том числе, добор 6-ой карты). Это усложняет задачу.
Sharky | 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} | Лучше игрой назвать раздачу карт, когда могут предстоять мены, а позицией - когда уже не будет мен, но у дилера закрыты 4 карты. Случай же, когда все карты дилера уже открыты, не нужно считать, потому что с точки зрения программы эти ситуации не перебираются и быстродействие алгоритма не очень зависит от количества мертвых карт. Но при расчете мен все же единицей измерения будет количество расчетов для совокупность рангов поменяных карт, с суммированием по всем совокупностям мастей, потому что эта процедура уже далее неделима.
Можно было бы сделать в переспективе коммерческую версию с красивым оформлением, но я точно не буду заниматься таким оформлением. Не лучше ли специализироваться, тем более, что у некоторых людей найдутся идеи по оформлению. Интересно, что думает по этому поводу Sharky?
|
|
|
Re: Soft Speed Test ID:25055 ответ на 24894 |
Вт, 27 марта 2007 16:03 («] [#] [») |
|
|
Шамсутдинов писал пн, 26 марта 2007 16:29 | Запустите эту программу на сутки на 1 box, потом еще на одни сутки - на 2 box'а. Результат будет правильным. | А как запустить на счет? Все перепробовал, но работает только если выбрать "Play", после этого жму "Старт" - чета считает. По другому жму "Старт" ниче не происходит.
|
|
|
Re: Soft Speed Test ID:25056 ответ на 24894 |
Вт, 27 марта 2007 22:44 («] [#] [») |
|
|
Шамсутдинов писал вт, 27 марта 2007 12:08 | Лучше игрой назвать раздачу карт, когда могут предстоять мены, а позицией - когда уже не будет мен, но у дилера закрыты 4 карты. Случай же, когда все карты дилера уже открыты, не нужно считать, потому что с точки зрения программы эти ситуации не перебираются и быстродействие алгоритма не очень зависит от количества мертвых карт. | Не нужно мыслить с позиции алгоритма программы, а нужно с позиции модели игры, которую программа просчитывает.. Представь что я дилер, ты игрок, тебе сдал 5 карт, и себе 1 карту в открытую. Твое действие Bet/Fold. Что бы определить его МО, нужно просчитать все возможные варианты, а это и есть games.. Этот термин выбрал не случайно, в калькуляторах Холдэма например он тоже используется...
Насчет обменов, сжатий мастей и прочее -- я признаю абсолютно точные алгоритмы. Всяческие упрощения меня не интересуют.. Поэтому если соревноваться, то только при нулевой погрешности.
Шамсутдинов писал вт, 27 марта 2007 12:08 | Можно было бы сделать в переспективе коммерческую версию с красивым оформлением, но я точно не буду заниматься таким оформлением. Не лучше ли специализироваться, тем более, что у некоторых людей найдутся идеи по оформлению. Интересно, что думает по этому поводу Sharky? | Ну а что мне сказать? Если хочешь -- делай конечно, экономическую ценность проекта вряд ли обоснованно обозначу. Может пару киллобаксов в год и будет, х.з. Свои тренажеры и калькулятор я время от времени дописываю, переписываю, по море своей надобности... может когда нить добью до финала, может нет. У меня это перманентно как бзик. А так почти у всех есть или свои или давно купленные. Новых покеров нет, хорошие убирают... рынок имхо, сворачивается. Мое мнение: заработать тут не удастся. А вот прославится вполне можно. Если твоя карьера прогер, то такой личный проект может рекламу сделать.. А я хочу от програмухи уйти в бизнес, запарило меня все это уже..
|
|
|
Re: Soft Speed Test ID:25060 ответ на 24894 |
Ср, 28 марта 2007 13:11 («] [#] [») |
|
|
Fabrica писал вт, 27 марта 2007 17:03 | А как запустить на счет? Все перепробовал, но работает только если выбрать "Play", после этого жму "Старт" - чета считает. По другому жму "Старт" ниче не происходит. | См. описание на моем cайте:
http://www.kosshams.narod.ru/Programs/Poker/poker.htm .
Опишу еще раз, как подсчитать МО Русского покера.
Еще раз пересказать. 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-ой карты (если мне не изменяет память).
|
|
|