Poker-AI.org Poker AI and Botting Discussion Forum 2013-09-03T17:11:32+00:00 http://poker-ai.org/phpbb/feed.php?f=24&t=2564 2013-09-03T17:11:32+00:00 2013-09-03T17:11:32+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4797#p4797 <![CDATA[Re: How to generate x% handrange?]]>
There's no magic way to calculate your EV, that's the whole deal about making a poker bot. The objective is to know the EV of an action and taking whichever is most profitable.

A

Statistics: Posted by AiWins — Tue Sep 03, 2013 5:11 pm


]]>
2013-09-02T18:02:57+00:00 2013-09-02T18:02:57+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4788#p4788 <![CDATA[Re: How to generate x% handrange?]]> Quote:

Again, showdown equity doesn't relate to actual equity at all. Since it all depends how you play the post flop. Showdown equity assumes it is checked down to the river.

Suppose you have 22 OTB with 2000 chips. You raise to 40, villain 3bets to 120.
Villain has never 3bet before on a sample size of 1K hands. Let's assume he 3bets with aces and kings.
If we call and get his stack every time we hit the set, is our EV 18% as pokerstove tells us? It's more like 500%.


Ok..I understand that which is implied odds correct? Same as a small ball theory of calling 75s to a raise when you know your up against a big pair. You have the implied odds/higher EV of a having a disguised hand in a big pot as your more likely to get his entire stack (not to mention both cards are likely good). So the EV of calling is greater then the EV of folding even though you have a weaker hand. All that I understand as my bot already does this.

I am just trying to determine how I should weight the unknown cards when calculating EV. Of the unknown hands what would be a good baseline to start at with no villain stats? Like should I weight the unknown hands at 10, 15, or 20% probability? Thanks for your replies on this.

Statistics: Posted by shalako — Mon Sep 02, 2013 6:02 pm


]]>
2013-09-02T17:10:28+00:00 2013-09-02T17:10:28+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4787#p4787 <![CDATA[Re: How to generate x% handrange?]]> shalako wrote:

Quote:
A million of things, how did you reach 59.9% and how did you reach 56.18%?equity? Just because of showdown value? This is not an all in. You are missing that you are OOP and that you have 3 streets left to play. You can't just calculate your EV that easy.


I just stoved it real quick using showdown equity. Yes that assumes I am OOP because I have to play a tighter range..but not tight enough to be exploited. I am just trying to get a grasp of how much that missing 30% would make a difference so I just did a quick range vs range example. Postflop I have it calculating EV way differently..but I am not accounting for that 30% at all as I have eliminated it entirely from his range.

Can you show me a EV example showing the difference? Sounds like I have a leak as I do not have it accounting for unknown possibilities and from what everybody is saying I probably should. Thanks



Again, showdown equity doesn't relate to actual equity at all. Since it all depends how you play the post flop. Showdown equity assumes it is checked down to the river.

Suppose you have 22 OTB with 2000 chips. You raise to 40, villain 3bets to 120.
Villain has never 3bet before on a sample size of 1K hands. Let's assume he 3bets with aces and kings.
If we call and get his stack every time we hit the set, is our EV 18% as pokerstove tells us? It's more like 500%.

Statistics: Posted by AiWins — Mon Sep 02, 2013 5:10 pm


]]>
2013-09-01T23:04:59+00:00 2013-09-01T23:04:59+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4783#p4783 <![CDATA[Re: How to generate x% handrange?]]> Quote:

A million of things, how did you reach 59.9% and how did you reach 56.18%?equity? Just because of showdown value? This is not an all in. You are missing that you are OOP and that you have 3 streets left to play. You can't just calculate your EV that easy.


I just stoved it real quick using showdown equity. Yes that assumes I am OOP because I have to play a tighter range..but not tight enough to be exploited. I am just trying to get a grasp of how much that missing 30% would make a difference so I just did a quick range vs range example. Postflop I have it calculating EV way differently..but I am not accounting for that 30% at all as I have eliminated it entirely from his range.

