LINUX.ORG.RU

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

 , , ,


2

2

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

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

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

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

★★

Последнее исправление: safocl (всего исправлений: 4)

Было бы интересно в шапке услышать немного слов о том, зачем ПО, для тех кто не занимается профессиональным жульничеством в покер.

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

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

XMs ★★★★★
()

Беглый просмотр.

        // проверка на пару
        if ([&board_ptr, &hand](){
            for (auto el : *board_ptr)
            {
                if (hand.getCard1().GetValueCardNum() == el.GetValueCardNum()
                    || hand.getCard2().GetValueCardNum() == el.GetValueCardNum())
                {
                    return true;
                }
            }
            return false;
            }()
            || hand.getCard1().GetValueCardNum() == hand.getCard2().GetValueCardNum())
        {
            return HandStrength::strength::PAIR;
}// проверка на пару

Здец. Еще было бы неплохо завести неймспейс и помещать весь код либы туда. Комменты на русском - моветон, если код видит кто-то еще. Ну и форматирование.

Makhno
()
unique_ptr<vector<Card> > sort_cards(const unique_ptr<vector<Card> > & combo_ptr)
{
    unique_ptr<vector<Card> > temp_arr_ptr(new vector<Card>); 
    *temp_arr_ptr = *combo_ptr;
    
    Card temp_card;
    
    for (unsigned count = 0; count < temp_arr_ptr->size(); ++count) {
        for (unsigned subcount = count + 1; subcount < temp_arr_ptr->size(); ++subcount) {
            if (temp_arr_ptr->at(count) > temp_arr_ptr->at(subcount))
            {
                temp_card = temp_arr_ptr->at(count);
                temp_arr_ptr->at(count) = temp_arr_ptr->at(subcount);
                temp_arr_ptr->at(subcount) = temp_card;
            }
                
        }
    }
    
    return temp_arr_ptr;
}

Рыдаю

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

Комменты на русском - моветон, если код видит кто-то еще.

только если писюн мелковат. ну или еще комплексы какие...

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

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

Makhno
()

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

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

Это не осторожный шаг - у япошек свой маня мирок.

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

Полгитхаба в лабораторных работах и репах по имени test и helloworld. Как это показывает приемлемость комментариев на национальных языках в разработках, задействующих людей из разных стран?

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

Ну, тогда это какие-то местные поделки (в нейтральном смысле), которым никакой другой язык в комментариях действительно не нужен.

Makhno
()

brutforcePreFlop_Flop

HandStrength::strength HandStrength::checkCurrStrength

Жесть нах. Любите же вы себе жизнь услложнять.

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

ок, я уже убрал до ентого момента

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

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

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

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

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

ну енто мое любимое занятие...
игры себе ессесна подбираю такиеже, где можно наркаманить в массовых объемах, потипу path of exile, kerbal space programs, heroes m&m отчасти и подобное...

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

что не так? вроде алгоритм как должен быть, смотрим на значение карты, сравниваем ее с остальными, меняем их местами если вторая карта ниже.

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

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

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

так вродеж смысловую нагрузку названия должны передавать жеж?
брутфорс префлоп-флоп — все понятно, перебирает все варианты с префлопа до флопа, тоесть комбинацию из 3 карт борда, которых = 50*49*48 , если не знаеш руки оппонента

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

как раз таки енто практика для самоизучения...

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

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

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

Компаратор будет 1:выглядеть логичнее,

2: компаратор можно передать лямбдой в std::sort и это будет выглядеть аккуратнее.

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

1:выглядеть логичнее

не пойму почему? , думал логичнее как раз специфическую функцию описать.

2: компаратор можно передать лямбдой в std::sort и это будет выглядеть аккуратнее.

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

просто в данном случае, никакого быстродействия не будет, ибо в компараторе я так же укажу данную логику. Енто если бы в std::sort более быстрая реализация была.

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

Кстати изначально писал на Си, так что там артефакты остались типа int вместо bool

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

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

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

кроссплатформенный покерный калькулятор эквити на си++17

должен вычислять силу руки на стадии компиляции

</петросян_mode_off>

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

Потому что производительность в этой задаче не имеет никакого значения, если только у тебя не онлайн-сервис для тысяч пользователей

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

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

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

как раз таки, произволдительность очень сильно нужна тут. Ибо нужна возможность обрабатывать до 200 млн вычислений на каждую руку, которых в диапазоне может быть до 1000+

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

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

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

Так первым ттезис озвучил ты. Сначала объясни, почему я не могу писать комменты на том языке, на котором мне удобно, потом с тобой можно будет вообще разговаривать. А пока ты - балабол.

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

если подсчитать количество макс комбинаций бордов с префлопа до ривера, если известна только своя рука = (52 карты в колоде минус 2 карты у тебя в руке) * (оставшееся количество карт в колоде) * (оставшееся количество карт в колоде) * (оставшееся количество карт в колоде) * (оставшееся количество карт в колоде) = 50*49*48*47*46 = 2,542512e8 или 254 251 200

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

ну у меня на i3 2100 просчет с префлопа до терна занимает 7-8 секунд на одну руку. всего комбинаций рук при начальном n=52 будет: n + (n-1) ... + (n-1) пока n != 0 = 1326

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

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

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

если брать с префлопа до флопа, т.е. на борду расчитывать 3 карты, имея у себя в руке две, получается 1/5 секунды. всего просчетов получается 117600 для парной руки

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

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

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