philosucker / Text_Holdem

Texas Holdem Application with AI agents
Apache License 2.0
3 stars 0 forks source link

[07.11.2024] 홀덤 게임 팟 분배 로직 비교 #8

Open philosucker opened 1 month ago

philosucker commented 1 month ago

팟 분배 논리

1. 기여도 유무 논리

요약 : 기여도 유무 논리로 승자에게 팟 분배, 기여도 유무로 패자에게 남은 팟 분배
핵심 : 기여도 유무 논리를 적용하기 위해서는 스트릿마다 유저들이 기여한 만큼의 팟을 전부 따로 만들어야 함
분배 논리 상세 :
    ㄱ. 스트릿마다 기여도 만큼 팟 생성
        각 스트릿에서 해당 스트릿의 팟 형성에 기여한 모든 유저들의 기여도 중 
        최소 기여도만큼을 해당 스트릿 팟 총액을 이루는 각자의 기여도에서 각출하여 메인 팟을 만들고,
        줄어든 각자 기여도에서 다시 최소 기여도 만큼 각출하여 사이드 팟을 만들고
        이런 식으로 해당 스트릿의 팟 총액이 0이 될때까지 사이드 팟을 계속 생성
    ㄴ. 승리시 기여도 유무 논리 :    
        단독승리시 자신이 기여한 메인팟 및 사이드 팟은 모두 가져가고
        무승부시 해당 팟에 기여한 무승부 인원만큼 등분해서 가져간다.
    ㄷ. 패배시 기여도 유무 논리 :    
        남은 팟을 패자에게 분배할 땐, 해당 팟에 자신이 기여한 만큼 돌려 받는다.

2. 기여도 비율 논리 + 카드 랭크 순위 논리 

요약 : 기여도 비율 논리로 승자에게 팟 분배, 카드 랭크 순위대로 패자에게 남은 팟 분배시 기여도 비율 논리 적용
핵심 : 각 스트릿의 팟 총액에 대해 유저들이 기여한 기여도의 비율과 stake for all(승자가 해당 팟에서 단독승을 했을 때 가져가게 될 몫)을 계산해 사용한다.

승리시 기여도 비율 논리 요약 : 해당 스트릿의 팟 총액에 대해서, 
                            단독승이면 stake for all을 다 가져가고
                            무승부면, 
                                팟 총액이 각자의 stake for all 을 줄 정도로 크면, 각자의 stake for all을 가져가고
                                팟 총액이 그보다 작으면, 팟 총액에 대해 자신의 기여도 비율만큼 가져간다. 
패배시 기여도 비율 논리 + 카드 랭크 순위 논리 요약 : 
    해당 스트릿의 남은 팟에 대해서, 해당 팟을 형성하는데 자신이 낸 지분비율만큼 카드랭크 순위대로 돌려 받는다 

분배 논리 상세   
    스트릿 별로 순회하면서 해당 스트릿에 승자가 있으면
    해당 팟은 승자에게 배분하는데
        단독승이면 승자의 stake for all 전부를 돌려주고 
        무승부면 무승부인 사람의 stake for all을 합친 금액이 
            해당 팟의 기여도 총합보다 크거나 같을 경우 : 무승부 인원들의 해당 팟 기여도 비율대로 해당 팟을 배분하고
            헤당 팟의 기여도 총합보다 작을 경우        : 각 무승부 인원들의 stake_for_all 만큼 배분한다.
        단독승, 무승부 각각
            승자들의 팟 배분이 끝나고 팟이 남은 경우 패자들에게 돌려줄 때는 카드랭크 순위대로 돌려주되
            남은 사람이 한 명인 경우
                그의 팟 기여도가 남은 팟보다 작으면 : 그의 팟기여도만큼 다 돌려주고
                그의 팟 기여도가 남은 팟보다 크면   : 남은 팟을 그에게 다 준다.
            남은 사람이 무승부일 경우
                각 인원의 팟 기여도 총합이 남은 팟 사이즈보다 작은 경우 : 팟 기여도 대로 주고
                각 인원의 팟 기여도 총합이 남은 팟 사이즈 보다 큰 경우  : 기여도 비율대로 남은 팟을 배분한다.    
    해당 스트릿에 승자가 없으면 패자들에게 해당 팟을 카드랭크 순위대로 돌려주되
        남은 사람이 한 명인 경우
            그의 팟 기여도가 남은 팟보다 작으면 : 그의 팟기여도만큼 다 돌려주고
            그의 팟 기여도가 남은 팟보다 크면   : 남은 팟을 그에게 다 준다.
        남은 사람이 무승부일 경우
            각 인원의 팟 기여도 총합이 남은 팟 사이즈보다 작은 경우 : 팟 기여도 대로 주고
            각 인원의 팟 기여도 총합이 남은 팟 사이즈 보다 큰 경우  : 기여도 비율대로 남은 팟을 배분한다.   

