智游城

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2760|回复: 9
打印 上一主题 下一主题

用JAVA自己写一个赢率计算器, 遇到了一些问题, 请高手进!

[复制链接]
跳转到指定楼层
1#
ticoarm 发表于 2015-5-28 14:48:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近想自己用java写一个类似pokerstove的赢率计算器, 思路还是穷举法, 数据结构和里面的算法都想好了, 但是遇到了一个问题, 就是算法的效率太慢了.
拿最简单的单挑, 一手牌对一手牌, 算赢率, 生成所有公共牌的组合, 也就是生成48取5的组合数, 我用的算法,在我还不错的电脑上跑了几分钟才跑完结果, 所以我想问一下, 关于这方面, 是我穷举法的思路不对, 还是有更优化的算法吗? 我用网上写好的赢率计算器, 在同样的电脑上, 不到一秒就出结果了...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏
2#
muyir 发表于 2015-5-28 15:11:37 | 只看该作者
建议这么来:
一手牌对另一手牌,这样的组合是有限的,不如事先算好保存好,到时候查询一下。这个理论最快
3#
yoking 发表于 2015-5-28 19:27:54 | 只看该作者
扑克学校出的Equilab计算时也分Enumerate all/Monte Carlo两种模式。但选Enumerate all时很快,Monte Carlo则很慢,估计是界面表达错误。

我没能力提供挑战算法的建议,自用的话,建个完整成手牌库是最笨重,又最有效率的方法。数据库结构和索引做得好,查询速度应该可以接受(尤其计算多人局、range vs. range时)。
4#
yoking 发表于 2015-5-28 19:28:27 | 只看该作者
扑克学校出的Equilab计算时也分Enumerate all/Monte Carlo两种模式。但选Enumerate all时很快,Monte Carlo则很慢,估计是界面表达错误。

我没能力提供挑战算法的建议,自用的话,建个完整成手牌库是最笨重,又最有效率的方法。数据库结构和索引做得好,查询速度应该可以接受(尤其计算多人局、range vs. range时)。
5#
Howard 发表于 2015-5-28 23:31:38 | 只看该作者
网上计算的很快,我认为是两种情况
一是Monte Carlo且指定模拟次数较少
二是Enumerate all但情况较简单,比如二人单挑,且给出flop,只有45 choose 2 = 990种可能

但即使Enumerate all,也不应该太慢,48choose5 也就才170来万种组合,一般的电脑应该秒出结果。为了测试,我让我电脑运行Monte Carlo,也是每秒钟可以计算两三百万个组合。应该是楼主算法有可改进之处。

另外穷举法只能用于很简单的情况,稍微一复杂,组合数就爆炸式增长,再快的电脑也得歇菜。
比如三人锅,两人有一定的range,另外一个随机牌,计算赢率
一个人 top 30%,另一个人top 20%,那么这个大约组合数是
1326*0.3 * 1225*0.2 * 1128* 46 choose 5 = 1.5e14

150万亿,恐怕得计算一整天才能遍历
6#
 楼主| ticoarm 发表于 2015-5-29 01:18:12 | 只看该作者
感谢大家.

觉得网上的计算器也应该是提前算好赢率, 存入数据库, 然后用的时候调出来.

应该是存了一手牌对一手牌的赢率, 对于范围的话, 可能就是在一手牌的基础上再进行计算吧.
7#
老陈 发表于 2015-5-30 12:04:43 来自手机 | 只看该作者
要求精度不是很高, Monte Carlo算法完全能够满足。
8#
snowsnow 发表于 2015-5-30 18:22:30 | 只看该作者
请问那种计算机语言最容易?
9#
老陈 发表于 2015-5-30 21:55:39 来自手机 | 只看该作者
本帖最后由 老陈 于 2015-5-30 07:57 编辑
snowsnow 发表于 2015-5-30 04:22
请问那种计算机语言最容易?


我感觉Visual Basic不错,我在计算概率的帖子贴过几个程序。
我做苹果手机APP只能用Objective-C。
10#
snowsnow 发表于 2015-6-8 22:04:53 | 只看该作者
业余人士最好用 javascript, 连软件都不用装
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|智游城论坛

GMT+8, 2024-12-26 00:32 , Processed in 0.044238 second(s), 7 queries , Redis On.

Powered by Discuz! X3.2

© 2001-2012 Comsenz Inc.

返回顶部