Can you show me a EV example showing the difference? Sounds like I have a leak as I do not have it accounting for unknown possibilities and from what everybody is saying I probably should. Thanks

Statistics: Posted by shalako — Sun Sep 01, 2013 11:04 pm


]]>
2013-09-01T21:10:45+00:00 2013-09-01T21:10:45+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4782#p4782 <![CDATA[Re: How to generate x% handrange?]]> shalako wrote:

Quote:
But this doesn't hold for wider ranges, if your villain raises 70% of the hands, that doesn't mean he is never raising bottom 30% of his hands, that should be clear. That's why a population based approach is so hard.


I was pondering what you where saying about the bottom % of the range and I was wondering if it even matters. Lets assume he raises 100% of buttons 3x and we call a standard defense of say 38% of hands. Our EV vs that range is 59.9%. So if he only raises 70% of hands and we still call 38% of hands our EV is 56.18%. So even if we totally exclude the last 30% of hands our EV is still positive. Is this right or am I missing something?

A million of things, how did you reach 59.9% and how did you reach 56.18%?equity? Just because of showdown value? This is not an all in. You are missing that you are OOP and that you have 3 streets left to play. You can't just calculate your EV that easy.

Statistics: Posted by AiWins — Sun Sep 01, 2013 9:10 pm


]]>
2013-09-01T16:35:40+00:00 2013-09-01T16:35:40+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4781#p4781 <![CDATA[Re: How to generate x% handrange?]]> Quote:

But this doesn't hold for wider ranges, if your villain raises 70% of the hands, that doesn't mean he is never raising bottom 30% of his hands, that should be clear. That's why a population based approach is so hard.


I was pondering what you where saying about the bottom % of the range and I was wondering if it even matters. Lets assume he raises 100% of buttons 3x and we call a standard defense of say 38% of hands. Our EV vs that range is 59.9%. So if he only raises 70% of hands and we still call 38% of hands our EV is 56.18%. So even if we totally exclude the last 30% of hands our EV is still positive. Is this right or am I missing something?

Statistics: Posted by shalako — Sun Sep 01, 2013 4:35 pm


]]>
2013-08-31T12:15:14+00:00 2013-08-31T12:15:14+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4776#p4776 <![CDATA[Re: How to generate x% handrange?]]> Seikez wrote:

How to do it?

Look up tables, Monte Carlo Tree Search.

But that isn't the whole answer, because it assumes you know oppo's strategy in some detail and assume it is stationary.

Statistics: Posted by spears — Sat Aug 31, 2013 12:15 pm


]]>
2013-08-31T10:18:47+00:00 2013-08-31T10:18:47+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4773#p4773 <![CDATA[Re: How to generate x% handrange?]]> Quote:

Calculate the EV of each move for each of your opponent's card, then choose the option that gives the most EV on average.

Yeah, that sounds simple enough. But how do you actually do it?

Lets say I have just seen the flop. Now I want to find out what action my bot should take. How can I find the best EV in this situation in the time I have (say 15 seconds)? There can be a very large number of different games just on the flop depending on the actions taken by other players. Multiply that with all possible actions on turn and river an my bot would have to do approximately 6.97 gazillion evaluations to find the optimal action. That will not be ready by next Friday, and definitely not in 15 second or so when I need the answer.

See my problem? (but maybe the problem is that I am missing something?)

How to do it?

Statistics: Posted by Seikez — Sat Aug 31, 2013 10:18 am


]]>
2013-08-30T23:22:14+00:00 2013-08-30T23:22:14+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4772#p4772 <![CDATA[Re: How to generate x% handrange?]]> Seikez wrote:

Quote:
If you do know your opponent's range, then making the optimal decision is trivial.

So, how do you actually do it? Please enlighten me.

In my experience, few things are trivial. Most are much more complicated than you at first guess.

Taking the optimal decision when you know your opponent's hand is trivial, right?
Now you know your opponent's true odds of having each card. Really trivial.
Calculate the EV of each move for each of your opponent's card, then choose the option that gives the most EV on average.

Statistics: Posted by AiWins — Fri Aug 30, 2013 11:22 pm


]]>
2013-08-30T22:26:16+00:00 2013-08-30T22:26:16+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4770#p4770 <![CDATA[Re: How to generate x% handrange?]]> grab wrote:

For example if villain is 3betting 11% in a given situation, that doesn't mean he is 3betting the top 11%, i.e. 77+, A9s+, KTs+, QTs+, ATo+, KQo.


grab wrote:

top 11%, i.e. 77+, A9s+, KTs+, QTs+, ATo+, KQo.

That's funny. That's exactly what a hand range is, how else would you rank 11% best hands.

Statistics: Posted by AiWins — Fri Aug 30, 2013 10:26 pm


]]>
2013-08-30T14:10:48+00:00 2013-08-30T14:10:48+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4755#p4755 <![CDATA[Re: How to generate x% handrange?]]> Quote:

imho the whole idea of generating a top x% range is very flawed.


Yeah I agree with you totally. It has been a real thorn in my HU bot development.

Quote:

For example if villain is 3betting 11% in a given situation, that doesn't mean he is 3betting the top 11%, i.e. 77+, A9s+, KTs+, QTs+, ATo+, KQo. Most people 3bet the strongest hands, call the rest, and 3bet the strongest hands that can't profitably call a raise.


Quote:

So maybe something like that:

77+, AJs+, A5s-A2s, K8s-K6s, J9s, T9s, 98s, AKo, A9o-A8o, JTo


So in general they are 3 betting all value, higher SC, low suited blockers and flatting the broadways etc. That is almost identical to what I have coded now but its not dynamically adjusting the range like the rest of my bot. I am going to have to widen the value and bluff range based on his 3B stat. For now its the only solution I can come up with.

Quote:

And furthermore, even if you focus only on open raise and flat call ranges, 99% of the players (except the 24 tabling nits who know they ranges for any situation and never deviate) will heavily vary their ranges based on mood, reputation from the past few hands, table dynamics, perceived opponent behaviour...


This is a good point but is probably too difficult to figure out reliably.

Quote:

So something better might be to give each starting hand a weight based on past observations - for example, 99.99% to raise KK in a given spot, 78% for JTs, 14% for 56s, 3% for K2o, 0.2% for 63o...

However, you're going to need a huge database to make statistically relevent conclusions for the exact numbers are.


Yeah I think this is the only way to do it with any degree of accuracy in the long run.

Statistics: Posted by shalako — Fri Aug 30, 2013 2:10 pm


]]>
2013-08-30T10:09:35+00:00 2013-08-30T10:09:35+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4753#p4753 <![CDATA[Re: How to generate x% handrange?]]>
For example if villain is 3betting 11% in a given situation, that doesn't mean he is 3betting the top 11%, i.e. 77+, A9s+, KTs+, QTs+, ATo+, KQo. Most people 3bet the strongest hands, call the rest, and 3bet the strongest hands that can't profitably call a raise.

So maybe something like that:

77+, AJs+, A5s-A2s, K8s-K6s, J9s, T9s, 98s, AKo, A9o-A8o, JTo

And furthermore, even if you focus only on open raise and flat call ranges, 99% of the players (except the 24 tabling nits who know they ranges for any situation and never deviate) will heavily vary their ranges based on mood, reputation from the past few hands, table dynamics, perceived opponent behaviour...

So something better might be to give each starting hand a weight based on past observations - for example, 99.99% to raise KK in a given spot, 78% for JTs, 14% for 56s, 3% for K2o, 0.2% for 63o...

However, you're going to need a huge database to make statistically relevent conclusions for the exact numbers are.

