Re: Soft Speed Test ID:24996 ответ на 24894 |
Вт, 13 марта 2007 16:26 («] [#] [») |
|
|
Шамсутдинов писал | При расчете МО все расклады все равно не перебрать (особенно, если 2 бокса), а любая перестановка мастей симметрична, так что можно выбирать случайную. | Опаньки, сразу не заметил, ты еще и масти не учитываешь. У меня (и остальных в этом топике) считается все точно.
|
|
|
Re: Soft Speed Test ID:24997 ответ на 24894 |
Ср, 14 марта 2007 00:06 («] [#] [») |
|
|
Уважаемый Шамсутдинов, в данной теме мы сравнивали скорости функций анализа одной руки игрока против карты дилера (вычисление числа возможных комбинаций дилера младще/старше/равно для подсчета МО руки). Так тот факт что на одном и том же оборудовании ваш софт анадизирует 350 000 рук в секунду а у Грея например 950 000 говорит о том что при использовании его функции Ваш софт будет считать почти втрое быстрее. Тест с полным перебором был предложен мной для исключения неоднозначности в постановке задачи. То, что наш код может работать с неполной колодой - само собой разумеется, просто для теста СКОРОСТИ это не требовалось. И еще, не совсем понятно как Вы успеваете анализировать все варианты обменов (Русский покер) без упрощений, ведь один только пятак на первом боксе требует анализа 1370754 вариантов (3 секунды при вашей скорости).
|
|
|
Re: Soft Speed Test ID:24998 ответ на 24894 |
Ср, 14 марта 2007 07:10 («] [#] [») |
|
|
Korovin писал | Так тот факт что на одном и том же оборудовании ваш софт анадизирует 350 000 рук в секунду а у Грея например 950 000 говорит о том что при использовании его функции Ваш софт будет считать почти втрое быстрее. | Ну оборудование-то разное, так что не втрое, а почти вшестеро.
|
|
|
Re: Soft Speed Test ID:24999 ответ на 24894 |
Ср, 14 марта 2007 07:22 («] [#] [») |
|
|
<img src="http://forum.cgm.ru/attachments/casino_soft/49712-soft_speed_test_-poker-test.jpg" border="0" alt="Название: test.jpg
Просмотров: 394
Размер: 41.6 Кб" style="margin: 2px" />
Оказывается я отстал от жизни и у нас новый лидер по моему тесту - Grey с результатом 50 сек на анализ 52*51*50*49*48*47/5/4/3/2= 122 151 120 вариантов рук игрока против 1-й карты дилера, или 2,5 миллиона рук в секунду на моем железе. ПОЗДРАВЛЯЮ. Я пока на почетном 3-м месте со 123 секундами, Sharky на втором.
|
|
|
Re: Soft Speed Test ID:25000 ответ на 24894 |
Ср, 14 марта 2007 10:32 («] [#] [») |
|
|
Korovin писал | Оказывается я отстал от жизни и у нас новый лидер по моему тесту - Grey с результатом 50 сек на анализ 52*51*50*49*48*47/5/4/3/2= 122 151 120 вариантов рук игрока против 1-й карты дилера, или 2,5 миллиона рук в секунду на моем железе. ПОЗДРАВЛЯЮ. | Спасибо. А то я уже хотел к доктору обращаться, типа меня все игнорируют.
|
|
|
Re: Soft Speed Test ID:25001 ответ на 24894 |
Ср, 14 марта 2007 11:19 («] [#] [») |
|
|
Grey писал вт, 13 марта 2007 15:22 | 13 возможных карт дилера * число всех комбинаций по 5 из 51 = 30537780 раскладов. Для каждого расклада производится операция вычисления (по формулам) количества комбинаций дилера старше/младше/равно/пустая, даже в том случае, если у игрока пустая комбинация. На моем стареньком PIII-800 это занимает 32 секунды. | Я так понимаю честные циклы (5 вложенных, ну или 10 покороче, чтобы не вычислять масть-ранг) + один для карты диллера:
for(int i0=4;i0<52;i0++)
{
____for(int i1=3;i1<i0;i1++)
____{
________...
____}
}
с проверкой на выкинутые карты - это обязательное условие соревнования (нельзя оптимизировать)?
Прикинул, получилось за 838 (минус проверка на выкинутые, инкремент, подсчет результата, округлим 800) тактов проверяется <,>,=,0 (пустая, наверное, высчитывается из общей). Вроде очень мало. Сравню со своим приближенным методом.
|
|
|
Re: Soft Speed Test ID:25002 ответ на 24894 |
Ср, 14 марта 2007 12:00 («] [#] [») |
|
|
Цель теста - сравнение скорости функции анализа руки игрока против каты дилера, используемой в нашем покерном софте, на одинаковом железе. Для этого я и предложил оформить ее в виде демо-модуля и выложить здесь, чтобы любой мог запустить разные демки на своем железе. Почему итменно эта функция: это ядро любого покерного софта, от которого напрямую зависит производительность всего комплекса. Есть еще алгоритмя оптимизации более высокого порядка, но это уже другая история. Как сравнивать - не принципиально, для сравнение важно лишь чтобы демки выполняли ОДНУ и туже работу. В данном случае предлагалось именно 6 честных циклов с вызовом функции внутри последнего и накоплением результата. Под тестовой функцией понимался именно рабочий модуь из покерного софта, специально не заточеный под эту задачу, т.к. сама задача уже давно решена.
|
|
|
Re: Soft Speed Test ID:25003 ответ на 24894 |
Ср, 14 марта 2007 12:29 («] [#] [») |
|
|
Я не сторонник точных формул, поэтому в вашем соревновании не участвую. Хотел просто прикинуть, можно ли при точном расчете получить скорость необходимую для поставленной мной задачи (уже отставленной, правда).
|
|
|
Re: Soft Speed Test ID:25004 ответ на 24894 |
Ср, 14 марта 2007 12:32 («] [#] [») |
|
|
Вынужден признать, что моя процедура подсчета комбинаций у дилера (4 карты) в 4,3 раза меденнее, чем у Грея. Совпадение с ним результата МО абсолютно точное при любом количестве выкинутых из колоды карт, известных игроку.
Насчет используемой памяти моей программой. В прошлый раз я непонятно каким образом ошибся. Действительно, моя программа занимает 22-25 МБ в памяти. 15,2 МБ занимают массивы, определяющие сортировку и комбинацию 5 или 6 карт. Причем, большая часть - для 6-карточных комбинаций, например, в русском покере.
Самая сложная часть моей программы - покупка игры. Но я уже не строю иллюзий насчет правильности моих претензий. Но быть в вакууме тоже нелегко.
Теперь я полностью в теме - еще раз перечитал все сообщения этого форума. Про масти никаких разногласий нет. Моя программа все делает правильно, но медлено (я считал, что быстро). Какими-то преимуществами, она безусловно обладает, в ней сделано очень многое и очень хорошо (опять, с оговогкой, что другие могли бы сделать в 4,3 раза лучше). Например, можно одсчитывать точное МО, когда нет мен карт, но для этого нужно вручную перебирать все карты дилера, потом находить реднее арифметическое. Дело в том, что когда в моей программе варьируются только карты на 1 боксе и 0 Change, то ведется полный перебор этих карт. Нажав на кнопку слева от таблицы результатов появится окно с более полной информацией о результатах, от туда можно взять в буфер обмена точное МО последней операции - с большим числом знаков после запятой.
Замечу, что программа rp отличается от pkr большую сторону только тем, что там есть возможность исключения мен 4 или 5 карт, если они о хуже.
Извиняюсь за поспешные заявления и выставление своей программы. Буду очень признателен, за объяснения как сделать более быстрый алгоритм подсчета комбинаций у дилера (Grey).
|
|
|
Re: Soft Speed Test ID:25005 ответ на 24894 |
Ср, 14 марта 2007 12:49 («] [#] [») |
|
|
Непонятно, что такое Strait payoff=8
|
|
|
Re: Soft Speed Test ID:25006 ответ на 24894 |
Ср, 14 марта 2007 13:00 («] [#] [») |
|
|
Шамсутдинов писал ср, 14 марта 2007 12:49 | Непонятно, что такое Strait payoff=8 | Выплата за стрит. Сделали плавающим для выявления ошибок (или махинаций).
|
|
|
Re: Soft Speed Test ID:25007 ответ на 24894 |
Ср, 14 марта 2007 13:00 («] [#] [») |
|
|
|
|
|
Re: Soft Speed Test ID:25008 ответ на 24894 |
Ср, 14 марта 2007 15:45 («] [#] [») |
|
|
Не хотелось бы огорчать г-на Коровина, но я тут исправил ошибки у себя в программе и вот результаты:
<img src="http://forum.cgm.ru/attachments/casino_soft/49718-soft_speed_test_-poker-pt.jpg" border="0" alt="Название: PT.jpg
Просмотров: 327
Размер: 167.4 Кб" style="margin: 2px" />
При полной колоде я отстаю от Grey, а при не полной - почему-то опережаю, не могу объяснить этот феномен.
<img src="http://forum.cgm.ru/attachments/casino_soft/49720-soft_speed_test_-poker-pt1.jpg" border="0" alt="Название: PT1.jpg
Просмотров: 327
Размер: 73.0 Кб" style="margin: 2px" />
Кстати, выделил процедуру подсчета (<,>,=,нет игры) в отдельный unit для Delphi, могу отправить интересующимся. Тока надо написать help нему с параметрами всех процедур, которые можно из него вызвать. В главной процедуре на входе 5-ка карт игрока, карта дилера, отсутствующие карты - на выходе 3 числа - >, <, =. Дальше в зависимости от параметров оплаты можно все посчитать. Начал делать для русского с двойными комбинациями, но пока не доделал.
|
Вложение:
STest4.exe
(Размер: 601.50KB, Загружено 783 раз)
|
|
|
|
Re: Soft Speed Test ID:25009 ответ на 24894 |
Ср, 14 марта 2007 15:45 («] [#] [») |
|
|
Шамсутдинов писал | Буду очень признателен, за объяснения как сделать более быстрый алгоритм подсчета комбинаций у дилера (Grey). | Ну рецепт простой. Все, что можно просчитать заранее, просчитать и засунуть в таблицы. Остальное оптимизировать до посинения
|
|
|
Re: Soft Speed Test ID:25010 ответ на 24894 |
Ср, 14 марта 2007 15:50 («] [#] [») |
|
|
Korovin писал | И еще, не совсем понятно как Вы успеваете анализировать все варианты обменов (Русский покер) без упрощений, ведь один только пятак на первом боксе требует анализа 1370754 вариантов (3 секунды при вашей скорости). | Это делается тоже комбинаторно - мощная разработка, гораздо концептуально сложнее чем комбинаторный перебор 4 карт дилера. при желании могу объяснить, как это делается, но сразу скажу, что очень не просто. Правда у меня там есть дублирующий алгоритм, который работает в 4 раза медленнее (если не изменяет память), он намного проще, но полностью эквивалентен. Его я ипользовал (после переделки) для покупки игры, когда нет комбинации туз-король - когда меняется младшая, а не старшая карта дилера.
Все-таки мне очень хочется разобраться, почему мой алгоритм хуже. Ответьте на следующий вопрос:
Пусть на 1-ом боксе есть какая-то комбинация (-, AK, 2, 2+2, 3, S, F, 3+2, 4, FS, FR).
Я получаю количества всех комбинаций у дилера (AK, 2, 2+2, 3, S, F, 3+2, 4, FS, FR). Получаю количество пустых комбинаций у дилера вычитанием из его общего количества этих. Если у игрока не пустая комбинация, то производится подсчет таких же по достоинству комбинаций у дилера, равных или больших по сравнению всех карт - это наибольшее сложная и большая часть кода по количеству строк.
Так ли делаетcя в вариантах, лучших чем мой? Например, ищется ли количество всех стритов и флеш-стритов по отдельности у делера, если у игрока пара? Или, если у игрока нет игры, может быть сразу ищется в скольких случаях у дилера она есть, то есть хотя бы 2 одного достоинства, флеш или стрит (придется еще искать количество FS).
Я не проверял какие части этой процедуры имеют какую составную часть во времени выполнения. Мне казалось, что его нельзя убыстрить.
Ладно, возможно, попытаюсь переписать этот алгоритм. Дело в том, что у меня была идея, заключающаяся в том, что для получения количества комбинаций у дилера, можно сначала расчитать массивы всех случаев, по количеству неизвестных карт по достоинствам (0..12) (количеству этих количеств (0..4), то есть [13][12][12][12][12][12], где первый элемент - достоинство карты дилера). Когда мне пришла в голову эта идея, то я понял что процедуру можно ускорить в разы, но что это не стоит делать, потому что и так быстро, и будет тормозить покупка игры, которая сделана идеально - ее я делал 3 года тому назад, а ту процедуру - 8 лет тому назад. Но пару месяцев тому назад я вернулся к этому вопросу, посмотрел свой код, и не смог понять почему можно добиться убыстрения, хотя эту идею я помнил. Теперь мне опять кажется, что убыстрение возможно. Ответьте что-нибудь. Можно на мой e-mail. Как пользоваться форумом? Например, удобно цитировать несколько раз. Как подписаться на новые сообщения, чтобы уведомления приходили по почте?
|
|
|
Re: Soft Speed Test ID:25011 ответ на 24894 |
Ср, 14 марта 2007 15:56 («] [#] [») |
|
|
Grey | Ну рецепт простой. Все, что можно просчитать заранее, просчитать и засунуть в таблицы. Остальное оптимизировать до посинения | Я вас уважаю, но если вы поймете, как я написал покупку игры, то еще непонятно, кому кого уважать придется.
|
|
|
Re: Soft Speed Test ID:25012 ответ на 24894 |
Ср, 14 марта 2007 16:15 («] [#] [») |
|
|
Шамсутдинов писал | Я вас уважаю, но если вы поймете, как я написал покупку игры, то еще непонятно, кому кого уважать придется. | Уже уважаю. Потому что я покупку игры не писал и в ближайшее время не собираюсь. На этот алгоритм подсчета комбинаций дилера я потратил в общей сложности пару месяцев. Первый месяц 5 лет назад, потом забросил, полностью переключившись на блэкджек. Ну и еще месяц год назад. И снова забросил. Писал для себя, а не для соревнования с кем-либо. Так что те, кто выставил мне "временный" рейтинг -- не парьтесь, можете сразу снять.
|
|
|
Re: Soft Speed Test ID:25013 ответ на 24894 |
Ср, 14 марта 2007 16:23 («] [#] [») |
|
|
Grey писал ср, 14 марта 2007 16:15 | Так что те, кто выставил мне "временный" рейтинг -- не парьтесь, можете сразу снять. | Я, конечно, понимаю, что между нами непреодолимый антагонизм, но я искренне уважаю людей, способных на деле показать свое преимущество.
|
|
|
Re: Soft Speed Test ID:25014 ответ на 24894 |
Ср, 14 марта 2007 16:50 («] [#] [») |
|
|
Мде, отстал я от жизни.. И все-таки Grey, как ты считаешь? Если 143K заготовок, то это одно, и сравнивать тесты так как мы имхо нельзя, или все пересчитываешь? Тогда снимаю шляпу.
2 Шамсутдинов: Абсолютно точную покупку игры уже я делал, и алгоритм был описан на страницах форума + демка была..
|
|
|
Re: Soft Speed Test ID:25015 ответ на 24894 |
Ср, 14 марта 2007 17:50 («] [#] [») |
|
|
Fabrica писал | При полной колоде я отстаю от Grey, а при не полной - почему-то опережаю, не могу объяснить этот феномен. | Частично можно, видимо, объяснить чрезмерным количеством вызовов Application.ProcessMessages у меня (ты ее вроде бы вообще не вызываешь). Сейчас исправил это дело, можешь заново сравнить:
P.S. Если во время расчета дергать форму мышкой, то время расчета существенно увеличится, т.к. во время перемещения все останавливается. Ты не дергал часом? По уму надо бы отдельным тредом сделать.
|
|
|