2020年第九届数学建模国际赛小美赛D题石头剪刀游戏与合作解题全过程文档及程序

2020年第九届数学建模国际赛小美赛

D题 石头剪刀游戏与合作

原题再现:

  小时候你可能至少玩过几次石头剪刀游戏。在这个游戏中,你几乎有三个选择,每一个都有一个项目要打败,一个项目输给。石头打败剪刀,剪刀剪纸和布覆盖岩石。你所要做的就是选择,看看结果如何。一切似乎都很简单。

在这里插入图片描述

  从宏观的角度看人类,有许多例子表明人们合作形成社会、国家、宗教和其他团体。
  然而,在基本的两人水平上,人们往往会背叛对方,就像在囚徒困境这样的社会困境博弈中发现的那样,即使人们之间合作会得到更好的回报。
  合作的主题以及人们如何以及何时开始相互信任已经被许多研究者研究过,他们已经用数字的方法解决了这个问题。在《混沌》杂志的一篇论文中,研究人员分析了合作的驱动因素。
  根据经典生态学,当两个物种竞争同一资源时,最终成功的物种会胜出,而另一个物种则会灭绝。但这一规则不能解释像亚马逊这样的生态系统,那里有成千上万的树种占据着相似的生态位。芝加哥大学和加州大学圣巴巴拉分校的研究人员在《美国国家科学院院刊》上发表报告称,儿童时期玩石头剪刀的游戏可以解决这个难题。围绕游戏动态设计的数学模型产生了无限生物多样性的潜力,并提出了一些令人惊讶的新生态规则。
  石头剪刀规则是一个“不及物性”竞争的例子,参与者不能简单地从最好的到最坏的排序。当两人一组时,胜利者和失败者就会出现:石头打剪刀,布打石头,剪刀打布。但当这三种策略相互竞争时,就陷入了僵局,没有一个要素是无可争议的赢家。
  在自然界中,细菌和蜥蜴的三个物种群都观察到了这种石-布-剪关系。但是,科学家们还没有研究与三个以上的参与者建立更复杂的不及物性关系——想想石头、布、剪刀、炸药等等——如何模拟更复杂的社会困境游戏。
  1975年,R.M.May和W.J.Leonard首次使用石头布剪刀游戏来模拟三个物种周期性地相互支配的生态场景:一个物种支配第二个物种,第二个物种支配第三个物种,第三个物种支配第一个物种。例如,这个游戏可以很好地模拟具有周期优势的大肠杆菌的不同菌株。

  您的团队已被国际合作组织管理层(ICM)聘为顾问。您应完成以下任务:
  •建立一个数学模型来模拟与三个以上参与者的关系,当作为May Leonard模型的扩展案例实施时,该模型的工作原理与原始的石头剪纸模型有所不同。
  •通过对模型参数的敏感性分析,设计一个自适应生物系统,其中一个物种可以改变相互作用概率以保证其生存,并探索生物相互作用如何平衡物种之间的不平衡关系以及疾病和其他捕食者的影响。

  •为许多其他社会困境游戏开发一些分析解决方案,如石头剪刀、性别之战、猎鹿或探索新冠病毒感染动态。该仿真模型可以帮助理解在许多其他社会困境中合作行为的真正驱动因素。
  •向ICM写一份两页的备忘录,描述一个现实的全球目标——可实现的最低防疫合作水平、目前必须解决的一系列问题以及可能加速或阻碍实现目标的任何情况。

  提交内容应包括:
  •一页汇总表
  •目录
  •两页备忘录
  您的解决方案不超过30页,最多34页,包含您的摘要、目录和两页备忘录。