Statistics: Posted by grab — Fri Aug 30, 2013 10:09 am


]]>
2013-08-30T07:51:45+00:00 2013-08-30T07:51:45+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4752#p4752 <![CDATA[Re: How to generate x% handrange?]]> Seikez wrote:

Quote:
If you do know your opponent's range, then making the optimal decision is trivial.

So, how do you actually do it? Please enlighten me.


I'm interested too in this topic, however can i assert that, at micros (NL 2, 5, 10) 6max and full ring , for the most of my opponents, this rule:
Code:
"For wider ranges, if your villain raises 70% of the hands, that mean he is never raising bottom 30% of his hands"

is true the most of the times (let's say 90% of the times)?

Statistics: Posted by shadehs — Fri Aug 30, 2013 7:51 am


]]>
2013-08-30T06:32:28+00:00 2013-08-30T06:32:28+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4750#p4750 <![CDATA[Re: How to generate x% handrange?]]> Quote:

If you do know your opponent's range, then making the optimal decision is trivial.

So, how do you actually do it? Please enlighten me.

In my experience, few things are trivial. Most are much more complicated than you at first guess.

Statistics: Posted by Seikez — Fri Aug 30, 2013 6:32 am


]]>
2013-08-30T04:49:31+00:00 2013-08-30T04:49:31+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4747#p4747 <![CDATA[Re: How to generate x% handrange?]]> It is true that if villain raises .9% of the times, when he raises he is almost half of the time holding pocket aces (ignoring blockers).
But this doesn't hold for wider ranges, if your villain raises 70% of the hands, that doesn't mean he is never raising bottom 30% of his hands, that should be clear. That's why a population based approach is so hard.

Also, the handrange will depend on the type of situation and action the player is taken, all hand rankings will be different for raising, calling, betting and checking. And they will even be different depending on their opponent's hand range and their opponent's perception of his own hand range.
It's cool that you thought you had the game solved once you figured the hand range, but getting an accurate hand range is the hard part. If you do know your opponent's range, then making the optimal decision is trivial.

Statistics: Posted by AiWins — Fri Aug 30, 2013 4:49 am


]]>
2013-08-29T07:07:09+00:00 2013-08-29T07:07:09+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4738#p4738 <![CDATA[Re: How to generate x% handrange?]]>
ibot wrote:

Code:
static String[] reducedRange = new String[] { "AA", "KK", "QQ", "JJ", "TT", "AKs", "99", "AQs", "AJs", "KQs", "AKo", "88", "ATs", "KJs", "AQo", "KTs", "QJs", "77", "A9s", "AJo", "KQo", "QTs", "A8s", "K9s", "JTs", "A7s", "ATo", "66", "KJo", "Q9s", "A6s", "A5s", "QJo", "KTo", "K8s", "A4s", "J9s", "A9o", "T9s", "K7s", "A3s", "55", "Q8s", "QTo", "A2s", "K6s", "JTo", "J8s", "A8o", "K9o", "K5s", "T8s", "Q7s", "K4s", "44", "98s", "A7o", "Q6s", "J7s", "K3s", "Q9o", "K2s", "T7s", "Q5s", "A5o", "A6o", "J9o", "K8o", "97s", "87s", "33", "Q4s", "T9o", "J6s", "A4o", "K7o", "A3o", "Q8o", "Q3s", "Q2s", "J5s", "T6s", "22", "96s", "A2o", "76s", "86s", "J4s", "J8o", "K6o", "T8o", "J3s", "K5o", "J2s", "T5s", "Q7o", "75s", "98o", "T4s", "65s", "85s", "95s", "K4o", "J7o", "T3s", "T2s", "Q6o", "T7o", "94s", "K3o", "74s", "64s", "54s", "Q5o", "84s", "97o", "K2o", "93s", "87o", "Q4o", "92s", "53s", "J6o", "73s", "83s", "63s", "43s", "Q3o", "T6o", "J5o", "82s", "86o", "76o", "Q2o", "96o", "52s", "62s", "J4o", "42s", "72s", "T5o", "32s", "J3o", "75o", "65o", "95o", "85o", "J2o", "T4o", "T3o", "54o", "64o", "T2o", "94o", "84o", "74o", "93o", "53o", "92o", "63o", "73o", "43o", "83o", "82o", "52o", "62o", "42o", "72o", "32o" };




