一个博弈游戏,据说智商130才看的懂

博弈论是一门非常有意思的学问,之前小灰曾经分享过两个著名的博弈场景:囚徒困境智猪博弈

今天,我们来介绍一个更加烧脑的博弈游戏:硬币游戏

游戏规则

小灰和大黄都有若干块糖果。有一天大黄提议和小灰玩一个游戏。这是个什么游戏呢?规则很简单:

首先,他们各自拿出一枚硬币,并同时亮出

  • 如果同为正面,大黄给小灰3块糖果

  • 如果同为反面,大黄给小灰1块糖果

  • 如果是一正一反,小灰给大黄2块糖果

经过若干轮游戏,小灰的糖果都被大黄赢走了......

概率里的陷阱

为什么会发生这样的事情呢?我们可以好好探究一下这个问题。让我们试试看用一个表格表示小灰的收入:

↓ 小灰的选择 → 大黄的选择亮正面亮反面
亮正面3-2
亮反面-21

乍一看每种情况出现的概率都是 ,因此这个游戏似乎是极其公平的?那么是因为小灰运气不好呢?不不不,这个游戏里,其实包含着一个隐蔽 的漏洞:

如果是随机的抛硬币,那么每种情况出现的概率的确是 ,但是不要忘了,这个游戏的规则不是随机的抛硬币,我们可以主观选择自己亮出的硬币是正面还是反面,就像在玩“石头剪子布”一样。

我们假设大黄出正面的概率为p,小灰出正面的概率为  ,那么我们可以得到下图:

左图表示大黄,右图表示小灰

可以看到,此时 表示大黄出正面的概率, 表示大黄出反面的概率, 表示小灰出正面的概率,而 表示小灰出反面的概率。

以此为基础,很容易计算出:

  • 两人同时出正面的概率是 pq , 小灰的收获是3

  • 两人同时出反面时的概率是(1-p)(1-q) , 小灰的收获是1

  • 小灰出正面,大黄出反面的概率是(1-p)q , 小灰的收获是-2

  • 小灰出反面,大黄出正面的概率是p(1-q) , 小灰的收获是-2

我们用一个字母 表示小灰的预期收获,那么 的值为:

(也就是把他们加在一起了)

简化之得:

下面的分析会比较烧脑,涉及到含参数不等式以及减函数的知识,一次看不明白的小伙伴可以多看几遍。

求解方程

大黄想要赢小灰,就要使小灰的收入 小于 ,我们可以列出不等式:

的值代入,即:

大黄无法修改小灰的 值,但是他却能修改自己的 值,因此我们要求的就是 值的解集。把原式当做一个未知数为  的含参数不等式,先将参数项移至右面,把未知数项放在左面

合并同类项可得到:

对于一个含参数的不等式,我们要进行分类讨论:

  • 当参数>0时(两边同时除以参数,不等式符号不变)

  • 当参数<0时(两边同时除以参数,不等式符号改变)

  • 当参数=0时(原式有任意解)

    上面所说的参数,是指 8q-3 这一项

注:由于 在这里表示一个概率,因此 的取值范围一定只有 ,也就是说,当 为任意解时, 也仅仅只对任意的 成立。

对于上面参数不等式的三种情况,让我们分别进行具体讨论:

情况A,当参数大于0,即 时:

(不等式符号不变)

当定义域为 时,有函数

对应的函数图像为

将其不断放大,直到 的定义域为 ,发现函数图像的曲线是向下的:

也就是说,这是一个减函数,其定义域上的任何自变量 都有对应的

为了保证(在q的定义域内)不等式成立,p必须小于f(1),也就是 时,原式成立。

情况B,当参数小于0,即 时:

(不等式符号相反)

当定义域为 时,函数 为一个减函数,具体的函数图像可以看下图:

虽然它的曲线和刚才略有不同,不过仍然符合减函数的定义。

为了保证在(q的定义域内)不等式成立,p必须大于f(0),也就是 时,原式成立。

情况C,当参数等于0,即 时:

(任意解)

(仍然符合

我们把情况A、情况B、情况C当中p的取值范围求一个交集,最终得出:当大黄把亮正面的概率 控制在 时,小灰一定会输。

应用场景

这个游戏远远不止于此,其实它还能应用到生活中的很多场景里。我们以炒股为例子,把大黄想象成庄家,把亮正面想成做空,亮反面想成做多,那么在这个由庄家掌握的局面下,很显然投资者(也就是小灰)一定是会吃亏的。因此,请远离炒股,炒股有风险,投资需谨慎。

这个博弈论的问题就讲解到这里,谢谢阅读!

投稿作者:王乙堃

编辑整理:小灰

需要特别说的的是,王乙堃同学年仅12岁,在读小学六年级,能写出这样的文章真的很了不起,非常感谢他的投稿!

—————END—————

喜欢本文的朋友,欢迎关注公众号 程序员小灰,收看更多精彩内容

欢迎长按二维码关注 小灰学英语,你所学到的不只是英语!

给个[在看],是对小灰最大的支持!
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以为您提供一个简单的博弈树的PyTorch实现,以下是代码: ```python import torch import numpy as np class Node: def __init__(self, state, player): self.state = state self.player = player self.children = [] self.value = None def add_child(self, node): self.children.append(node) def is_leaf(self): return len(self.children) == 0 def is_max(self): return self.player == 1 def is_min(self): return self.player == -1 def minimax(node, alpha, beta): if node.is_leaf(): # evaluate leaf node return node.value if node.is_max(): value = -np.inf for child in node.children: value = max(value, minimax(child, alpha, beta)) alpha = max(alpha, value) if alpha >= beta: break node.value = value return value if node.is_min(): value = np.inf for child in node.children: value = min(value, minimax(child, alpha, beta)) beta = min(beta, value) if alpha >= beta: break node.value = value return value # Example usage # Define initial state initial_state = torch.tensor([0, 0, 0, 0, 0, 0, 0, 0, 0]) # Create root node root = Node(initial_state, 1) # Generate all possible child nodes for i in range(9): if initial_state[i] == 0: new_state = initial_state.clone() new_state[i] = 1 root.add_child(Node(new_state, -1)) # Run minimax algorithm on root node minimax(root, -np.inf, np.inf) # Get optimal child node optimal_child = None optimal_value = -np.inf for child in root.children: if child.value > optimal_value: optimal_value = child.value optimal_child = child # Optimal move is index of changed value in state optimal_move = (initial_state - optimal_child.state).nonzero()[0].item() print("Optimal move:", optimal_move) ``` 这个代码实现了一个具有最小值和最大值节点的博弈树,并使用minimax算法来搜索最佳移动。在这个例子中,我们模拟井字棋游戏,并在根节点上生成所有可能的子节点。然后,我们运行minimax算法来搜索最佳子节点,并返回最佳移动的索引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值