Программная Оценка Покерных Рук

  • Автор темы Graffgorgona
  • Обновлено
  • 20, Oct 2024
  • #1

Имея руку, я пытаюсь определить ее ценность и ради развлечения реализовать это на языке программирования. Будет ли работать следующее? Я не игрок в покер, поэтому точно не знаю.

Ввод: 7 карт --> проверьте, есть ли стрит --> если есть стрит, затем проверьте, есть ли также флеш, и в этом случае значение руки должно быть стрит-флеш --> если есть стрит, но не флеш, то значение руки, скорее всего, будет стритом --> если стрита вообще не было, то проверьте, не является ли это каре. Если true, то значение руки равно каре --> если неверно, проверьте, есть ли фулл-хаус --> если неверно, проверьте, является ли это флеш --> если неверно, проверьте набор --> если неверно, проверьте две пары --> если не правда, проверьте пару --> если не правда, то это просто кикер.

#инструменты для покера #рука

Graffgorgona


Рег
13 Apr, 2020

Тем
88

Постов
192

Баллов
632
  • 25, Oct 2024
  • #2

Общий метод, который вы описываете (то есть проверка на руку-x, затем проверка на руку-y, ...), - это то, что покерные программисты назвали бы «наивным» или «базовым» оценщиком. Не то чтобы в этом было что-то не так, просто это просто, понятно и, вероятно, медленно.

Чтобы написать один из них, я предлагаю следующее:

  1. Начните с 5 карт. После того, как вы это запишете, вы сможете оценить 7-карточные комбинации, оценив 20 комбинаций по 5 карт каждого набора из 7, а затем выбрав лучшую из этих 20.

  2. Начните свой оценщик с сортировки рук по рангу A...2. Для этого будет полезно, если вы решите представлять карты в естественном порядке — это зависит от языка.

  3. Затем проверьте руки в обратном порядке: т. е. проверьте стрит-флеши, затем каре, фулл-хаусы и т. д., вплоть до одной пары.


После того, как вы это сделаете, возможно, вам захочется рассмотреть более сложные (и более быстрые) подходы. Например, алгоритм на основе простых чисел «Cactus Kev», код на основе растровых изображений Pokersource или моя собственная библиотека OneJoker, которая использует оптимизированный направленный ациклический граф, чтобы получить то, что я считаю самым быстрым оценщиком 5-карт в мире («2 +2" использует тот же подход и работает быстрее для 7 карт, но требует гораздо больше памяти).

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

 

KnoroIncurn68


Рег
07 Mar, 2012

Тем
85

Постов
187

Баллов
632
  • 25, Oct 2024
  • #3

Даже если бы это «сработало» (как Папарацци указывает, что это не так, потому что вы можете иметь как стрит, так и флеш из 7 карт, не имея при этом стрит-флеша), это не будет самым эффективным способом в долгосрочной перспективе.

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

Проверить эта страница например, для одного примера метода оценки на основе гистограммы.

 

V1394


Рег
07 Feb, 2007

Тем
68

Постов
184

Баллов
544
  • 25, Oct 2024
  • #4

Во-первых, это может быть стрит и флеш, но не стрит-флеш.

Это оценщик 5 карт здесь. 7 примерно в два раза сложнее. Это слишком много для хобби-проекта.

Как вы описываете, это будет очень медленно.

Подсчитайте все совпадения рангов один раз. Затем флеш, затем стрит, а затем, если стрит и флеш, проверьте наличие стрит-флеша.

Даже с 7 у вас не может быть каре или лодки, а также стрит-флеш. Поскольку они дешевы в эксплуатации, сделайте это в первую очередь.

 

Sadick


Рег
26 Oct, 2004

Тем
73

Постов
203

Баллов
578
  • 25, Oct 2024
  • #5

Посмотрите этот алгоритм https://github.com/HenryRLee/PokerHandEvaluator/blob/master/Documentation/Algorithm.md. Вам не нужно перебирать все 5-карточные руки из 7-карточного покера. Более того, вам не нужно проверять каждую рейтинговую категорию, от стрит-флеша до старшей карты, одну за другой. Всего несколько циклов процессора и хеш-таблица позволяют оценить до 9-карточных покерных комбинаций.

 

Abeapperpara


Рег
09 Jan, 2014

Тем
65

Постов
213

Баллов
578
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно