python博弈论代码_使用 40 多行的 Python 代码实现一个简单的演化过程

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

在纳米比亚的 PyCon 会议上,我发表了一篇名为 《使用 Python 解决“升级版的剪刀石头布”》(Rock, Paper, Scissors, Lizard, Spock with Python )的文章。在这篇文章中,介绍到用Nashpy 来计算两个玩家的平衡是很简单的事情,但是其中只是涉及了一点点演化稳定性的内容。 在这篇博文中,我将阐述一下如何在 Python + Numpy 环境下,使用大概 40 行代码来建立一个简单的演化过程模型。

我想讲的第一个游戏是“旅行者困境”问题。这里给出一个简化的版本:

0b7cb433298d459fb9850e8162543ee4.png

我不想过多的讲解这个游戏的数学模型如何建立。在建模后,我们只需要知道一件事情,那就是我们有两个玩家:

行玩家:选择我们处于哪一行;

列玩家:选择我们处于哪一列。

如果,行玩家选择的是第二行,列玩家选择的是第三列,则得分为:5,1。即行玩家得 5 分,而列玩家得 1 分。这个时候列玩家可能会倾向于选择第一列,这样的话得分就是 0,4 了。

下面,我们可以使用 Nashpy 来计算这个游戏的平衡位置。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于演化博弈论的模型种类繁多,此处给出一个简单的例子:囚徒困境。 囚徒困境是一个经典的博弈论问题,涉及两个囚犯,被控告犯有某个罪。检察官给每个囚犯提供了一个选择:承认罪或者否认罪。如果两个人都否认罪,那么他们都将被判无罪;如果两个人都承认罪,那么他们都将被判有罪;如果其中一个人承认罪而另一个人否认罪,那么承认罪的人将被判有罪,而另一个人将被判无罪。囚犯之间不能互相沟通,也不能改变自己的选择。 假设有两种策略:承认罪和否认罪,分别用数字 1 和 0 表示。我们可以用一个表来表示一个囚犯的策略,例如 [1, 0] 表示囚犯承认罪。 下面的代码中,我们将使用博弈论的 Nash 均衡理论来计算囚徒困境的最优策略。具体地,我们采用了 Replicator Dynamics 算法来模拟演化过程。 ```python import numpy as np # 定义囚徒困境的收益矩阵 # 注意:这里的矩阵是按照 [0, 1] 表示否认罪,[1, 0] 表示承认罪的顺序排的 payoff_matrix = np.array([[3, 0], [5, 1]]) # 定义 Replicator Dynamics 算法 def replicator_dynamics(payoff_matrix, num_iterations): num_strategies = len(payoff_matrix) population = np.random.rand(num_strategies) for i in range(num_iterations): fitness = np.dot(population, payoff_matrix) avg_fitness = np.dot(fitness, population) new_population = population * (fitness / avg_fitness) population = new_population / np.sum(new_population) return population # 计算 Nash 均衡 nash_equilibrium = replicator_dynamics(payoff_matrix, 10000) # 输出结果 print('Nash 均衡点:', nash_equilibrium) print('最优策略:', np.argmax(nash_equilibrium)) ``` 运结果可能如下: ``` Nash 均衡点: [0.25 0.75] 最优策略: 1 ``` 上述代码中,我们使用了 numpy 库来处理矩阵运算。在 replicator_dynamics 函数中,我们首先随机生成了一个初始的人口比例向量 population,然后在循环中不断更新该向量。具体来说,我们计算了每个策略的适应度 fitness(即期望收益),然后计算了所有策略的平均适应度 avg_fitness,最后根据 Replicator Dynamics 公式计算出新的人口比例向量 new_population。最后我们将 new_population 归一化,以保证总人口比例为 1。循环结束后,我们返回最终的人口比例向量,即 Nash 均衡点。 在上述代码中,我们计算了 Nash 均衡点和最优策略。对于囚徒困境来说,最优策略是承认罪,因为这样能够获得更高的收益。Nash 均衡点是 [0.25, 0.75],表示在这个比例下,承认罪和否认罪两种策略的期望收益相等。这个结果比较符合直觉,因为在囚徒困境中,承认罪虽然能够获得更高的收益,但是如果双方都承认罪,那么双方的收益都会很低,因此有一定比例的人选择否认罪是比较合理的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值