想搞一个以 Python 运行的计算骰子结果的程序,求建议。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mrxyz
V2EX    问与答

想搞一个以 Python 运行的计算骰子结果的程序,求建议。

  •  
  •   mrxyz 2021-07-24 04:57:17 +08:00 via Android 2123 次点击
    这是一个创建于 1619 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近跟朋友喝酒玩骰子,发现一个游戏有点意思。

    假设有 abc 三个人,每人五颗骰子,当 A 报点之后 B 猜他的点数,然后报点,C 接着猜 B 的点数,每个人猜点数的时候都只能比上一家高,击鼓传花,一直循环,直到某一人觉得上一家的点数绝对在场上没有,那就开他,输了喝酒。

    这个游戏的核心是击鼓传花,并且报点只能比上一家大,例如 A 报点三个 5 那么 B 必须报点三个 6 或者四个 2 这样子。

    这个游戏有三个特殊规则
    一:1 点可以当任何数,比如我的骰子有三个 1 和一个 2 一个 3,那么我可以报点四个 2,或者四个 3 。结算的时候场上每个人的 1 点都是公用的参与结算。
    二:如果某人把 1 点报了,那么第一条规则就作废。并且下一家可以考虑继续加 1 报点,或者直接翻倍报点,那么第一条规则生效。例如 A 报点四个 1,B 可以报点五个 1,如果 B 觉得有必要搏一把,可以翻倍从八个 X 开始报点。
    三:玩家的五颗骰子摇出豹子算六个。
    12 条回复    2021-07-24 20:47:26 +08:00
    mrxyz
        1
    mrxyz  
    OP
       2021-07-24 05:07:01 +08:00 via Android
    抱歉前面不小心点提交了,接着描述。

    那么基于这个规则,要写一个 Python 程序的思路是怎样的,不知道这个和围棋的神经计算程序 Leela zero 是否有相似的运作思路,比如我设置好场上的骰子数量之后,然后报点,它给我计算我该喊的点数,这个计算结果是计算概率,然后提交出概率最大的点数,按照概率给出建议是否该开。

    我个人觉得这个游戏规则用穷举貌似不好计算,因为每个玩家并不会真正的如实报点,玩的过程中,每个人都会诓一下,以套路下家或者引导别人喊到我想要的点数上来。所以在这里发出这个游戏规则想集思广益一下
    mrxyz
        2
    mrxyz  
    OP
       2021-07-24 05:10:44 +08:00 via Android
    再补充一点,这个游戏在第一个人报点的时候必须是按照场上玩家数量加一报点,例如三个人就要从四个 X 报点。五个人从六个 X 报点。如果第一个人想报点 1 而不是 X,那么可以自由决定用实际玩家数量来报点 1,例如五个人就报点五个 1,或者六个 1 这样子,反正就是不能少于场上玩家。
    mrxyz
        3
    mrxyz  
    OP
       2021-07-24 05:26:22 +08:00 via Android
    抱歉有两点忘说了,如果某玩家的五个骰子是不重复的称为单色,那么他的骰子不参与结算。

    还有结算的时候按照场上的骰子数来结算,而不是按照被开那个人的骰子数来结算。

    举例 1:
    A 点数为 11235,B 为 22233,C 为 23333 。A 报点四个 2,B 觉得有,报点五个 2 或者很自信报点七个 2,轮到 C 觉得没有那么多,C 开 B,C 输。(场上刚好七个 2 )

    举例 2:A 点数为 12345,B 点数为 12356,C 点数为 33333 。C 根据自己的情况直接报点六个 3,轮到 A,A 选择加一报点七个 3,轮到 B,B 觉得没有选择开 A,B 输。(场上两个单色,只有 C 的参与结算,C 的豹子,场上总数为六颗)
    mrxyz
        4
    mrxyz  
    OP
       2021-07-24 05:54:30 +08:00 via Android
    这个程序我想设计的是,当游戏开始,我输入我的点数后,根据规则计算,然后按照胜率给出几种结果参考去报数,并且由于这个游戏在开点之前是一直循环叫喊的,还需要允许输入新的报点数据后,继续计算。并不是一次就完。而理论上在输入更新的一次报点数据后,程序计算出来的胜率会更高。
    charlie21
        5
    charlie21  
       2021-07-24 05:55:15 +08:00 via iPhone
    太复杂了自己发明的游戏吗
    zxCoder
        6
    /div> zxCoder  
       2021-07-24 07:05:48 +08:00 via Android
    太复杂了看不懂
    GuuJiang
        7
    GuuJiang  
       2021-07-24 11:11:55 +08:00 via iPhone
    @mrxyz 这不就是“吹牛”嘛,好好的规则被你给描述得细碎
    这个游戏说实话跟概率关系不大,因为别人的任意一次报点都有可能是假的,虽然通过统计确实可以得出一些类似“这个人上一次和这一次之间必有一个是假的”这样的结论,但是对于游戏决策没有关注,因为有可能是上一次假这一次真

    @charlie21 @zxCoder 给楼上看不懂规则的解释下,如果没理解错,题主说的应该是流行于全国各地酒吧的名为“吹牛”的游戏,基本规则如下
    1. 所有人摇骰子,每个人只能看到自己的点数,按顺序依次行动
    2. 每次行动中可以喊“X 个 Y”,意思是所有人的骰子加起来至少有 X 个骰子点数为 Y
    3. 上一个玩家喊完后下一个玩家可以接着喊 X1 个 Y1,且必须满足 Y1 > Y or (Y1 == Y and X1 > X),也可以选择开,如果选择了开,所有人把骰子翻开,如果上家喊的条件满足则上家喝酒,否则开的这个玩家喝酒,游戏结束
    4. 还有其他一些补充规则,例如 1 可以当任意点,但是如果有人喊过 X 个 1 则此规则失效

    这个游戏由于是非完全信息博弈,且有很大的心理成分,所以用程序计算的帮助不大,实战当中基本的技巧一般是利用自己某个点数较多的优势,把对手逼到一个“喊又喊不过,开的话你又是真的”这个境地,同时前期还可以冒险喊一些假的,让别人对你的点数产生误判,从而在后面喊真的进行出击时积累优势,这些更多考验的是心理素质、表演能力以及对对手风格的熟悉程度等,假设对面是个绝对理性的人或机器,在已知大家都只会选择最优解的前提下,可以通过马尔可夫过程大致推断出对面的点数从而做出决策,但要是对面是个不按常理出牌乱喊一气的,理性一方反而会被乱拳打死老师傅,因为你从前面得到的虚假信息中推出了错误的结论
    aeron
        8
    aeron  
       2021-07-24 11:33:32 +08:00 via iPhone
    067 ?
    jmc891205
        9
    jmc891205  
       2021-07-24 12:11:03 +08:00
    3 个人 5 个骰子参与的决策点的数量大概在 10^16 左右,这个数量级可以做完全搜索。
    mrxyz
        10
    mrxyz  
    OP
       2021-07-24 13:13:47 +08:00 via Android
    @GuuJiang 描述太对了。我才玩,所以不清楚这个游戏叫啥。确实是你说的这样,我想的是,既然算是信息博弈类型,那么它的计算方式是否可以用神经网络下围棋的那套算法来玩,因为如果通过穷举,它有很多可能性,并且无法准确验证有效性。而通过类似阿法狗的那种下围棋的方式来计算学习,可能会有比较好的效果,我详细如果是机器懂这个规则,他们玩起来会比人类强。
    GuuJiang
        11
    GuuJiang  
       2021-07-24 13:42:11 +08:00
    @mrxyz 你以 liar's dice 为关键字搜索,可以看到确实有一些人尝试了 AI 在这个游戏中的应用,有兴趣的话可以看一下,不过个人观点,程序在这种游戏里作用极其有限,因为不管是什么样的程序,都需要正确的输入来的得到正确的输出,但是在这个游戏里,输入完全有可能是无效的甚至负面的,就好像专业高手玩的斗地主,在普通玩家看起来有些操作会很蠢,实际上是因为高手追求稳定,总是考虑最坏情况,而普通玩家通常喜欢赌一把,所以有的时候就会看到高手因为过度谨慎而输掉一把牌,但是换成普通玩家反而能赌对,吹牛也是一样,即使真的做出这样的程序,我估计在面对小白玩家时反而容易输掉
    mrxyz
        12
    mrxyz  
    OP
       2021-07-24 20:47:26 +08:00 via Android
    @GuuJiang 感谢指路,我个人认为这种不像围棋一样带有纯理性预判的逻辑也许对 ai 算法也是很有挑战性的。希望有一天能看到这个游戏更好的博弈算法。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5585 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:40 PVG 14:40 LAX 22:40 JFK 01:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86