一个投票游戏,一个博弈的问题

前段时间参加一个培训,老师出了一道题,是一个游戏,规则如下:

  1. 总共4个人投票,分别代表一个组
  2. 每个人能投X或者Y,总共进行4局,每一局根据投票结果记分:
  3. 4X 每组输一分
  4. 3X 每组赢一分, 1Y 输3分
  5. 2X 每组赢2分, 2Y每组输2分
  6. 1X 赢3分, 3Y 每组输1分
  7. 4Y 每组赢一分
  8. 每组可以讨论5分钟,然后开始投票
  9. 4名投票人在游戏的第二局和第三局开始前可以进行1分钟的沟通,其余过程不允许说话
  10. 游戏结束,每组按得分领取奖章(分数为负的,扣除以前获得的奖章)

从上面的规则看来,如果列一下收益矩阵的话,很容易得出一个结论,无论其他人投什么,投X始终是优势策略。投票的结果是第一轮,全X,第二轮2X2Y,第三轮第四轮全X。

 

这个结果很正常,第二轮讨论之后的结果肯定是大家投Y,但是有两组背叛了协议,第三轮和第四轮肯定已经不信任了,全X。本来出题的老师是希望大家明白一个道理,合作才会更容易双赢,但是这个题目出的不好。

 

大家都在争论,很多人说什么人性本善,贪婪之类的,太不理性了,在这个竞争的环境下,按照这个游戏规则,根本就没有合作的可能。

 

博弈的前提是大家都是理性人,而且是为了自己的利益作出选择,因此背叛是必然的。老师应该不懂博弈论。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的博弈树的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算法来搜索最佳子节点,并返回最佳移动的索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值