楼主: huxinmaoer
1178 2

[学以致用] 【原创】纳什均衡寻找器 [推广有奖]

  • 0关注
  • 0粉丝

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
4.4326
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
109 点
帖子
8
精华
0
在线时间
79 小时
注册时间
2022-6-10
最后登录
2023-1-4

楼主
huxinmaoer 发表于 2022-8-8 00:23:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
功能:寻找博弈的纳什均衡点,适用于所有类型矩阵博弈,包括不可解的三人以上博弈

下载地址:https://github.com/lansiz/nash-finder

使用要求:Python及其numpy、matplotlib包

用法举例一、 寻找双人博弈的均衡点

下面是经典的双人博弈的收益矩阵,每个玩家使用三个策略。 bimatrix.png


对照收益矩阵可以很直观转化为Python代码:
import grm  # 主程序,就一个文件,10多K,很小巧
game = grm.Game()
# two playeys, and each player uses THREE pure strategies
game.player_join(grm.Player(3))
game.player_join(grm.Player(3))
game.player_init_mixed_strategies()
# assign the payoff (define the payoff function)
# player 1
game.player_assign_payoff(1, "11", -231)
game.player_assign_payoff(1, "12", -505)
game.player_assign_payoff(1, "13", 525)
game.player_assign_payoff(1, "21", -552)
game.player_assign_payoff(1, "22", 831)
game.player_assign_payoff(1, "23", -928)
game.player_assign_payoff(1, "31", -74)
game.player_assign_payoff(1, "32", -96)
game.player_assign_payoff(1, "33", -604)
# player 2
game.player_assign_payoff(2, "11", 175)
game.player_assign_payoff(2, "12", -350)
game.player_assign_payoff(2, "13", -770)
game.player_assign_payoff(2, "21", -641)
game.player_assign_payoff(2, "22", -222)
game.player_assign_payoff(2, "23", -189)
game.player_assign_payoff(2, "31", 302)
game.player_assign_payoff(2, "32", 504)
game.player_assign_payoff(2, "33", 767)
# run the iterations to approximate Nash equilibrium
game.run(iterations=10**5)

运行上面代码可以看到输出。输出包括均衡点逼近值;Deviation表示精度,越小越好。

example_2p_output.png

还可以对逼近过程进行可视化
trajectory_3.png

用法举例二、 寻找三人博弈的均衡点

3p_matrix.png

转化为Python代码:
# assign the payoff (define the payoff function)
# player 1
# left matrix
game.player_assign_payoff(1, "111", 4)
game.player_assign_payoff(1, "121", 3)
game.player_assign_payoff(1, "211", 5)
game.player_assign_payoff(1, "221", 5)
# right matrix
game.player_assign_payoff(1, "112", 4)
game.player_assign_payoff(1, "122", 5)
game.player_assign_payoff(1, "212", 8)
game.player_assign_payoff(1, "222", 4)
# player 2
# left matrix
game.player_assign_payoff(2, "111", 5)
game.player_assign_payoff(2, "121", 2)
game.player_assign_payoff(2, "211", 3)
game.player_assign_payoff(2, "221", 4)
# right matrix
game.player_assign_payoff(2, "112", 6)
game.player_assign_payoff(2, "122", 3)
game.player_assign_payoff(2, "212", 2)
game.player_assign_payoff(2, "222", 3)
# player 3
# left matrix
game.player_assign_payoff(3, "111", 3)
game.player_assign_payoff(3, "121", 5)
game.player_assign_payoff(3, "211", 2)
game.player_assign_payoff(3, "221", 4)
# right matrix
game.player_assign_payoff(3, "112", 2)
game.player_assign_payoff(3, "122", 4)
game.player_assign_payoff(3, "212", 6)
game.player_assign_payoff(3, "222", 5)
运行结果及可视化:
example_3p_output.png

trajectory_2.png

用法举例三、 寻找任意博弈的均衡点
上述两个举例针对常见的博弈,目的是提供直观的了解。但本工具主要特点是,(理论上)适用于任意博弈,也就是任意数量玩家、任意策略个数的博弈。下面的例子中,有四个玩家,分别使用二、三、四、五个策略。
import grm
game = grm.Game()
# four palyers, and each uses two, three, four and five pure strategies
game.player_join(grm.Player(2))
game.player_join(grm.Player(3))
game.player_join(grm.Player(4))
game.player_join(grm.Player(5))
game.player_init_mixed_strategies()
# assign the payoff (define the payoff function)
game.player_assign_random_payoff()  # 120个设置,一个个写太冗长了,因此本例子统一随机设置
game.run()
输出结果:

example_np_output.png

关于此工具的更多具体介绍和不足,有兴趣的可以去“下载地址”网页看看。










二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:纳什均衡 equilibrium Approximate Strategies iterations

example_2p_explore.png (15.66 KB)

example_2p_explore.png

沙发
saplow 发表于 2022-9-25 09:15:39
好贴就点赞,一起拿积分

藤椅
三江鸿 发表于 2022-10-8 13:32:58 来自手机
点赞支持 感谢分享

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-8 15:45