整体求解过程概述(摘要)

  一些科学家使用石头剪刀游戏来模拟三个物种周期性地相互支配的生态场景:一个物种支配第二个物种,第二个物种支配第三个物种,第三个物种支配第一个物种。但在自然界中应该有很多物种(超过三个),科学家们还没有研究过如何更复杂的不及物关系与三个以上的参与者。我们试图建立一个模型来模拟三个以上参与者的关系,并利用该模型设计一个自适应的生物系统,然后分析多个角色的两难博弈,提出可用于抗议合作的解决方案。
  对于问题一:在模拟三个或多个参与者之间的关系时,我们发现它不仅与参与者的数量有很大的关系,而且数量是偶数还是奇数也会有很大的影响,所以我们将分别进行研究,主要以N=4和N=5为例进行详细分析,我们扩展了Lotka-Volterra模型,确定空间均匀初始条件(ode模型)、扩散驱动的不同参与者的斑块传播、相互作用和循环动力学(pde模型)的动力学。为了更好地适应背景,我们将玩家视为一个物种,因此我们的模型可以很好地适应任何自适应生物系统。
  对于问题二:循环竞争博弈模型,特别是石头剪刀模型,在探索空间生态系统中多物种共存问题中起着重要作用。我们提出了一个扩展的石头剪刀博弈模型来模拟五个物种之间的循环相互作用,发现当生物多样性消失时,这五个物种中的两个可以共存,这与石头剪刀博弈不同。我们从两个方面研究了“手指”模型:直接模拟REs、偏微分方程和非线性偏微分方程。一个重要的发现是,循环竞争博弈中的物种数量对生物多样性的出现有影响。
  对于问题三:在RPS对策中考虑了传染病传播的平均场动力学,然后将RPS对策模型与SIS传染病模型相结合,得到了平衡状态下三斑块系统的数值解。其次,我们还采用了种群模型。所有个体通过随机行走在斑块之间自由移动,以模拟流行病在未隔离状态下的传播。因此,我们在未感染者、感染者、恢复者之间找到了一个数值平衡,并得到了这个困境的最终解决方案。
  问题四:在建立和分析前三个问题模型,特别是第三个问题的基础上,对COVID-19进行了较为详细的分析和解决,结合各国从疫情爆发到现在的现状,认真研究了各国对疫情的态度,最后结合我院向ICM写了一份关于各国防疫现状和全球防疫趋势的备忘录,主要从三个方面进行了详细的分析和介绍:全球防疫可实现的最低目标、目前必须解决的一些问题以及任何可能加速或阻碍实现目标的因素。

模型假设:

  影响安全检查的因素很多。我们的模型是在一个相对理想的环境中建立和实现的。因此,我们做出如下假设:

  (1) 假设生物环境相对封闭。
  (2) 即使经过很长一段时间,玩家之间的互动也不会改变,也就是游戏规则不会改变。
  (3) 在讨论玩家关系时,我们只考虑一次失败,假设没有其他情况,例如双向失败。
  (4) 对于该流行病,假定人们可以恢复并获得终身免疫。
  (5) 假定在疫情期间,无论自然出生和死亡人数如何,总人口保持不变。
  (6) 我们假定所参考的数据是真实可靠的。

