鱼C论坛

 找回密码
 立即注册
查看: 1511|回复: 1

Python小白从挖坑到脱坑之路029_关于囚徒困境的一道题目

[复制链接]
发表于 2018-7-21 16:37:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 大头目 于 2018-7-21 16:40 编辑

最近到一本书《自私的基因》里面提到一个故事很有意思,是一个变种的囚徒困境(但问题不是囚徒困境),能做成很有趣的程序,我自己能力有限,分享给各位,请大佬帮忙指导。
故事是这样的:
有一个庄家和两个赌徒,赌徒之间不能有任何沟通,当两个赌徒都选择”合作“,则各自从庄家那里拿到3元;当两个赌徒都选择”背叛“,则各自付给庄家1元;当一个赌徒选择”合作“,一个赌徒选择”背叛“,则选择合作的赌徒得0元,选择背叛的赌徒得5元。
有一个科学家召集了一个比赛,希望收集N个程序员的赌博策略,每两个程序都比1次(单场循环PK),最后得到最多钱的程序获胜。

我的问题是:
如下是我编程的2个策略PK的程序,如何最少的优化程序使得程序可以无限扩展策略,并且能够实现单场循环PK赛,使得最后得出获得钱最多的那个程序(每场PK所得的钱累计,算最后总的钱)?

附加题:
每轮循环结果出来后得钱总数最少得策略被剔除,并且复制当赛季第一的策略继续下一轮(可以理解为最差的抄袭最好的,参赛策略总数并不减少),请得出最后能活下来的三个策略。
#囚徒困境游戏
def Plan1():
        yield 1
        for i in range(1000):
                yield R2

def Plan2():
        for j in range(1000):
                yield 0 

def PK_test(P1,P2):
        global S1
        global S2
        global R1
        global R2
        R1 = P1
        R2 = P2

        if P1 == P2 == 1:
                S1 = S1 + 3
                S2 = S2 + 3
        elif P1 == P2 == 0:
                S1 = S1 - 1
                S2 = S2 - 1
        elif P1 == 1 and P2 == 0:
                S1 = S1 + 0
                S2 = S2 + 5
        elif P1 == 0 and P2 == 1:
                S1 = S1 + 5
                S2 = S2 + 0
        else:
                print('P value Error')
        return S1,S2

if __name__ == '__main__':
        Player1 = Plan1()
        Player2 = Plan2()

        S1 = 0
        S2 = 0
        for x in range(200):
                print(PK_test(next(Player1),next(Player2)))

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-8 13:47:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-6 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表