If Villain has VPIP=18% and PFR=14%, this works.
Code:
villainRaisingRange = getRange(14);


But this doesn't:
Code:
villainCallingRange = getRange(18);
for (int i = 0; i < villainRaisingRange.Count; i++ )
{
    villainRaisingRange.Remove(villainRaisingRange[i]);
}

because getRange(18) doesn't include 22+ but only 66+ and doesn't include many speculative hands, like 98s, 87s, AXs.

So you should have a reduced Raising Range:
Code:
static String[] reducedRange = new String[] { "AA", "KK", "QQ", "JJ", "TT", "AKs", "99", "AQs", "AJs", "KQs", "AKo", "88", "ATs", "KJs", "AQo", "KTs", "QJs", "77", "A9s", "AJo", "KQo", "QTs", "A8s", "K9s", "JTs", "A7s", "ATo", "66", "KJo", "Q9s", "A6s", "A5s", "QJo", "KTo", "K8s", "A4s", "J9s", "A9o", "T9s", "K7s", "A3s", "55", "Q8s", "QTo", "A2s", "K6s", "JTo", "J8s", "A8o", "K9o", "K5s", "T8s", "Q7s", "K4s", "44", "98s", "A7o", "Q6s", "J7s", "K3s", "Q9o", "K2s", "T7s", "Q5s", "A5o", "A6o", "J9o", "K8o", "97s", "87s", "33", "Q4s", "T9o", "J6s", "A4o", "K7o", "A3o", "Q8o", "Q3s", "Q2s", "J5s", "T6s", "22", "96s", "A2o", "76s", "86s", "J4s", "J8o", "K6o", "T8o", "J3s", "K5o", "J2s", "T5s", "Q7o", "75s", "98o", "T4s", "65s", "85s", "95s", "K4o", "J7o", "T3s", "T2s", "Q6o", "T7o", "94s", "K3o", "74s", "64s", "54s", "Q5o", "84s", "97o", "K2o", "93s", "87o", "Q4o", "92s", "53s", "J6o", "73s", "83s", "63s", "43s", "Q3o", "T6o", "J5o", "82s", "86o", "76o", "Q2o", "96o", "52s", "62s", "J4o", "42s", "72s", "T5o", "32s", "J3o", "75o", "65o", "95o", "85o", "J2o", "T4o", "T3o", "54o", "64o", "T2o", "94o", "84o", "74o", "93o", "53o", "92o", "63o", "73o", "43o", "83o", "82o", "52o", "62o", "42o", "72o", "32o" };

and a reduced Calling Range that it's different.
Code:
static String[] reducedCallingRange = new String[] { ... };

Statistics: Posted by shadehs — Thu Aug 29, 2013 7:07 am


]]>
2013-08-28T21:47:57+00:00 2013-08-28T21:47:57+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4734#p4734 <![CDATA[Re: How to generate x% handrange?]]> Quote:

But why do you say it is for HU? It doesn't say anything about HU on the page where you can get the list: http://www.pokerroom.com/poker/poker-school/ev-stats/total-stats-by-card/?sSortOrder=value&x=19&y=16
I get the impression it is based on all types of Holdem games. Right?


There is another page in which you can specify what game you want stats from. Just look around the site.

Quote:

From your description here I guess that your bot is EV or rules based, not a N-Net bot. Right?
I say this because I am trying to understand the different technologies you can use when making a bot. What you describe here is a kind of rules based function in your bot that will effect the actions it takes. As far as I understand, the Neural Net ARE the rules in a NN-bot. I guess that inserting another set of rules (your rules based opponent modeller) that affects the decisions taken by the NN-rules might not work very well. Right?


