【每周一坑】囚徒困境

简介: 自定义一种策略,测试在此策略下的效果。如果你对自己的策略有自信,还可以试着和其他人提交的策略进行比拼。

本周的题目非常有意思,取于大名鼎鼎的 囚徒困境 。首先来看背景资料:


“囚徒困境”是1950年美国兰德公司的梅里尔·弗勒德(Merrill Flood)和梅尔文·德雷希尔(Melvin Dresher)拟定出相关困境的理论,后来由顾问艾伯特·塔克(Albert Tucker)以囚徒方式阐述,并命名为“囚徒困境”。两个共谋犯罪的人被关入监狱,不能互相沟通情况。如果两个人都不揭发对方,则由于证据不确定,每个人都坐牢一年;若一人揭发,而另一人沉默,则揭发者因为立功而立即获释,沉默者因不合作而入狱五年;若互相揭发,则因证据确实,二者都判刑两年。


知乎话题-囚徒困境:


https://www.zhihu.com/topic/19597612/top-answers


今天我们要挖的坑是多重囚徒困境,求进行 N 次博弈下,使用不同的策略,囚犯各自的获刑年限。


目前有三种策略:


  1. nice:不管对方揭发还是沉默,都保持沉默
  2. rat:不管对方沉默还是揭发,都选择揭发
  3. tit_for_tat:第一轮选择沉默,第二轮开始如果对方上一轮沉默,本轮就选择沉默,对方上一轮揭发,本轮也选择揭发。


举例,甲方选择 tit_for_tat 策略,乙方选择 rat 策略,共进行四轮


现在,由你来构造一个函数,输出囚犯获刑结果。


def prisoner_delimma(N, strategy1, strategy2):
    # 你的代码


输出示例


>>> prisoner_delimma(4, nice, nice)
(4, 4)
>>> prisoner_delimma(5, rat, rat)
(10, 10)
>>> prisoner_delimma(6, nice, rat)
(30, 0)
>>> prisoner_delimma(4, rat, tit_for_tat)
(6, 11)
>>> prisoner_delimma(7, tit_for_tat, tit_for_tat)
(7, 7)


附加题:


自定义一种策略,测试在此策略下的效果。如果你对自己的策略有自信,还可以试着和其他人提交的策略进行比拼。


欢迎各位同学踊跃提交,另外如果有一些有趣的题目希望拿出来讨论,欢迎分享到评论区,说不定就出现在下期【每周一坑】栏目中。


提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。


往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。



上期 选择困难的农药召唤师 解答:


Python 为我们提供了一个方便的 itertools 模块,使用其中的 combinations_with_replacement 函数可以轻松的解决该问题,代码如下:


import itertools
# 装满 6 格,金额小于 10000
equipment = [690,1500,2100,1740,2140,2080]
def func():
    iter = itertools.combinations_with_replacement(equipment,6)
    count = 0
    for i in iter:        
        if sum(i) < 10000:
            print(i)
            count += 1
    return count
print(func())


上期读者参考解答:

@姚航:

https://git.oschina.net/yaohang_china/codes/6rgm1deb705c3fhqukpn498

姚同学的答案写的比较直观,理解起来也不难。但附加第二题的意思是影忍之足最多买一双,即可为 0 或 1,代码第67行


if string.count('690') < 1:


应改为


if string.count('690') <= 1:


我们也写了一份包括了附加题的代码:


http://git.oschina.net/zx576/Crossin-practices/blob/master/python_weekly_question/purchase_equipment.py


供参考。


近期文章推荐阅读:

喏,你们要的 PyCharm 快速上手指南

给伸手党的福利:Python 新手引导

只学2个月编程能写出什么代码?他们表示:You can you code!

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

相关文章
|
安全 网络安全 API
163邮箱IMAP服务器设置方法
```markdown 使用IMAP协议同步163邮箱:登录邮箱→设置→账户→IMAP/SMTP→开启服务→配置服务器(imap.163.com:993, SSL/TLS)→设置用户名和密码→保存并在邮件客户端添加账号。确保多设备邮件同步,定期更新设置。[≤240字符] ```
|
人工智能
写歌词的技巧和方法全解析:开启你的音乐创作之旅,妙笔生词智能写歌词软件
怀揣音乐梦想,渴望用歌词抒发情感?掌握关键技巧,你也能踏上创作之旅。灵感来自生活点滴,主题明确,语言简洁,韵律和谐。借助“妙笔生词智能写歌词软件”,AI辅助创作,轻松写出动人歌词,实现音乐梦想。
|
11月前
|
机器学习/深度学习 Rust 算法
Python环境管理的新选择:UV和Pixi,高性能Python环境管理方案
近期Python生态系统在包管理领域发生了重要变化,Anaconda调整商业许可证政策,促使社区寻找更开放的解决方案。本文介绍两款新一代Python包管理工具:UV和Pixi。UV用Rust编写,提供高性能依赖解析和项目级环境管理;Pixi基于Conda生态系统,支持conda-forge和PyPI包管理。两者分别适用于高性能需求和深度学习项目,为开发者提供了更多选择。
2306 2
|
JavaScript
win10执行npm出现Error: EBUSY: resource busy or locked 错误解决方法
win10执行npm出现Error: EBUSY: resource busy or locked 错误解决方法
1523 0
win10执行npm出现Error: EBUSY: resource busy or locked 错误解决方法
|
SQL Kubernetes 数据可视化
Apache DolphinScheduler 毕业成为 Apache 首个由国人主导的大数据工作流调度领域顶级项目
Apache DolphinScheduler 毕业成为 Apache 首个由国人主导的大数据工作流调度领域顶级项目
Apache DolphinScheduler 毕业成为 Apache 首个由国人主导的大数据工作流调度领域顶级项目