LINUX.ORG.RU

Покерный калькулятор эквити PokerCalc by Safocl

 , , ,


2

2

решил я создать общую тему.
создаю кроссплатформенный покерный калькулятор эквити для безлимитного Holdem на си++17, сравнимый с simple postflop, CardRunners EV и подобным, только опенсорсный под лицензией GPLv3.

Покерный калькулятор будет вычислять эквити руки (шансы выиграть раздачу), относительно дипазона (предполагаемого множества рук) оппонента, а так же конкретной руки в безлимитном Holdem.

пока что пишу саму библиотеку для калькулятора.
на данный момент из вычислений реализован перебор бордов.
сам проект на ветке с STL
имеется ветка с использованием qt5 либы, тут будет задействовано максимум из qt5.

прошу советовать, что и как можно будет улучшить, предлагайте свое видение подобного проекта)))

★★

Последнее исправление: safocl (всего исправлений: 4)
Ответ на: комментарий от Rastafarra

Когда пишу для себя на C-производных пишу коменты на рус. т.к. Я Русский и горжусь этим (можно писать на родном языке, хотя если код нормальный то и коменты иногда лишние, если ты в теме кода). Но вот когда пытаюсь выдать кусок кода, или весь код для (ВСЕХ) то либо убераю коменты, а по возможности делаю на общепринятом eng и понятные для всех.

pvvking ★★
()
Последнее исправление: pvvking (всего исправлений: 1)
Ответ на: комментарий от annulen

триал у simple postflop есть, однако он не может вычислять с префлопа до флопа... только с флопа до ривера, енто две карты борда. что достаточно быстро, потому что всего лишь будет 47*46 вариантов, если перечислять их.

safocl ★★
() автор топика
Ответ на: комментарий от Makhno

Когда пишу для себя на C-производных пишу коменты на рус. т.к. Я Русский и горжусь этим (можно писать на родном языке, хотя если код нормальный то и коменты иногда лишние, если ты в теме кода). Но вот когда пытаюсь выдать кусок кода, или весь код для (ВСЕХ) то либо убераю коменты, а по возможности делаю на общепринятом eng и понятные для всех.

pvvking ★★
()
Ответ на: комментарий от annulen

конечно не могу понять сути этих вопросов, но у них используются все ядра, по крайней мере у меня, точнее сказать все потоки, которых у меня 4.
на счет времени я хз даж. не засекал, я не знаю как на винде енто сделать, при чем там же не консольная прога, а сразу графическая.

если енто были вопросы о целесообразности проекта, то она заключается в открытости кода.
уже есть некая реализация библиотеки для простого покерного калькулятора, называется poker stove.
однако, на основе своего проекта я попутно изучаю язык программирования.

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от safocl

конечно не могу понять сути этих вопросов

Все просто: выяснить, правильный ли используется алгоритм. Если разница по времени, например, на порядок, значит алгоритм имеет неправильную сложность, и было бы правильнее сначала сделать прототип на каком-нибудь скриптовом языке, в котором легко экспериментировать с алгоритмами и структурами данных, а потом уже (если понадобится) высекать в граните (с++)

Хотя на быстрых расчетах может быть и не удастся уловить алгоритмическую разницу

я не знаю как на винде енто сделать

хотя бы секундомером с телефона

annulen ★★★★★
()
Ответ на: комментарий от safocl

то она заключается в открытости кода

В восьмидесятых это вызвало бы бурные овации, а сейчас этого добра столько, что оно имеет какую-нибудь ценность только в том случае, если решает практическую задачу, и делает это 1) лучше существующих опенсорсных проектов, и 2) не намного хуже коммерческих аналогов.

annulen ★★★★★
()
Ответ на: комментарий от annulen

хотя бы секундомером с телефона

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

safocl ★★
() автор топика
Ответ на: комментарий от annulen

ну как бы нету такого открытого продукта, покерстов, о котором я сказал выше умеет только примитивный функционал.
другое дело сделать на основе его библиотеки, в которой уже реализованы вычисления функциональный графический продукт.
однако, я в данный момент нацелен на одновременное изучение, как по самому языку программирования, так и по логическому и алгоритмическому построению программ

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от safocl

Тогда не надо анонсировать свои эксперименты как работающий продукт. А если это не анонс, а запрос на ревью кода, тогда его надо офрмлять соответствующе

annulen ★★★★★
()
Ответ на: комментарий от safocl

Результаты хотя бы совпадают с бесплатной версией?

annulen ★★★★★
()
Ответ на: комментарий от Deleted

Я где-то запрещал тебе писать комменты на твоем родном или ты все же читаешь жопой? Как ты представляешь себе работу на крупным и известным опенсоурсным проектом (а ОП все же намерен в опенсорц), где комменты написаны на пяти-шести национальных языках, большая часть которых не является международными? Если это твоя личная поделка - ради Б-га. Если это закрытый коммерческий проект с командой в одной стране - да пожалуйста. Но в совместной работе людям все же удобнее избегать вавилонской башни.

Makhno
()
Ответ на: комментарий от annulen

а я и не анонсировал, сказал чо пишу такую прогу, которая будет считать эквити рук в безлимитном холдеме...
тему я создал для получения как раз рекомендаций

safocl ★★
() автор топика
Ответ на: комментарий от annulen

вухахаахах, так енто и не вопрос, тема для получения рекомендаций.
при чем, вдруг кто-то заинтересуется и быстрее меня напишет подобный софт, идеализовафшись моим будущим проектом...

safocl ★★
() автор топика
Ответ на: комментарий от anonymous

