Poker-AI.org

Poker AI and Botting Discussion Forum
It is currently Mon Nov 13, 2023 5:48 pm

All times are UTC




Post new topic Reply to topic  [ 9 posts ] 
Author Message
PostPosted: Thu Aug 29, 2013 7:10 am 
Offline
Junior Member

Joined: Wed May 15, 2013 10:15 pm
Posts: 42
How can i count the outs on a given board, knowing my cards and my opponents' range ?


Top
 Profile  
 
PostPosted: Thu Aug 29, 2013 10:36 pm 
Offline
Junior Member

Joined: Sat Aug 03, 2013 8:21 pm
Posts: 18
The outs counting system is a heuristic for humans who have no effective way of knowing their opponent's hand.
If you want to calculate outs agaisnst a range of hands, you would then have an array of outs, one for each of opponent's hand.
Also, outs to what? To beat him? In that case A2o vs 74o on a KQJ5r board, has 44 outs.
All in all, outs are a naive system, and if you still want to use them, then you do not need opponent's range, for such complex calculations you can achieve much better results by calculating equity directly.
Doesn't the following code seem silly?
Code:
float Flop_Draw(Outs)
{
switch (outs)
{
case 0:
return 0;
case 1:
return 4,4;
etc...
}

float ProbabilityDraw(Board,Hand)
{
Outs=HowManyOuts(Board,Hand);
return Flop_Draw_Odds(Outs);
}

Why even include Outs?


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 12:24 am 
Offline
Junior Member

Joined: Sat Jun 29, 2013 1:43 am
Posts: 11
shadehs wrote:
How can i count the outs on a given board, knowing my cards and my opponents' range ?



I have done this with single hands but the same would apply to a range except you might want "average" outs since each individual
hand in the range gives different outs.

An array of all the opponenthands including yours.

int totalouts = 0;

foreach(hand in opponenthand)
foreach(car in remainingcard)
evaluate your and vs opponenthand
if your win+ties > than opponents win+ties
outs++



//averaging the total outs
totalOuts = totalouts / opponenthands

I use your hand vs opponent range assuming you have only one opponent. But, it can be applied more generically by n opponents
with n ranges.

I use who has the highest win + tie because if you had say 5 people in the hand the highest win+tie could be under 50%
but that person is still better off than the remaining players.


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 4:37 am 
Offline
Junior Member

Joined: Sat Aug 03, 2013 8:21 pm
Posts: 18
Sharkfacepoker wrote:
shadehs wrote:
How can i count the outs on a given board, knowing my cards and my opponents' range ?



I have done this with single hands but the same would apply to a range except you might want "average" outs since each individual
hand in the range gives different outs.

An array of all the opponenthands including yours.

int totalouts = 0;

foreach(hand in opponenthand)
foreach(car in remainingcard)
evaluate your and vs opponenthand
if your win+ties > than opponents win+ties
outs++



//averaging the total outs
totalOuts = totalouts / opponenthands

I use your hand vs opponent range assuming you have only one opponent. But, it can be applied more generically by n opponents
with n ranges.

I use who has the highest win + tie because if you had say 5 people in the hand the highest win+tie could be under 50%
but that person is still better off than the remaining players.

That's too naive. for 23s on a QKA board with a flush draw, you really don't need to do all that, there's thousands of similar cases where you just have the same amount of outs for a lot of hands in his range.
Perhaps if you told us why you want to know the amount of outs.


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 4:52 am 
Offline
Junior Member

Joined: Sat Jun 29, 2013 1:43 am
Posts: 11
AiWins wrote:
Sharkfacepoker wrote:
shadehs wrote:
How can i count the outs on a given board, knowing my cards and my opponents' range ?



I have done this with single hands but the same would apply to a range except you might want "average" outs since each individual
hand in the range gives different outs.

An array of all the opponenthands including yours.

int totalouts = 0;

foreach(hand in opponenthand)
foreach(car in remainingcard)
evaluate your and vs opponenthand
if your win+ties > than opponents win+ties
outs++



//averaging the total outs
totalOuts = totalouts / opponenthands

I use your hand vs opponent range assuming you have only one opponent. But, it can be applied more generically by n opponents
with n ranges.

I use who has the highest win + tie because if you had say 5 people in the hand the highest win+tie could be under 50%
but that person is still better off than the remaining players.

That's too naive. for 23s on a QKA board with a flush draw, you really don't need to do all that, there's thousands of similar cases where you just have the same amount of outs for a lot of hands in his range.
Perhaps if you told us why you want to know the amount of outs.



How it that too naïve ? It's enumeration not Monte Carlo so if he wanted to know an "average" over the possible specific hands that would give it an exact amount.

Now weather he uses win/tie or equity depends on what he is evaluating.


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 4:59 am 
Offline
Junior Member

Joined: Sat Aug 03, 2013 8:21 pm
Posts: 18
I just did , most of the time you are going to have the same amount of outs against every significant hand.
And some random hands, you will have some random outs:
Imagine a hand where you have 40 outs to beat 50% of his range and 2 outs to beat the other 50% of his range. Is there any situation where returning the average odds (21) useful?
I reiterate, perhaps OP can tell us why.


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 7:45 am 
Offline
Junior Member

Joined: Wed May 15, 2013 10:15 pm
Posts: 42
Of course it has no sense to calculate outs if i am winning the hand.
I know that i'm winning from a MonteCarlo simulation of my hand against the range of villains.
If i'm losing, i need the number of outs for this formula if i have the odds to call his bet:

Code:
            var outOdds = OutOdds();
            var potOdds = PotOdds();

            if (BetRound == Rounds.Flop)
                return (outOdds * 2.0) > potOdds;

            if (BetRound  == Rounds.Turn)
                return (outOdds * 1.2) > potOdds;
         
       


But actually i can't get a formula to count the outs that it's working good.


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 12:34 pm 
Offline
Junior Member

Joined: Sat Jun 29, 2013 1:43 am
Posts: 11
AiWins wrote:
I just did , most of the time you are going to have the same amount of outs against every significant hand.
And some random hands, you will have some random outs:
Imagine a hand where you have 40 outs to beat 50% of his range and 2 outs to beat the other 50% of his range. Is there any situation where returning the average odds (21) useful?
I reiterate, perhaps OP can tell us why.


Here is an app I have which does what you are looking for minus the "range" part. Instead this one is vs all possible remaining hands.

Image

In this case I take all remaining turn cards possible and then all remaining hands minus the turn so

foreach(var card in cards)
foreach(var hand in hands)



If the average for each card is >=50 of the 1035 possible opponents then I grant that card an out. In my case its against only one opponent that has the full range but the logic could be used against multiple opponents each with their own range.

You can see the outs as well and the implied odds really are the "reverse" implied odds since its how much more you need to get if you do make then called when you do not have the proper odds.

So I don't think the logic is really naïve in this case. I think this is what you are looking for.


Top
 Profile  
 
PostPosted: Fri Aug 30, 2013 7:50 pm 
Offline
Junior Member

Joined: Wed May 15, 2013 10:15 pm
Posts: 42
Yes, thank you. I'm making some experiments with xpokerequity and your code actually works.

Counting the correct outs will be a HUGE improvement to my bot :-)


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 9 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group