Mine is all rules based. I have no idea have NN bots work. I like having total control of the bots actions so I have avoided any of that stuff.

Quote:

The bot I am developing will play ring games. How can I know all scenarios it has to handle?


Well your just going to have to go thru each seat and set up scenarios. An example is the button. Your gonna have to have rules based on whether your first in, raised pot, limped pot, open shove etc. Then your also going to have to have rules based on not just your first action but subsequent actions..like if you get reraised. That is just preflop. For post flop your gonna have to have rules based on again..first in, bet into, LTA, FTA, preflop raiser, HU or multiway, hand strength etc

Statistics: Posted by shalako — Wed Aug 28, 2013 9:47 pm


]]>
2013-08-28T19:06:33+00:00 2013-08-28T19:06:33+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4733#p4733 <![CDATA[Re: How to generate x% handrange?]]> Quote:

I use the Real Play Statistics HU set

Yes, I think that should reflect actual play better than a list generated by some synthetic algorithm. Maybe.
But why do you say it is for HU? It doesn't say anything about HU on the page where you can get the list: http://www.pokerroom.com/poker/poker-school/ev-stats/total-stats-by-card/?sSortOrder=value&x=19&y=16
I get the impression it is based on all types of Holdem games. Right?

Quote:

Naw that is easy. Rough examples for HU:

From your description here I guess that your bot is EV or rules based, not a N-Net bot. Right?
I say this because I am trying to understand the different technologies you can use when making a bot. What you describe here is a kind of rules based function in your bot that will effect the actions it takes. As far as I understand, the Neural Net ARE the rules in a NN-bot. I guess that inserting another set of rules (your rules based opponent modeller) that affects the decisions taken by the NN-rules might not work very well. Right?

Quote:

For ring it will get more complicated because there will be many more scenarios to deal with.

The bot I am developing will play ring games. How can I know all scenarios it has to handle?

Statistics: Posted by Seikez — Wed Aug 28, 2013 7:06 pm


]]>
2013-08-28T15:49:02+00:00 2013-08-28T15:49:02+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4732#p4732 <![CDATA[Re: How to generate x% handrange?]]> Quote:

You say you "use PPT and Pokerstove like everybody else"
1. Does this mean you use PPT Poker Query Language in your bot via the XMLRPC server API?
2. Are you using the PokerStove evaluator code from https://github.com/andrewprock/pokerstove, or are you using PS in som other way?


I currently use the PPT command line tool but it is very slow. I am trying to get the pokerstove code to work but I am having some issues. One thing I do not like about pokerstove is that its equity engine based on hand vs three random hands. The upside is that its very fast.

Quote:

But what is the "HH cardset" and how do you get it?


Here is a list of hand rank systems: http://www.bigbetsoftware.com/holdemviewer/rankings/

I use the Real Play Statistics HU set. As you can see there are quite a few different systems. HoldemViewer allows you to change the cardset which is a really cool feature. I wish Pokerstove did that. PPT has a few different ones as well.

Quote:

You say that "I take the villains stats and form the range like normal"
4. This sounds like a very high level description of the bots opponent modeller. I haven't started looking at the design of the OM yet, but I realize it will not be a trivial task. From what you say I almost get the impression there is a "normal" way to do it. How do I do it? Could you point me in the right direction?


Naw that is easy. Rough examples for HU:

Your on the BB and villain raises 80% of buttons your range would be AA-80% of hands. If your on the button and raise and he calls the range would be his 3B % up to his BB calling %. So lets say its 5% 3B and 35% call..so your range is 5-35% of hands. So basically you eliminate his raising hands. Now like I stated above it gets a little more involved then that but you get the idea. You have to program every scenario like limping, 3B, 4B, shove etc. Luckily there are not that many for HU. For ring it will get more complicated because there will be many more scenarios to deal with.