问题分析:

  对于问题1
  为了模拟玩家之间的关系,我们开发、分析和模拟了一个May-Leonard模型,以供参考。但是我们的目标是试图在多个玩家(多于三个玩家)之间找到一个平衡点,所以我们扩展了经过深入研究的三人石头剪刀(RPS)系统。然后我们发现,玩家的平衡不仅与玩家的数量有关,还与是否是偶数或奇数有关,这也有着重要的影响。所以我们把游戏者的数量分成偶数和奇数进行分析,用N=4和N=5表示。我们详细分析了4个参与者和5个参与者之间的关系,确定了空间均匀初始条件(即ode模型)的动力学,以及扩散和循环动力学(pde模型)驱动的不同参与者斑块的传播和相互作用。为了更好地适应背景,我们将玩家视为一个物种。

  对于问题二
  循环竞争博弈模型,特别是石头剪子模型,在探索空间生态系统中多物种共存问题中发挥着重要作用。我们提出了一个扩展的石头剪刀博弈模型来模拟五个物种之间的循环相互作用,发现当生物多样性消失时,这五个物种中的两个可以共存,这与石头剪刀博弈不同。当手指个数为5时,我们将新模型命名为五种群博弈,其中拇指、食指、中指、无名指和小指周期性地支配其后续种群,且由其先前种群支配。我们从两个方面研究了“手指”模型:直接模拟和非线性偏微分方程。一个重要的发现是,循环竞争博弈中的物种数量对生物多样性的出现有影响。在种群规模、繁殖率、选择率、迁移率等变量相同的情况下,岩-布-剪模型有利于维持生物多样性。研究还表明,流动性和繁殖率可以促进或危害生物多样性。

  对于问题3
  本文详细分析了N=4和N=5种群循环生态系统的确定性模型。我们发现:对于N=4的条件下共存(生物多样性)总是不稳定的。对于N=2n(N≠2)与N=4相同。在N=5的条件下,所有的生物选择态都是不稳定的。当N=2n+1(N≠3)与N=5时,生物多样性是最稳定的。下面我们还以COVID-19感染动力学为例,探讨基于这一结论的社会困境解决方案。

  对于问题4
  对于ICM的备忘录,我们主要描述了三个层次。一个切实可行的全球目标——可达到的最低防疫合作水平;当前全球防疫工作必须解决的问题;任何可能加速或阻碍实现这一目标的情况下,我们分析了各国的疫情现状,并分析了各自对防疫工作的态度进行了总结,最后回到全球防疫斗争本身得出结论。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

import numpy as np
import matplotlib.pyplot as plt
predlabel = 'Predator Count (Thousands)'
preylabel = 'Prey Count (Thousands)'
timelabel = 'Time'
predcolor = 'red'
preycolor = 'blue'
class Lotka_Volterra(object):'''Sets up a simple Lotka_Volterra system''' def __init__(self, 
pdgrow,pddie,pygrow,pydie,tmax,timestep,prey_capacity=100.0,predator_capacity = 
100.0): self.n = int(tmax/timestep)self.dt = timestepself.time = np.zeros(self.n)self.prey = np.zeros(self.n)self.predator = np.zeros(self.n)self.preygrow = pygrowself.preydie = pydieself.predgrow = pdgrowself.preddie = pddieself.prey_capacity = prey_capacityself.predator_capacity = predator_capacity def set_initial_conditions(self,pdzero,pyzero, tzero=0.0):'''set initial conditions'''self.prey[0] = pyzeroself.predator[0] = pdzeroself.time[0] = tzero 
def plot_vs_time(self, filename='populations_vs_time.png', plot_capacity=False): fig1 = plt.figure()ax1 = fig1.add_subplot(111)ax2 = ax1.twinx()ax1.set_xlabel('Time', fontsize=22)ax1.set_ylabel(predlabel,fontsize=22, color=predcolor)ax1.tick_params('y', colors=predcolor)ax2.set_ylabel(preylabel,fontsize=22, color=preycolor)ax2.tick_params('y', colors='blue', color=preycolor)ax1.plot(self.time, self.predator, label='Predator', color=predcolor, 
linestyle='dashed')
ax2.plot(self.time, self.prey, label = 'Prey', color = preycolor)if(plot_capacity):ax2.axhline(self.prey_capacity, label= 'Prey carrying capacity', 
color=preycolor, linestyle='dotted')plt.show()fig1.savefig(filename, dpi=300) def plot_predator_vs_prey(self, filename = 'predator_vs_prey.png'): fig1 = plt.figure()ax1 = fig1.add_subplot(111) ax1.set_xlabel(predlabel,fontsize=22)ax1.set_ylabel(preylabel,fontsize=22)ax1.plot(self.predator,self.prey, color='black')plt.show()fig1.savefig(filename,dpi=300) def plot_both_figures(self): fig1 = plt.figure() ax1 = fig1.add_subplot(211)ax2 = ax1.twinx()ax1.set_xlabel(timelabel)ax1.set_ylabel(predlabel, color=predcolor)ax2.set_ylabel(preylabel, color =preycolor)ax1.plot(self.time, self.predator, label='Predator', color=predcolor)ax2.plot(self.time, self.prey, label = 'Prey', color = preycolor)ax1.legend() ax3 = fig1.add_subplot(212) ax3.set_xlabel(predlabel)ax3.set_ylabel(preylabel)ax3.plot(self.predator,self.prey, color = 'black') 
plt.show()
import numpy as np
import os
from scipy import special
import itertools
import time
import warnings
warnings.filterwarnings('error')
class actor_critic:def __init__(self, dim_theta=3, d=47):self.dim_theta = dim_theta self.theta = np.array([[1],[-1],[3]]) # good initialization # 
initialize weight vector (column) for value function approximationself.w = self.init_w(d)self.d = d 
self.tensor_phi = np.zeros([self.d, self.d, self.dim_theta]) self.mat_alpha = np.zeros([self.d, self.d]) def train_log(self, vector, filename):f = open(filename, 'a')vector.tofile(f, sep=',', format="%f")f.write("\n")f.close() gradient = self.calc_gradient_vectorized(P, pi)self.theta = self.theta - lr_actor * delta * gradientdiscount = discount * gammapi = pi_nexttotal_cost += costlist_cost.append(total_cost)if (episode % consecutive == 0):print("Theta\n", self.theta)print("pi\n", pi)cost_avg = sum(list_cost)/consecutiveprint("Average cost during previous %d episodes: " % 
consecutive, str(cost_avg))list_cost = []if write_file:self.train_log(self.theta, file_theta)self.train_log(pi, file_pi)self.train_log(np.array([cost_avg]), file_cost)
if __name__ == "__main__":ac = actor_critic()t_start = time.time()ac.train(num_episodes=1, gamma=1, lr_critic=0.1, lr_actor=0.1, 
consecutive=1, write_file=0)t_end = time.time()print("Time elapsed", t_end - t_start)
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yasaf永安视安防监控恢复案例

