bupticybee / TexasSolver

🚀 A very efficient Texas Holdem GTO solver :spades::hearts::clubs::diamonds:
https://bupticybee.github.io/texassolver_page
GNU Affero General Public License v3.0
1.69k stars 301 forks source link

[Improvement] Range selection improvement #64

Open HigginTown opened 2 years ago

HigginTown commented 2 years ago

This is a great project, thank you for the work you have done so far.

I would like to propose a UX improvement.

Many users will be interacting with the range selection features. Currently, you have included some default ranges. This is very helpful.

One way you can improve this is to look into the UX provided by Flopzilla (https://www.flopzilla.com/) by implementing a sliding bar that allows users to populate the range with a % of hands. For instance, the slider would start at 0% with 0 hands selected, but then the user could slide the bar to the right and increase the number of hands included to be the top % of hands, where the top hands are determined by some metric, such as all-in EV against a random hand. This makes selecting ranges must faster for users.

Thank for you this amazing project! I would contribute if I knew C++ :)

Also, do you have a public roadmap or list of features you plan to add?

bupticybee commented 2 years ago

I konw about this range thing, piosolver has the same function. However till now I didn't konw how to map an float number (between 0~1) to range strings, I read some paper and konw roughly how to but it's a little bit complicated.

If you can provide the algorithm to do this the function can be written in notime.

There are plans for future, next version will be focusing on save format change and read from save file back to ui. But I'm planning to get few weeks of rest first. I'm pretty exhausted in the past few weeks.

HigginTown commented 2 years ago

You will see that this is very easy actually if you keep it simple.

You need to map a specific hand combination to a float. Then, for example, the interval [0, 10] would correspond to "the top 10% of hands."

There are a few ways you could build this map. See this forum post (end of post has good links with theory) https://forumserver.twoplustwo.com/showpost.php?p=43509551&postcount=2

For example, in one implementation, you could

For every hand combination h in the total collection of starting hand combinations H, calculate the hand versus range equity of h versus H minus h. This means you have a float that corresponds to every possible starting hand. Then you sort them and use that for the GUI.

For example, see Pokerstrategy Equilab screenshot image

image

Thank you for the work, enjoy your break!

I also found a bug I will report in a new issue.

mix16atpitt commented 2 years ago

It is unnecessary to have this feature since there is not a universal definition of the hand ranking and one can already customize the range. Nevertheless, you may find the following project(PokerStove) helpful to map a float to a specific range/hand: https://github.com/andrewprock/pokerstove

bupticybee commented 2 years ago

https://github.com/andrewprock/pokerstove

Interesting project, will take a deeper look when I got the time.