For a preflop shove I think using a LUT is good. I just stoved all the hands down to 35% equity and created my own LUTs. I think I stoved it for 4 different ranges/scenarios. For anything below 20BB you can just use the NE charts. I use the Magriel number (Magriel = Stack/(BB+SB)) which I think is a better reflection of effective stack sizes. Magriel kicks in quite a bit earlier then what would be considered normal...like 50% earlier. I may change it but I am not sure which is better as I have never heard any discussion about it.

Statistics: Posted by shalako — Wed Aug 28, 2013 3:49 pm


]]>
2013-08-28T09:28:22+00:00 2013-08-28T09:28:22+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4731#p4731 <![CDATA[Re: How to generate x% handrange?]]>
I am in the early stages of my bot. Still gathering basic information on botting and trying to decide on a general architecture and what technology to use (NN, rules based, etc...). Your answer therefore triggered a number of new questions:

You say you "use PPT and Pokerstove like everybody else"
1. Does this mean you use PPT Poker Query Language in your bot via the XMLRPC server API?
2. Are you using the PokerStove evaluator code from https://github.com/andrewprock/pokerstove, or are you using PS in som other way?

You say you are "using the HH cardset and not the TopX cardset"
3. Thanks to the answer from ibot, I now know how to generate TopX handranges. But what is the "HH cardset" and how do you get it?

You say that "I take the villains stats and form the range like normal"
4. This sounds like a very high level description of the bots opponent modeller. I haven't started looking at the design of the OM yet, but I realize it will not be a trivial task. From what you say I almost get the impression there is a "normal" way to do it. How do I do it? Could you point me in the right direction?

Statistics: Posted by Seikez — Wed Aug 28, 2013 9:28 am


]]>
2013-08-28T05:04:22+00:00 2013-08-28T05:04:22+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4730#p4730 <![CDATA[Re: How to generate x% handrange?]]>
The higher a villains 3B stat the more complicated it gets. This is where having some kind of weighted range would be of use. I can weight the cardset by just reducing the number of combos of certain hands when running equity which is one way to do it.

One thing I am working on is using the showdown info to verify/add what hands are in his ranges. The only real ones of importance are the 3B and 4B hands pre and what he raises with post. This info will help figure out how polarized a villains betting habits are.

Statistics: Posted by shalako — Wed Aug 28, 2013 5:04 am


]]>
2013-08-27T20:04:51+00:00 2013-08-27T20:04:51+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4729#p4729 <![CDATA[Re: How to generate x% handrange?]]> I'm using custom ranges anyway because at micros everyone flats small pairs, so if you get called you must include 22+.
Also i think that calling range table is different from raise range table.

Statistics: Posted by shadehs — Tue Aug 27, 2013 8:04 pm


]]>
2013-08-27T17:33:28+00:00 2013-08-27T17:33:28+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4727#p4727 <![CDATA[Re: How to generate x% handrange?]]> Quote:

There are a few posts in the old forum covering this, but this is the main part of code from it that I use

Thanks ibot! I will try that code for a first attempt at generating handlists from percentage.

However...

Quote:

The big issue is that people do not follow TopX%.

... sounds right to me. Thanks for your input, shalako.

Could you please tell us more about your method?
I gather you have analyzed a a list of hand histories and have boiled them down to a number of lookup tables. How did you do that?
Then you will have to choose one of these tables depending on your opponent and his behavior. How do you do that?

Statistics: Posted by Seikez — Tue Aug 27, 2013 5:33 pm


]]>
2013-08-27T16:34:40+00:00 2013-08-27T16:34:40+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4726#p4726 <![CDATA[Re: How to generate x% handrange?]]>
I switched from TopX to a handset that is based on actual HH files. The differences are pretty big.

