Алгоритм для вычисления распределения рука против руки - Программа построения равновесных стратегий для игры
При заполнения каждой ячейки таблицы распределения исходов сравнения двух рук нам необходимо перебрать все возможные варианты общих карт. Таким образом нам потребуется перебрать вариантов. Для сокращения количества вариантов перебора можно воспользоваться описанным ранее разбиением стартовых рук на кластеры. Теперь можно сократить количество переборов до. Данное количество по прежнему велико для реализации. Поэтому для дальнейшей редукции вычислений будем использовать перебор каждого кластера с каждым из вариантов. Это несколько усложнит алгоритм, так как для разных сочетаний кластеров необходимо будет использовать разные правила перебора для наибольшего сокращения вычислений. Для каждого из этих вариантов будем перебирать все возможные стратегически различные сочетания карт выбранных кластеров и общих карт. Алгоритм перебора будет выглядеть следующим образом:
- 1. Фиксируем карты у первого кластера. 2. Перебираем все возможные сочетания карт с учетом изъятия карт первого кластера для второго кластера. Максимум возможно 24 варианта. При переборе будет идти фильтрация на не повторяемость каждой карты и на стратегическую уникальность каждого варианта. 3. Перебираем все возможные сочетания общих карт с учетом изъятия карт первого и второго кластера. При этом, в зависимости от сочетаний двух рассчитываемых кластеров возможно провести различные сокращения вычислений. 4. Умножаем полученные результаты на количество стратегически различных вариантов карт первого кластера.
Для сокращения количества вариантов для перебора сочетаний общих карт разобьем все кластера на три большие группы:
- - Руки которые не могут составить комбинацию флаш. Это будут руки типа: abcd. Их количество 1820. Далее будем называть эту группу разномастные. - Руки которые могут составить комбинацию флаш только с помощью одной масти. Это будут руки типа: aaaa, aaab, aabc. Их количество, 715+3718+7098=11531. Далее будем называть эту группу одномастные. - Руки которые могут составить комбинацию флаш с помощью двух мастей. Это будут руки типа: aabb. Их количество 3081. Далее будем называть эту группу двухмастные.
На основе этого разбиения на группы можно помимо главного множества уникальных карт ввести еще три множества:
- множество карт для которых масть не имеет значения. В колоде каждый элемент из этого множества должен повторяться 4 раза.
- первые 13 элементов этого множества будут составлять подмножество карт для которых масть не имеет значения. В колоде каждый элемент из этого подмножества должен повторяться 3 раза. Вторые 13 элементов этого множества будут составлять подмножество карт масти 1. В колоде каждый элемент из этого подмножества должен повторяться один раз.
- первые 13 элементов этого множества будут составлять подмножество карт для которых масть не имеет значения. В колоде каждый элемент из этого подмножества должен повторяться 2 раза. Вторые 13 элементов этого множества будут составлять подмножество карт масти 1. В колоде каждый элемент из этого подмножества должен повторяться один раз. Третьи 13 элементов этого множества будут составлять подмножество карт масти 2. В колоде каждый элемент из этого подмножества должен повторяться один раз.
Также введем функцию где а некий набор правил для отображения в множества.
Благодаря сокращению числа значимых мастей мы можем сильно уменьшить количество вариантов перебора общих карт. Для этого опишем 4 процедуры перебора общих карт, в случае если личные карты каждого из игрока при сравнении отображены в одно и вышеперечисленных множеств.
Процедуру перебора для множества на языке C++ можно посмотреть в приложении A3.
Процедуру перебора для множества на языке C++ можно посмотреть в приложении A4.
Процедуры для перебора множества и будут идти по аналогии.
Для каждого сочетания из этих групп будет свое правило перебора. Всего получится 6 таких сочетаний: разномастные - разномастные, разномастные - одномастные, разномастные - двухмастные, одномастные - одномастные, одномастные - двухмастные, двухмастные - двухмастные.
Рассмотрим правила перебора для групп разномастные - разномастные. Это одна из самых простых ситуаций. Согласно основному алгоритму зафиксируем карты первого кластера, после чего будем перебирать все возможные варианты карт второго кластера. В процессе этого перебора не будем осуществлять никаких дополнительных вычислений, а просто посчитаем количество возможных вариантов. В данной ситуации возможен лишь один стратегически значимый вариант сочетаний карт двух кластеров. Зафиксируем карты второго кластера и переберем все возможные варианты общих карты. Так как зафиксированные руки не могу собрать комбинацию флаш, зафиксированные карты мы можем отобразить в множество и перебрать все общие карты соответствующей функцией. После чего умножим полученный результат на количество вариантов полученных при переборе второго кластера.
Процедуру перебора двух кластеров данного сочетания групп на языке C++ можно посмотреть в приложении A5.
Рассмотрим правила перебора для групп разномастные - одномастные. Перед перебором зафиксируем карты карты игрока с одномастной группой. Таким образом при переборе вариантов карт разномастной группы будет стратегически различных варианта карт второго игрока. В зависимости от расположения масти которой первый игрок может собрать флаш. Для каждого из этих возможных вариантов перебираем все возможные варианты расположения мастей которыми нельзя собрать флаш и запоминаем их количество. Количество этих вариантов без фильтрации будет. После этого для каждого стратегически различного варианта второго игрока зафиксируем карты и переберем все возможные варианты общих карт. Так как первый игрок может собрать флаш лишь одной мастью а второй игрок не может собрать флаш мы можем отобразить все зафиксированные карты во множество и осуществить перебор общих карт соответствующей для этого множества процедурой. Затем умножим полученные результаты на количество вариантов перебора для текущей стратегической значимой комбинации второго игрока.
Процедуру перебора двух кластеров данного сочетания групп на языке C++ можно посмотреть в приложении A6.
Рассмотрим правила перебора для групп разномастные - двухмастные. Перед перебором зафиксируем карты карты игрока с двухмастной группой. Таким образом при переборе вариантов карт разномастной группы будет стратегически различных варианта карт второго игрока. В зависимости от расположения мастей которыми первый игрок может собрать флаш. Для каждого из этих возможных вариантов перебираем все возможные варианты расположения мастей которыми нельзя собрать флаш и запоминаем их количество. Количество этих вариантов без фильтрации будет. После этого для каждого стратегически различного варианта второго игрока зафиксируем карты и переберем все возможные варианты общих карт. Так как первый игрок может собрать флаш двумя мастями а второй игрок не может собрать флаш мы можем отобразить все зафиксированные карты во множество и осуществить перебор общих карт соответствующей для этого множества процедурой. Затем умножим полученные результаты на количество вариантов перебора для текущей стратегической значимой комбинации второго игрока.
Процедуру перебора двух кластеров данного сочетания групп на языке C++ можно посмотреть в приложении A7.
Рассмотрим правила перебора для групп одномастные - одномастные. Это наиболее сложная ситуация. Потому что группа одномастные состоит изтрех подгрупп: aaaa, aaab и aabc. Правила перебора для каждого сочетания из этих подгрупп будет различаться. Поэтому будем рассматривать перебор каждого из этих сочетаний отдельно.
Рассмотрим вариант перебора для подгрупп aabc - aabc. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 10 стратегически различных вариантов:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет только одна значимая масть, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масть второй карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 4. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масти карт которые не могу собрать флаш у второго игрока не пересекаются с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 5. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 6. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масть второй карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 7. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масти карт которые не могу собрать флаш у второго игрока не пересекаются с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 8. Когда масть которой второй игрок может собрать флаш совпадает с мастью второй карты которой первый игрок не может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 9. Когда масть которой второй игрок может собрать флаш не присутствует у второй игрока и масть второй карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 10. Когда масть которой второй игрок может собрать флаш не присутствует у второй игрока и масти карт которые не могу собрать флаш у второго игрока не пересекаются с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой.
После перебора каждого из случаев запоминаем количество возможных вариантов карт второго игрока. Затем перебираем все возможные варианты общих карт и умножаем получившийся результат на количество вариантов перебора карт второго игрока.
Процедуру перебора двух кластеров данного сочетания групп данного сочетания подгрупп на языке C++ можно посмотреть в приложении A8.
Рассмотрим вариант перебора для подгрупп aaab - aabc. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 7 стратегически различных вариантов:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет только одна значимая масть, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масть второй карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 4. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масти карт которые не могу собрать флаш у второго игрока не пересекаются с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 5. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 6. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масть второй карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 7. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масти карт которые не могу собрать флаш у второго игрока не пересекаются с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[24][4]=
[1]; //Таблица для перебора мастей
Int Variants[7]={6,10,14,18,20,22,24}; //Массив вариантов перебора
Int Types[7]={1,2,2,2,2,2,2}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=7; //Количество типов вариантов
Рассмотрим вариант перебора для подгрупп aabc - aaaa. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 4 стратегически различных варианта:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет только одна значимая масть, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 4. Когда масть которой второй игрок может собрать флаш совпадает с мастью второй карты которой первый игрок не может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[4][4]=
[2];
Int Variants[7]={1,3,4,6,8,10,12}; //Массив вариантов перебора
Int Types[7]={2,2,2,2,3,3,3,3}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=7; //Количество типов вариантов
Рассмотрим вариант перебора для подгрупп aabb - aaaa. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 3 стратегически различных варианта:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы все масти.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[4][4]=
{{0,0,0,0}, //Вариант 1
{1,1,1,1}, //Вариант 2
{2,2,2,2}, //Вариант 3
{3,3,3,3},
}; //Таблица для перебора мастей
Int Variants[3]={1,2,4}; //Массив вариантов перебора
Int Types[3]={2,2,3}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=3; //Количество типов вариантов
Рассмотрим правила перебора для групп двухмастные - двухмастные. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 7 стратегически различных вариантов:
- 1. Когда первая масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и вторая масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда первая масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и вторая масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда первая масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и вторая масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 4. Когда первая масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и вторая масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 5. Когда вторая масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и первая масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 6. Когда вторая масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и первая масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 7. Когда первая масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок и вторая масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[12][4]=
{{0,0,1,1}, //Вариант 1
{1,1,0,0}, //Вариант 2
{0,0,2,2}, //Вариант 3
{0,0,3,3},
{1,1,2,2}, //Вариант 4
{1,1,3,3},
{2,2,0,0}, //Вариант 5
{3,3,0,0},
{2,2,1,1}, //Вариант 6
{3,3,1,1},
{2,2,3,3}, //Вариант 7
{3,3,2,2},; //Таблица для перебора мастей
Int Variants[7]={1,2,4,6,8,10,12}; //Массив вариантов перебора
Int Types[7]={2,2,3,3,3,3,3}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=7; //Количество типов вариантов
- [1] 1,2,0,0}, //Вариант 1
{1,3,0,0},
{2,1,0,0},
{2,3,0,0},
{3,1,0,0},
{3,2,0,0},
{0,1,3,3}, //Вариант 2
{0,2,3,3},
{0,1,2,2},
{0,3,2,2},
{1,0,3,3}, //Вариант 3
{2,0,3,3},
{1,0,2,2},
{3,0,2,2},
{1,2,3,3}, //Вариант 4
{2,1,3,3},
{1,3,2,2},
{3,1,2,2},
{0,2,1,1}, //Вариант 5
{0,3,1,1},
{2,0,1,1}, //Вариант 6
{3,0,1,1},
{2,3,1,1}, //Вариант 7
{3,2,1,1 [2] 0,0,0,0}, //Вариант 1
{1,1,1,1}, //Вариант 2
{2,2,2,2}, //Вариант 3
{3,3,3,3} //Вариант 4
}; //Таблица для перебора мастей
Int Variants[4]={1,2,3,4}; //Массив вариантов перебора
Int Types[4]={1,2,2,2}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=4; //Количество типов вариантов
Рассмотрим вариант перебора для подгрупп aaab - aaab. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 5 стратегически различных вариантов:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет только одна значимая масть, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока и масть первой карты которая не может собрать флаш у второго игрока не совпадает с мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 4. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока не присутствует у первого игрока. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 5. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[12][4]=
{{1,0,0,0}, //Вариант 1
{2,0,0,0},
{3,0,0,0},
{0,2,2,2}, //Вариант 2
{0,3,3,3},
{1,2,2,2}, //Вариант 3
{3,2,2,2},
{1,3,3,3},
{2,3,3,3},
{2,1,1,1}, //Вариант 4
{3,1,1,1},
{0,1,1,1} //Вариант 5
}; //Таблица для перебора мастей
Int Variants[5]={3,5,9,11,12}; //Массив вариантов перебора
Int Types[5]={1,2,2,2,2}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=5; //Количество типов вариантов
Рассмотрим вариант перебора для подгруппы aaab - aaaa. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 3 стратегически различных варианта:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет только одна значимая масть, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш совпадает с мастью первой карты которой первый игрок не может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[4][4]=
{{0,0,0,0}, //Вариант 1
{3,3,3,3}, //Вариант 2
{2,2,2,2},
{3,3,3,3} //Вариант 3
}; //Таблица для перебора мастей
Int Variants[3]={1,3,4}; //Массив вариантов перебора
Int Types[3]={1,2,2}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=3; //Количество типов вариантов
Рассмотрим вариант перебора для подгрупп aaaa - aaaa. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 2 стратегически различных варианта:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с мастью которой первый игрок может собрать флаш. Количество этих вариантов без фильтрации будет. У этого сочетания будет только одна значимая масть, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш не присутствует у первого игрока. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[4][4]=
{{0,0,0,0}, //Вариант 1
{1,1,1,1}, //Вариант 2
{2,2,2,2},
{3,3,3,3}
}; //Таблица для перебора мастей
Int Variants[2]={1,4}; //Массив вариантов перебора
Int Types[2]={1,2}; //Массив типов перебора общих карт для каждого варианта перебора
Int numVariants=2; //Количество типов вариантов
Рассмотрим правила перебора для групп одномастные - двухмастные. Для перебора вариантов этой ситуации нам необходимо учесть, что группа одномастных состоит из трех подгрупп: aaaa, aaab и aabc. Каждую из этих подгрупп будем перебирать с двухмастными отдельно.
Рассмотрим вариант перебора для подгрупп aabb - aabc. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 12 стратегически различных вариантов:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и масть второй карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и масти карт которые не могу собрать флаш у второго игрока не пересекаются со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 4. Когда масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 5. Когда масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и масть второй карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 6. Когда масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и масти карт которые не могу собрать флаш у второго игрока не пересекаются с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 7. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок и масть второй карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 8. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок и масть второй карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 9. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок и масть второй карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 10. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок и масть второй карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 11. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок и масть второй карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 12. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок и масть второй карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти.
После перебора каждого из случаев запоминаем количество возможных вариантов карт второго игрока. Затем перебираем все возможные варианты общих карт и умножаем получившийся результат на количество вариантов перебора карт второго игрока.
Процедуру перебора двух кластеров данного сочетания групп данного сочетания подгрупп на языке C++ можно посмотреть в приложении A9.
Рассмотрим вариант перебора для подгрупп aabb - aaab. Зафиксируем карты первого игрока. В зависимости от расположения мастей у карт второго игрока в такой ситуации возможно 7 стратегически различных вариантов:
- 1. Когда масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 2. Когда масть которой второй игрок может собрать флаш совпадает с первой мастью которой первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 3. Когда масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 4. Когда масть которой второй игрок может собрать флаш совпадает со второй мастью которой первый игрок может собрать флаш и масть первой карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания будет две значимые масти, все карты можно будет отобразить в множество и осуществить перебор общих карт соответствующей для этого множества процедурой. 5. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок и масть первой карты которая не может собрать флаш у второго игрока совпадает с первой мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 6. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок и масть первой карты которая не может собрать флаш у второго игрока совпадает со второй мастью которой может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти. 7. Когда масть которой второй игрок может собрать флаш не совпадает с мастями которыми может собрать флаш первый игрок и масть первой карты которая не может собрать флаш у второго игрока не совпадает с мастями которыми может собрать флаш первый игрок. Количество этих вариантов без фильтрации будет. У этого сочетания значимы будут все масти.
После перебора этих вариантов делаем аналогичные действия что и в предыдущей ситуации.
Для процедуры на языке C++ нам нужно будет изменить значение нескольких переменных в процедуре для предыдущей ситуации:
Char TD[12][4]=
{{1,0,0,0}, //Вариант 1
{2,0,0,0}, //Вариант 2
{3,0,0,0},
{0,1,1,1}, //Вариант 3
{2,1,1,1}, //Вариант 4
{3,1,1,1},
{0,2,2,2}, //Вариант 5
{0,3,3,3},
{1,2,2,2}, //Вариант 6
{1,2,2,2},
{2,3,3,3}, //Вариант 7
{3,2,2,2
Похожие статьи
-
Алгоритм для определения силы комбинации - Программа построения равновесных стратегий для игры
В играх типа Omaha для определения силы комбинации необходимо учитывать 9 карт: 4 стартовых карты игрока и 5 общих карт. По стандартным правилам покера...
-
Стратегии - Программа построения равновесных стратегий для игры
Так как игра случайная, платежная матрица будет состоять из математических ожиданий возможных сочетаний стратегий. Стратегия в данной игре определяет...
-
Эквиляторы для игры Omaha - Программа построения равновесных стратегий для игры
Эквилятор - это программа для расчета распределения исходов в случае вскрытия. Распределение исходов вскрытия является основной частью в расчете...
-
Обзорная часть - Программа построения равновесных стратегий для игры
Правила игры Omaha Перед тем как описывать правила игры, внесем несколько определений терминов игры. Колода карт -- это полный набор прямоугольных или...
-
Интерпретация полученных результатов - Программа построения равновесных стратегий для игры
При изучении равновесных стратегий в модели jam-fold для двоих игроков можно заметить тот факт, что стратегии зависят только от соотношения...
-
Расчет равновесия по Нэшу - Программа построения равновесных стратегий для игры
В рамках данной ВКР была создана программа для расчета равновесных стратегий с помощью метода фиктивного разыгрывания. Благодаря использованию...
-
Модель Jam-Fold - Программа построения равновесных стратегий для игры
Модель Jam-Fold подразумевает, что в раунде торговли на этапе "Пре-флоп" каждый игрок может сделать только одно из двух действий: Fold - отказаться от...
-
Равновесие по Нэшу - Программа построения равновесных стратегий для игры
В теории игр равновесием по Нэшу называется ситуация при который ни один из игроков не может увеличить свой выигрыш, в одностороннем порядке меняя свое...
-
Введение - Программа построения равновесных стратегий для игры
Игра стратегия математический С появлением компьютеров широкое развитие получила тема искусственного интеллекта. Одним из направлений искусственного...
-
Заключение - Программа построения равновесных стратегий для игры
В настоящие время популярность игры Omaha растет. Постепенно появляется все больше регулярных турниров по этой игре на сайте Pokerstars. net. При этом...
-
Обзор калькуляторов для покера - Программа построения равновесных стратегий для игры
Как правило под покерным калькулятором подразумевают программу которая позволяет рассчитать математическое ожидание действия в заданной ситуации....
-
Расчет таблицы - Программа построения равновесных стратегий для игры
В ходе разработки программы, для эффективной работы основного алгоритма программы будет понадобилось рассчитать некоторые предрасчетные данные. Для этого...
-
Требования к программе, Описание задания, Описание игры и ее правил - Разработка игры "Морской бой"
Данная программа предназначена для работы под управлением операционных систем Windows 98, Windows ME, Windows 2000, Windows XP, Windows 7. Для корректной...
-
Предлагаемая библиотека хранит все данные в отдельных таблицах, таким образом он не обязан использовать ту же СУБД, что и основное приложение. В качестве...
-
Для оценки возможности выполнения проекта имеющимся в распоряжении разработчика штатным составом исполнителей, нужно рассчитать их среднее количество,...
-
Рисунок 1. Пример сложной схемы БД Пример проблемной ситуации, которую этот проект должен разрешить представлен на рис. 1. Организатор проводит события...
-
Для вычисления цвета могут быть использованы различные подходы. Вычисление цвета может проводиться одновременно с геометрической реконструкцией,...
-
Существующие принципы администрирования Кластер -- группа компьютеров, объединенных высокоскоростными каналами связи, представляющая с точки зрения...
-
Работа программы представлена на рисунке 2.3 Рис. 2.3 Кодирование и тестирование программы Программа кодировалась на языке Си++, используя библотеку Qt5x...
-
Для замеров производительности использовалось три запроса, представляющих три наиболее типичные проблемные рассчеты. Ниже приведены эти запросы на языке...
-
Стек технологий При выборе стека технологий основное внимание уделялось следующим факторам, в порядке убывания значимости: § Кроссплатформенность; §...
-
Методология Все тесты будут необходимо провести на разных размерах базы данных, чтобы увидеть, как классические JOINы скалируются в сравнении с...
-
Приложение, которое необходимо разработать, должно производить геометрическую реконструкцию сцены и вычисление цвета вершин модели. Для геометрической...
-
Ожидается, что предлагаемая библиотека даст большой прирост в производительности операций чтения, заполнив собственную нишу среди решений проблем...
-
Основная программа Построение интерполяционного многочлена Нахождение максимума функции методом дихотомии Вычисление значения заданной функции Создание и...
-
Рекомендации по совершенствованию использования информационно-коммуникационных технологий в интернет-среде в сфере здравоохранения для нужд врачей и...
-
В основе алгоритма лежит численное исследование пространства управляемых параметров редуктора. Процесс поиска оптимального решения выполняется за четыре...
-
Обозначенные условия определяют работу по внедрению многопоточных средств в модели параллельного программирования С общей памятью с использованием...
-
При разработке практически всех инструментальных средств за основу принимается методология автоматизации проектирования на базе использования прототипов....
-
Заключение - Разработка программы для реализации редактора временных графов синхронизации
Результатом выполнения задания является реализованный редактор временных графов синхронизации (класс временных сетей Петри), соответствующий задачам,...
-
2.1 Среды разработки для построения программных агентов Инструментальные средства разработки программных агентов формируют среду, которая оптимизирована...
-
Рассмотрим замкнутую сеть массового обслуживания с разнотипными заявками, которая является вероятностной моделью обслуживания заявок в УП "Проектный...
-
На чем основана работа программы - Rational Rose для разработчиков
Итак, от общих тем перейдем непосредственно к тому, что умеет делать CASE Rational Rose. Являясь объектно-ориентированным инструментом моделирования,...
-
Структура кластера и его параметры Вычислительный кластер -- это совокупность компьютеров, объединенных в рамках некоторой сети для решения одной задачи,...
-
Можно выделить три основных метода разработки программного обеспечения: 1. Конструкторы программ (Аlgoritm2, Devel Studio, MnCreator, Game Maker и др.)....
-
Обзор протокола Multi-Touch технологий передачи данных TUIO [7] - основной кроссплатформенный протокол с открытым исходным кодом Multi-Touch передачи...
-
В данном разделе была разработана функциональная схема работы программного комплекса, которая в общем виде описывает состав комплекса, характер и виды...
-
Гражданский кодекс Российской Федерации в части четвертой регулирует вопросы охраны результатов интеллектуальной деятельности и средств индивидуализации....
-
Введение - Различные виды программ для Multi-Touch столов
Мобильные телефоны, планшеты, платежные терминалы, стенды с интерактивными картами торговых центров, Multi-Touch стенды на выставках - все это яркие...
-
Описанный метод, по сути, анализирует поведение веб-приложения на предмет совершения недопустимых относительно профиля нормального поведения операций....
Алгоритм для вычисления распределения рука против руки - Программа построения равновесных стратегий для игры