永安视(yasaf)一个小到连官网都没有的安防厂商,是国内众多品牌中的一个,可以说是小十八线,让人敬佩的是这么一个小厂也自行写了嵌入式方案,下边我们来看看这个恢复案例。 故障存储: WD500G 故障现象: 此安防设备在使用过程中被…

python/c++ Leetcode题解——1.两数之和

目录 方法1:枚举法 思路 Code 方法2:哈希表 思路 Code 方法1:枚举法 思路 最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已…

【机器学习】应用KNN实现鸢尾花种类预测

目录 前言 一、K最近邻(KNN)介绍 二、鸢尾花数据集介绍 三、鸢尾花数据集可视化 四、鸢尾花数据分析 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Fil…

07-抽象工厂

意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 适用性 在以下的情况可以选择使用抽象工厂模式: 一个系统要独立于它的产品的创建、组合和表示。一个系统要由多个产品系列中的一个来配置。要强调一系列相关的产品对象的…

Spring MVC 中的常用注解和用法

目录 一、什么是 Spring MVC 二、MVC定义 三、简述 SpringMVC 起到的作用有哪些? 四、注解 五、请求转发或请求重定向 一、什么是 Spring MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web…

移动端Vant中的Calendar日历增加显示农历(节日、节气)功能

核心: 使用 js-calendar-converter 库实现 npm地址:js-calendar-converter 内部使用原生calendar.js, 中国农历(阴阳历)和西元阳历即公历互转JavaScript库,具体实现感兴趣的可自行查看其实现源码。 原日…

唱作歌手朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感

朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感 在音乐的广阔天地里,每种语言都有其独特的韵味和魅力。对于唱作音乐人朱卫明来说,他用普通话演唱的歌曲已经深入人心,但当他将《兄弟情》这首歌曲以粤语演绎时,更…

笔记 - 现代嵌入式芯片封装识读