Statistics: Posted by shalako — Tue Aug 27, 2013 4:34 pm


]]>
2013-08-27T14:25:54+00:00 2013-08-27T14:25:54+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4723#p4723 <![CDATA[Re: How to generate x% handrange?]]>
Code:
static String[] reducedRange = new String[] { "AA", "KK", "QQ", "JJ", "TT", "AKs", "99", "AQs", "AJs", "KQs", "AKo", "88", "ATs", "KJs", "AQo", "KTs", "QJs", "77", "A9s", "AJo", "KQo", "QTs", "A8s", "K9s", "JTs", "A7s", "ATo", "66", "KJo", "Q9s", "A6s", "A5s", "QJo", "KTo", "K8s", "A4s", "J9s", "A9o", "T9s", "K7s", "A3s", "55", "Q8s", "QTo", "A2s", "K6s", "JTo", "J8s", "A8o", "K9o", "K5s", "T8s", "Q7s", "K4s", "44", "98s", "A7o", "Q6s", "J7s", "K3s", "Q9o", "K2s", "T7s", "Q5s", "A5o", "A6o", "J9o", "K8o", "97s", "87s", "33", "Q4s", "T9o", "J6s", "A4o", "K7o", "A3o", "Q8o", "Q3s", "Q2s", "J5s", "T6s", "22", "96s", "A2o", "76s", "86s", "J4s", "J8o", "K6o", "T8o", "J3s", "K5o", "J2s", "T5s", "Q7o", "75s", "98o", "T4s", "65s", "85s", "95s", "K4o", "J7o", "T3s", "T2s", "Q6o", "T7o", "94s", "K3o", "74s", "64s", "54s", "Q5o", "84s", "97o", "K2o", "93s", "87o", "Q4o", "92s", "53s", "J6o", "73s", "83s", "63s", "43s", "Q3o", "T6o", "J5o", "82s", "86o", "76o", "Q2o", "96o", "52s", "62s", "J4o", "42s", "72s", "T5o", "32s", "J3o", "75o", "65o", "95o", "85o", "J2o", "T4o", "T3o", "54o", "64o", "T2o", "94o", "84o", "74o", "93o", "53o", "92o", "63o", "73o", "43o", "83o", "82o", "52o", "62o", "42o", "72o", "32o" };

public static ArrayList<String> getRange(double percentage)
   {
      if (percentage <=1) percentage *= 100;

      double total = 0;
      ArrayList<String> range = new ArrayList<String>();

      for (String s : reducedRange)
      {

         if (s.indexOf("s") > 0) {
            total += (4 / (double)1326);
         } else if (s.indexOf("o") > 0) {
            total += (12 / (double)1326);
         } else {
            total += (6 / (double)1326);
         }

         if (total > (percentage / (double)100)) {
            break;
         } else {
            range.add(s);
         }
      }

      return range;

   }

The top x% usually refers to the hands in order of strength.
So the top 10% of hands will return the strongest 10% of hands.
As far as I know, the number of opponents doesn't affect the hand range of a certain figure.
However, it would be important to remove any hands that are known (e.g. your own).

Statistics: Posted by ibot — Tue Aug 27, 2013 2:25 pm


]]>
2013-08-27T13:32:09+00:00 2013-08-27T13:32:09+00:00 http://poker-ai.org/phpbb/viewtopic.php?t=2564&p=4722#p4722 <![CDATA[How to generate x% handrange?]]>
In PokerStove and ProPokertools you can get a hand range by specifying a percentage, which gives you a range with top x% hands. These programs seem to always generate the same ranges, independent of number of opponents.

There is also a online tool that generates hand ranges from a percentage on this site: http://www.pokerhandrange.com/
This tool generates slightly different ranges depending on if there are 1, 2 or 3 opponents.

1. Should number of opponents affect the hand range for a certain percent figure?
2. When we get a range for top x% hands, what does that actually mean? Top x% according to what criterion?
3. Where can I get a library or code that generates hand ranges from a percentage?

Statistics: Posted by Seikez — Tue Aug 27, 2013 1:32 pm


]]>