기여도 유무 논리와 기여도 비율 논리의 결과 차이

'flop' : 'users_pot_contributions': {'HJ': 50, 'D': 230, 'BB': 980, 'UTG': 10, 'CO': 30} 'contribution_total': 1300, 'stake_for_all': {'HJ': 190, 'D': 550, 'BB': 1300, 'UTG': 50, 'CO': 130} 'main_pot': {'size': 50, 'contributors': ['UTG', 'CO', 'HJ', 'D', 'BB']} 'side_pot_1': {'size': 80, 'contributors': ['CO', 'HJ', 'D', 'BB']} 'side_pot_2': {'size': 60, 'contributors': ['HJ', 'D', 'BB']} 'side_pot_3': {'size': 360, 'contributors': ['D', 'BB']} 'side_pot_4': {'size': 750, 'contributors': ['BB']}}}

BB와 CO의 기여도/stake for all은 각각 980/1300, 30/130

기여도 유무 논리 적용시 BB 몫은 1245 = 750 + 360 + 60 + 40 + 25 CO 몫은 65 = 40 + 25

기여도 비율 논리 적용시 BB 몫은 1261 = (980 1300) // 1010 CO 몫은 38 = (30 1300) // 1010

기여도 유무 논리를 적용하면
    무승부 발생시, 
        해당 팟에 기여한 유저와 무승부 인원이 같다면 각자가 기여한 만큼 가져가고 
        해당 팟에 기여한 유저보다 무승부 인원이 적다면 해당 팟을 등분해서 가져간다
    팟이 남았을 시
        패자는 해당 스트릿의 팟에 자신이 기여를 했다면, 카드 랭크 순위와 상관없이, 남은 팟에서 자기가 기여한 만큼 돌려 받는다
            > 게임에서 졌다면, 진 사람의 순위는 무의미. 승자의 팟 분배가 끝나고 남은 팟에선 자기가 낸 돈만큼 무조건 돌려 받음

기여도 비율논리를 적용하면
    무승부 발생시, 
        기여도가 더 많은 쪽이 더 많은 몫을 받게 되고, 기여도가 더 적은 쪽은 더 적은 몫을 받게 된다.
    팟이 남았을 시, 
        패자는 해당 스트릿의 팟에 자신이 기여를 조금이라도 했다면, 카드랭크 순위가 높을 경우 남은 팟에서 자신이 기여한 만큼의 비율로 먼저 돌려 받을 수 있다
            > 게임에서 져도 순위가 유의미. 승자의 팟 분배가 끝나고 남은 팟에서 카드 순위가 높을 수록 자기가 낸 돈만큼의 비율로 돌려받을 수 있는 가능성 높아짐
            > 즉 카드 순위가 낮으면 자기가 낸 돈만큼 못받을 수 있음 

게임에서 이겼을 경우 기여도 비율논리가 더 많이 낸 쪽에 더 많은 몫을, 더 적게 낸 쪽에 더 적은 몫을 줌 이길 것 같으면 무조건 올인을 하는게 더 이득이 된다. 게임에서 졌을 경우 기여도 비율논리에선 카드랭크가 높다면 돈을 돌려받을 가능성이 높아진다.

기여도 유무 논리에서는 자기 몫을 돌려 받아야 할 경우 카드 순위와 상관없이 자신이 낸만큼은 무조건 돌려 받는다. 이겼을 경우엔 지분이 있는 팟을 다가져가거나 등분해 받아가거나 둘 중 하나이므로 더 낸 만큼 더 받거나 덜 낸만큼 덜 받지 않는다는 면에서 공정하다.

정리하면 기여도 유무 논리는 이겼을 때 공정하고 졌을 때 불공정하다. 기여도 비율 논리는 이겼을 때 불공정하고 졌을 때 공정하다.

둘의 장점만 합칠 수 없을까? 이겼을 땐 지분이 있는 팟만 다 가져가고, 무승부시엔 등분 졌을 땐 카드 랭크 순위대로 기여한 비율만큼 돌려 받는 분배 방법