Обзор имеющихся разработок и алгоритмов

Автор: Пользователь скрыл имя, 16 Июня 2013 в 17:38, курсовая работа

Описание работы

Техасский холдэм (иногда просто называемый холдэм) — самая популярная на сегодня разновидность покера. Популярность, возможно, связана с тем фактом, что основные турниры по покеру проводятся именно в этой разновидности игры. Техасский холдэм — пример покерной игры с общими картами, в которой существуют карты, которые используются всеми игроками при составлении комбинаций.
Особенно интенсивно сейчас развивается покер в сети: существует огромное количество покер-румов, где есть возможность сыграть партию в покер с любым человеком из любой точки мира.

Содержание

2 Введение 3
1 Краткие сведения из теории вероятности 4
2 Обзор имеющихся разработок и алгоритмов 5
2.1 Метод 1 5
2.2 Метод 2 6
2.3 Метод 3 6
2.4 Метод 4 7
3 Проектирование алгоритма
3.1 Задачи 9
3.2 Решения 9
4 Код 11
5 Тесты 14
Заключение 15
Список использованных источников 16

Работа содержит 1 файл

Покер.doc

— 103.50 Кб (Скачать)

                    i = c ^ d ^ h ^ s;  /* сет */

                    return Value(FULL_HOUSE) | hiBotRank[i] with(i ^ ranks); }

                else

           

                    return Value(FOUR_OF_A_KIND) | hiBotRank[i] with(i ^ ranks);

 

case 3: /* сет и два кикера или две пары и         кикер  */

                if ((i = c ^ d ^ h ^ s) == ranks) {

                    /* сет и два кикера */

                    if ((i = c & d) != 0)

                        return Value(THREE_OF_A_KIND) | hiBotRank[i] with(i ^ ranks);

                    if ((i = c & h) != 0)

                        return Value(THREE_OF_A_KIND) | hiBotRank[i] with(i ^ ranks);

                    i = d & h;

                    return Value(THREE_OF_A_KIND) | hiBotRank[i]

                        with(i ^ ranks); }

                /* две пары и кикер; в i бит кикера */

                j = i ^ ranks;     /* в j биты пар*/

                return hiTopRankTWO_PAIR[j] | hiBotRank[j ^ hiRankMask[j]] | i;

 

        case 4: /* пара и три кикера */

                i = c ^ d ^ h ^ s; /* биты кикеров */

                return Value(PAIR) | hiBotRank[ranks ^ i] | i;

 

        case 5: /* нету пар */

return ranks;

}

 

 

 

 

 

 

4.3 Расчет вероятностей

int     deckIx0, deckIx1, deckIx2, deckIx3, deckIx4;

    Eval_T handValue0, handValue1;

    int     wins0 = 0, splits0 = 0, pots = 0;

 

    for (deckIx0 = 0; deckIx0 <= limitIx0; ++deckIx0) {

        board[0] = deck[deckIx0];

        for (deckIx1 = deckIx0 + 1; deckIx1 <= limitIx1; ++deckIx1) {

            board[1] = board[0] | deck[deckIx1];

            for (deckIx2 = deckIx1 + 1; deckIx2 <= limitIx2; ++deckIx2) {

                board[2] = board[1] | deck[deckIx2];

                for (deckIx3 = deckIx2 + 1; deckIx3 <= limitIx3; ++deckIx3) {

                    board[3] = board[2] | deck[deckIx3];

                    for (deckIx4 = deckIx3 + 1; deckIx4 <= limitIx4; ++deckIx4) {

                        board[4] = board[3] | deck[deckIx4];

                        handValue0 = Hand_7_Eval(board[4] | holeHand[0]);

                        handValue1 = Hand_7_Eval(board[4] | holeHand[1]);

                        ++pots;

                        if (handValue0 > handValue1)

                            ++wins0;

                        else

                            if (handValue0 == handValue1)

                                ++splits0; } } } } }

wins[0] = wins0;

wins[1] = pots - wins0 - splits0;

splits[0] = splits[1] = splits0;

partialPots[0] = partialPots[1] = splits0 / 2.0; 
5 ТЕСТЫ

Для тестирования программы  я использовал другой калькулятор  нахождения вероятности в покере с сайта http://ru.pokernews.com/poker-tools/poker-odds-calculator.htm.

Моя программа выдавала такие же результаты с погрешность  в сотые доли процента.

Примеры:

Моя  программа при  руке Qs Js против руки оппонента Ts Th выдаёт шансы на победу 46.663618% и 47.114706% на победу или ничью. На сайте 46.66% победа и 0.45% на ничью.

При руках 2c7d  Ah As и флопе 8с 9с Kh 5s шансы совпадают точь-в-точь с сайтом 9.090909.

Если известна только собственная рука Ts 9S и неизвестном флопе моя программа выдаёт 52.376873%  на победу, на ничью и победу 55.671884%, в то время как на сайте шансы на победу 52.33% а на ничью 3.31%. Единственным минусом было, то что на сайте данный подсчет велся меньше одной секунды, а моя программа ~846 секунд.

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

  
Заключение

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

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

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

 

Список использованных источников

 

[1] [Электронный ресурс]. URL:

http://kingpokerclub.com/articles/426-raschet-veroyatnostej-v-pokere.html

[2] [Электронный ресурс]. URL:

http://profitpoker.ru/articles/49-articles/120-tablica-shansov.html

[3] [Электронный ресурс]. URL:

http://www.pokerstove.com/analysis/zealots.html

[4] [Электронный ресурс]. URL:

http://www.safdar.net/shabbircombinatorics-texas-holdem-limit-poker.html

[5] [Электронный ресурс]. URL:

http://www.betpoker.ru/holdem.html

[6] [Электронный ресурс]. URL:

http://ru.wikipedia.org/wiki/Теория_вероятности

[7] [Электронный ресурс]. URL:

http://pokersource.sourceforge.net/

[8] [Электронный ресурс]. URL:

http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup

[9] [Электронный ресурс]. URL:

http://webdocs.cs.ualberta.ca/~games/poker/

[10] [Электронный ресурс]. URL:

http://ru.pokernews.com/poker-tools/poker-odds-calculator.htm

 

 

 

 

 




Информация о работе Обзор имеющихся разработок и алгоритмов