0.引用: 配图、资料并非一处采集,我不太容易找到图片的原始链接。这里的图片仅作示例,无商业用途。如果涉及侵权,请随时联系。谢谢! PCB封装欣赏了解之旅(下篇)—— 常用集成电路_ufqfpn封装…

【C++】STL 容器 - string 字符串操作 ⑤ ( string 字符串查找 | find 函数查找字符串 | rfind 函数查找字符串 )

文章目录 一、string 字符查找 - find 函数查找字符串1、string 类 find 函数原型说明2、代码示例 - 字符串查找3、代码示例 - 统计字符串子串 二、string 字符查找 - rfind 函数查找字符串1、string 类 rfind 函数原型说明2、代码示例 - rfind 字符串查找 一、string 字符查找…

注册与回调

C 再谈谈注册(本质是建立映射)与回调 在之前的博文中, 我们探讨过映射的重要作用, 请直接看:http://blog.csdn.net/stpeace/article/details/39452203, 在那篇文章中, 我们是用STL中的map来做的, map建立的是key-value…

rk3568 RGMII KSZ8795 MAC TO MAC

RK3568与KSZ8795交换机芯片连接,直接MAC TO MAC方式,这样一下就扩展会4路网口,应该场合比较多,移植过程如下: 参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》 《rockchip RGMIImv88e6390 管理型交换机功…

【Spring】之Ioc和Aop快速了解

这里写目录标题 1.Spring框架是什么?简介:总结:Spring框架,可以理解为是一个管理者:管理整个分层架构(MVC)中的每一个对象;(每一个对象称之为bean) 2.Spring框…

太空旅行:计算机技术的崭新航程

太空旅行:计算机技术的崭新航程 一、引言 自古以来,人类就对浩渺的宇宙充满了无尽的好奇和渴望。随着科技的飞速发展,太空旅行已经从科幻小说中的构想变为现实。在这个过程中,计算机技术起到了不可或缺的作用。从阿波罗时代的初…

​FL Studio2024最新版本好不好用?有哪些新功能

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

HarmonyOS4.0从零开始的开发教程15HTTP数据请求

HarmonyOS(十三)HTTP数据请求 1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富…

MySQL进阶2 - 索引

MySQL进阶1 - 索引 1. 索引概述2. 索引结构2.1 二叉树2.2 B-Tree(多路平衡查找树)2.3 BTree2.4 Hash 3. 索引分类4. 索引语法5. SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile5.4 explain执行计划5.3.1 EXPLAIN执行计划各字段含义: 6. 索引使…

SpringBoot+FastJson 优雅的过滤 Response Body

Spring 源码系列 1、Spring 学习之扩展点总结之后置处理器(一) 2、Spring 学习之扩展点总结之后置处理器(二) 3、Spring 学习之扩展点总结之自定义事件(三) 4、Spring 学习之扩展点总结之内置事件&#xf…

手把手教你Linux查找Java的安装目录并设置环境变量以及Linux下执行javac未找到命令的保姆级教学

查找Java的安装目录 输入 java -version,查看是否成功安装Java 输入 which java,查看Java的执行路径 输入 ls -lrt /usr/bin/java 输入 ls -lrt /etc/alternatives/java,/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64 就是J…

自动化测试(终章)webdriver的常用api(2)以及新的开始

目录 多层框架/窗口定位 多层框架的定位 frame是什么? 多层窗口定位 层级定位 使用 XPath 进行层级定位: 使用 CSS 选择器进行层级定位: 下拉框处理 alert、confirm、prompt 的处理 Alert 弹窗: Confirm 弹窗&#xff…

IDEA安装插件搜索不到插件的解决方法

解决idea安装所需插件,插件搜索不到的问题 1.通过设置代理和去掉使用安装链接的方式来解决的 File–>Settings–>Appearance & Behavior–>System Settings—>HTTP Proxy(修改为图片所示) 2.在系统设置中将更新选项中的“use secure connection”…