а кстати, ((c1 - 2) << 2) & 0xFF разве не равно ((c1 - 2) << 2)? Ведь маска 255 не будет никак изменять число по побитовому И, а маска 0x00 будет всегда обнулять любое число.

ааа стоп... там же затираются старшие 8 бит.. понял, ведь у нас число uint16_t, совсем чото не обратил внимания сначала...

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 2)
Ответ на: комментарий от safocl

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

anonymous
()
Ответ на: комментарий от safocl

Ты просто нарисуй на листочке, что там с битами. Если подумать, то это довольно очевидно и просто :) Рассчет веса тоже довольно очевиден, если в битах посмотреть. Осталось только отсортировать карты правильно в контексте руки, и сравнение будет тривиальным.

anonymous
()
Ответ на: комментарий от anonymous

И да, я эту хрень делал, когда студентом был. Тоже пейсал свой евалюатор для холдема и омахи.

anonymous
()

Кто-то еще играет в покер?

buddhist ★★★★★
()
Ответ на: комментарий от RazrFalcon

Китайцев много. Им не нужны иностранцы.

а какие проблемы с комментариями в коде на китайском языке?
есть же автоматические переводчики с любого языка, которые можно встроить прямо в ide

anonymous
()
Ответ на: комментарий от Makhno

Как ты представляешь себе работу на крупным и известным опенсоурсным проектом (а ОП все же намерен в опенсорц), где комменты написаны на пяти-шести национальных языках

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

anonymous
()
Ответ на: комментарий от annulen

С 3.1 согласен. Но как написать двум и более пока не реализованно.
С 5.3 не согласен. Я не призывал (к дебатам по поводу языка), т.к. я просто высказал свое мнение, что коменты можно писать на РОДНОМ для тебя языке. И добавил в конце что если public code то придерживаюсь другого правила.

pvvking ★★
()
Ответ на: комментарий от anonymous

так то было бы енто очевидно, если бы комбинация составлялась всегда из 5 карт, точнее выбиралась бы из 5 карт, однако, количество карт из которых выбирается комбинация величина изменчивая.
т.е. две карты у тебя на руках, а на борде может быть от 3 до 5 карт, получается общее количество карт комбинаций на постфлопе будет от 5 до 7 карт, из которых составляют комбинацию только 5.

я изначально думал об ентом, даже частично реализовал, только не по битовой маске, а в сравнениях, к примеру на стрит, сет, фулл хаус, где проверяю подобно битовой маске — сразу пачкой (например для чека стрита — проверяю после сортировки, что должно соответствовать 1карта +1 = 2 карте, 1 карта +2 = 3 карте и т.д.).

safocl ★★
() автор топика
Ответ на: комментарий от anonymous

Посмотри евалюаторы онлайновские. Ониж мнгновенно это расчитывают. Причем это яваскрипт.

ага, в основном прям мгновенно, с префлопа на терн даже, молча уж про с префлопа на ривер...
с префлопа на флоп и у меня сча за 1/5 секунды показывает time... при чем енто с учетом скорости вывода результата на терминал

safocl ★★
() автор топика
Ответ на: комментарий от anonymous

я просто тут подумал, если в классе Card сделать только одно число, в котором будет храниться сразу и масть и значение?
тут надо минимум 32 битное число ,что бы уместить и 4 масти и 13 значений
точнее надо сделать enum 32 битного типа. в первые 16 бит уместить масти, во вторые уместить значения.
думаю так все же будет быстрее проверять на стрит и флеш, ибо надо будет просто все значения в комбинации соединить через побитовое ИЛИ и полученное проверить на число соответсвующее подряд идущим пяти битам. подобное с проверкой на флеш, однако надо будет проверять что бы при слиянии был только один мастевой бит.
Разделять масть и значение маской.

хз конечно, получится ли в таком варианте меньше операций и соответственно выше быстродействие.

другой вопрос, кросплатформенны ли типы uint_X_t ??

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 2)

переписал код для использования битовой маски.
залил сюда

safocl ★★
() автор топика
Ответ на: комментарий от annulen

хотя в последнем случае задача элементарно выносится на сторону клиента

И у тебя уже больше не онлайн-сервис, а приложуха с предельно наркоманской моделью дистрибуции, написанная на отвратном языке с использованием совы на глобусе для UI под самую худшую из современных распространенных ОС - браузер.

t184256 ★★★★★
()
Ответ на: комментарий от seryoga

ты про покерстов?
и да, я обучаюсь в принцыпе си++ ну и решил сразу практиковаться на данной проге

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от seryoga

ну и он вроде как на си, а я пишу на си++

safocl ★★
() автор топика

почему, кстати

#ifndef BOARD_H
#define BOARD_H

....

#endif

не справляется, если есть указания двух хедеров друг на друга, то ругается на untermined conditional derective?
если поставить #pragma once, то все норм.

safocl ★★
() автор топика

инкапсулировал в класс Board сам борд и методы которые его генерят.
в ближайших планах составить класс по распараллеливанию.
теперь енто должно быть еще проще чем раньше, учитывая, что инкапсулировал в класс Deck данные для распараллеливания, минимальную и максимальную позицию...
уже залил

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 1)

инкапсулировал параллельные вычисления в класс. Вроде все роббит.
Количество потоков определяется автоматически и равно количеству ядер (потоков) проца.

safocl ★★
() автор топика
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от safocl

отрефакторил ParallelGenBoard::start().
почему-то с вызовом размера очереди работает быстрее, чем со стандартным итератором типа int.

safocl ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.