【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化

目录-基于MatLab2016b实现

  • 一、演化博弈的原理
    • 1. 基本概念
    • 2. 参与者的策略
    • 3.演化过程
  • 二、MATLAB 代码解读(博弈参与主体(双方)策略选择的动态演化讨程)
  • 三、MATLAB 代码解读(博弈主体随着时间策略选择的动态演化讨程)
  • 四、两方相位图MATLAB 代码复现
  • 五、单一参数灵敏度演化图
  • 五、结论

演化博弈论是研究个体在特定环境中如何通过策略选择与其他个体进行互动的学科。这一理论在生物学、经济学和社会科学等多个领域都有广泛应用。本文将深入探讨双方演化博弈的原理及其过程,并解读一段 MATLAB 代码,展示如何模拟这一过程。

一、演化博弈的原理

1. 基本概念

在演化博弈中,参与者(个体)根据其策略与其他参与者进行互动。每种策略在特定环境下的收益决定了这种策略的成功与否。参与者的策略会随着环境的变化而演变,形成“适者生存”的动态过程。

2. 参与者的策略

在一场博弈中,参与者可以选择不同的策略,这些策略的选择影响其在博弈中的收益。例如,在两个玩家的博弈中,常见的策略包括合作与背叛。通过不断的互动与反馈,成功的策略会在种群中逐渐传播。

3.演化过程

演化过程通常可分为以下几个步骤:

初始化:设定参与者的初始状态(策略)。
动态演化:根据参与者策略的收益变化,更新策略选择。
模拟和可视化:使用数学模型和计算机程序模拟演化过程,并通过图形化方式展示结果。

二、MATLAB 代码解读(博弈参与主体(双方)策略选择的动态演化讨程)

以下是用于模拟双方演化博弈的 MATLAB 代码示例:
下面这样的图就是x,y分别为不同参与主体的博弈行为策略概率

在这里插入图片描述
下面为复制动态方程函数,需要改成自己的复制动态方程。
注意下面这个代码要单独为一个文件,然后文件的名字,必须和函数的名字一样,比如下面的函数叫dxdt,那么文件名也必须要这个名字

x(1)表示主体1的概率,x(2)表示为主体2的概率,只能这样顺序的表示

所有的演化代码,都需要以这个文件为基础。

function dxdt = taihu(t, x, s, m, c1, c2, r)dxdt = zeros(2, 1);  % 初始化一个二元一次的输出dxdt(1) = x(1) * (1 - x(1)) * (r - m - r * x(2));  % x(1) 的变化率dxdt(2) = x(2) * (1 - x(2)) * (s - c1 + c2 - c2 * x(1));  % x(2) 的变化率
end

在设置出来动态方程文件后,再创建一个演化文件,为main文件,这个文件命名没有要求

但是[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.2, 0.8]);中taihu表示的是之前设置的复制动态方程的文件,需要和文件名称一致。

clc; clear;s = 10; m = 5; c1 = 20; c2 = 5; r = 10;  % 根据实际情况赋值figure(1)  % 创建图形窗口% 不同初始条件的演化
[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.2, 0.8]);
plot(x(:, 1), x(:, 2), 'rh-');  % 绘制初始值[0.2, 0.8]的演化路径
hold on[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.4, 0.6]);
plot(x(:, 1), x(:, 2), 'mx-');  % 绘制初始值[0.4, 0.6]的演化路径
hold on[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.6, 0.4]);
plot(x(:, 1), x(:, 2), 'bo-');  % 绘制初始值[0.6, 0.4]的演化路径
hold on[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.8, 0.2]);
plot(x(:, 1), x(:, 2), 'gs-');  % 绘制初始值[0.8, 0.2]的演化路径
hold onset(gca, 'XTick', [0:0.1:1], 'YTick', [0:0.1:1]);  % 设置坐标轴刻度
axis([0 1 0 1]);  % 设置坐标轴范围
xlabel('$x$', 'interpreter', 'latex');  % x 轴标签
ylabel('$y$', 'interpreter', 'latex', 'rotation', 360);  % y 轴标签
title('动态演化过程');  % 图形标题
legend('初始值[0.2,0.8]', '初始值[0.4,0.6]', '初始值[0.6,0.4]', '初始值[0.8,0.2]');  % 图例

在这里插入图片描述

代码过程分析
函数定义:
taihu 函数定义了两种策略(x(1) 和 x(2))的动态变化率。此函数输入时间 t 和状态 x,以及相关参数 s、m、c1、c2 和 r,并返回 dxdt。

参数设置:
根据实际情况设置参数 s、m、c1、c2 和 r。
使用 ode45 求解:
ode45 是 MATLAB 用于求解常微分方程的函数。在此代码中,使用不同的初始条件 [0.2, 0.8]、[0.4, 0.6]、[0.6, 0.4] 和 [0.8, 0.2] 来模拟演化过程。

绘制演化路径:
使用 plot 函数将每个初始条件下的演化路径绘制在同一图中,便于比较不同策略的动态变化。

图形设置:
设置坐标轴的刻度、范围、标签和标题,并添加图例,以便于理解和分析。

三、MATLAB 代码解读(博弈主体随着时间策略选择的动态演化讨程)

横轴为时间,演化的时间
纵轴为策略的选择概率
在这里插入图片描述

以下是代码进行复现的完整 MATLAB 代码:

clc; clear;  % 清除命令窗口和工作区变量
s = 10; m = 5; c1 = 20; c2 = 5; r = 10;  % 根据实际情况赋值
figure(1)  % 创建图形窗口%%%%%%%%%% line1
[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.2, 0.8]);  % 求解微分方程
plot(t, x(:, 1), '*');  % 绘制与 x1 相关的图形
hold on;  % 保持当前图形%%%%%%%%%% line2
[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.4, 0.6]);  % 求解微分方程
plot(t, x(:, 2), '*');  % 绘制与 x2 相关的图形
hold on;  % 保持当前图形set(gca, 'XTick', 1:1:10, 'YTick', [0:0.1:1]);  % 设置坐标轴刻度
axis([0 10 0 1]);  % 设置坐标轴范围
xlabel('时间', 'interpreter', 'latex');  % x 轴标签
ylabel('策略值', 'interpreter', 'latex', 'rotation', 360);  % y 轴标签
title('动态演化过程');  % 图形标题
legend('策略 x_1', '策略 x_2');  % 图例

其中两个演化图形的关键区别在于:
在这里插入图片描述

代码解析

s = 10; m = 5; c1 = 20; c2 = 5; r = 10; % 根据实际情况赋值
这些变量代表模型中的参数,具体含义取决于所研究的博弈模型。

创建图形窗口:
figure(1) % 创建图形窗口

求解微分方程:
[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.2, 0.8]); % 求解微分方程
使用 ode45 函数求解常微分方程,taihu 函数定义了模型的动态。
初始条件为 [0.2, 0.8]。

绘制与 x1 相关的图形:
plot(t, x(:, 1), ‘*’); % 绘制与 x1 相关的图形
hold on; % 保持当前图形

再次求解微分方程:

[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.4, 0.6]); % 求解微分方程
plot(t, x(:, 2), ‘*’); % 绘制与 x2 相关的图形
hold on; % 保持当前图形

设置坐标轴:
set(gca, ‘XTick’, 1:1:10, ‘YTick’, [0:0.1:1]); % 设置坐标轴刻度
axis([0 10 0 1]); % 设置坐标轴范围
gca 是获取当前坐标轴的句柄,XTick 和 YTick 设置坐标轴的刻度。

添加标签和标题:
xlabel(‘时间’, ‘interpreter’, ‘latex’); % x 轴标签
ylabel(‘策略值’, ‘interpreter’, ‘latex’, ‘rotation’, 360); % y 轴标签
title(‘动态演化过程’); % 图形标题
legend(‘策略 x_1’, ‘策略 x_2’); % 图例

结果如下所示:
在这里插入图片描述

四、两方相位图MATLAB 代码复现

clc; clear; % 清除命令窗口和工作空间
s = 10; m = 5; c1 = 20; c2 = 5; r = 10; % 初始化参数% 外层循环
for i = 0:0.1:1% 内层循环for j = 0:0.1:1[T, Y] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0 100], [i j]); % 求解微分方程figure(1); % 创建或激活图形窗口grid on; % 打开网格plot(Y(:, 1), Y(:, 2)); % 绘制 Y 的第一列和第二列hold on; % 保持当前图形end
end% 设置坐标轴刻度
set(gca, 'XTick', [0:0.1:1], 'YTick', [0:0.1:1]);
xlabel('X'); % x 轴标签
ylabel('Y'); % y 轴标签

代码说明
初始化:
clc; clear; 清除命令窗口和工作空间。
定义一些参数 s, m, c1, c2, r。

双重循环:
外层循环遍历 i 从 0 到 1,以 0.1 为步长。
内层循环遍历 j 从 0 到 1,以 0.1 为步长。

ODE 求解:
使用 ode45 函数求解微分方程,调用自定义的 taihu 函数,时间范围为 [0 100],初始条件为 [i j]。

绘图:
在每次迭代中,创建或激活图形窗口,并绘制 Y 的第一列与第二列的关系。
hold on; 确保所有绘图在同一图形上显示。

设置坐标轴:
使用 set(gca, ‘XTick’, …) 和 ylabel, xlabel 函数设置坐标轴刻度和标签。

注意事项
确保 taihu 函数已定义,并且其输入参数与代码中的一致。
运行此代码需要 MATLAB 环境

在这里插入图片描述

发现有空白原点还不是从0开始,修改以下代码:

clc; clear; % 清除命令窗口和工作空间
s = 10; m = 5; c1 = 20; c2 = 5; r = 10; % 初始化参数% 外层循环
for i = 0:0.1:1% 内层循环for j = 0:0.1:1[T, Y] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0 100], [i j]); % 求解微分方程figure(1); % 创建或激活图形窗口grid on; % 打开网格plot(Y(:, 1), Y(:, 2)); % 绘制 Y 的第一列和第二列hold on; % 保持当前图形end
end% 设置坐标轴刻度
set(gca, 'XTick', 0:0.1:1, 'YTick', 0:0.1:1);
xlabel('X'); % x 轴标签
ylabel('Y'); % y 轴标签% 设置坐标轴范围,确保原点重合
axis([0 1 0 1]); % 设置坐标轴范围
set(gca, 'Box', 'on'); % 开启坐标轴框

在这里插入图片描述
嗯嗯,这样就可以了

五、单一参数灵敏度演化图

先设置出来,不改变的参数(s;m;c1;c2),
然后单独设置改变的参数(r);
用for循环进入函数;

%% 改变单一参数演化过程图% 主脚本
clc; clear; % 清除命令窗口和工作空间
s = 10; m = 5; c1 = 20; c2 = 5; % 初始化参数figure(1); % 创建图形窗口%%%%%% line1
for r = 10 % 循环参数 r[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.2, 0.8]); % 初始条件应为两个元素plot(t, x(:, 1), '*'); % 绘制 t 与 x1 的图像hold on; % 保持当前图形
end%%%%%% line2
for r = 20 % 循环参数 r[t, x] = ode45(@(t, x) taihu(t, x, s, m, c1, c2, r), [0, 10], [0.2, 0.8]); % 初始条件应为两个元素plot(t, x(:, 2), 'o'); % 绘制 t 与 x2 的图像hold on; % 保持当前图形
end% 设置坐标轴刻度
% 设置坐标轴刻度
set(gca, 'XTick', 0:1:10, 'YTick', 0:0.1:1); % 设置 X 和 Y 轴的刻度
axis([0 10 0 1]); % 设置坐标轴范围% 设置 X 轴标签
xlabel('时间', 'Interpreter', 'latex', 'FontWeight', 'bold', 'Fontname', '宋体');
% 设置 Y 轴标签
ylabel('状态变量', 'Interpreter', 'latex', 'Rotation', 360, 'FontWeight', 'bold', 'Fontname', '宋体');
% 设置图形标题
title('动态演化过程', 'Fontweight', 'bold', 'Fontname', '宋体');
% 设置图例
legend('r=10', 'r=20');

在这里插入图片描述

这里好像有点问题,和上面的图差不多,代码逻辑应该的没错的,后期还需要再看看,

五、结论

演化博弈论为我们提供了一种分析个体策略选择与环境互动的方法。通过 MATLAB 的编程实现,我们可以模拟并可视化这一复杂的动态过程。希望本文能够帮助您理解双方演化博弈的基本原理与实现方法,欢迎您在实践中进一步探索和应用这一理论!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

启动windows更新/停止windows更新,电脑自动更新怎么彻底关闭?如何操作?

关于启动Windows更新、停止Windows更新以及彻底关闭电脑自动更新的问题,以下是根据专业角度提供的详细指导: 启动Windows更新 1.通过Windows设置启动更新: -点击开始菜单,选择“设置”(或使用快捷键WinI&a…

YOLOv8 的安装与训练

YOLOv8 是 YOLO 系列实时目标检测器中的较新迭代版本,在准确性和速度方面提供了前沿性能。基于之前 YOLO 版本的进步,YOLOv8 引入了新的特性和优化,使其成为各种应用中各种目标检测任务的理想选择。 一、安装显卡驱动与CUDA: 这个…

aspcms 获取webshell漏洞复现

1.通过访问/admin_aspcms/login.asp来到后台 使用admin 123456 登录 2.点击扩展功能-幻灯片设置-保存&#xff0c;同时进行抓包 3.修改数据包中的slideTextStatus字段&#xff0c;将其更改为 1%25><%25Eval(Request (chr(65)))%25><%25 密码为a 4.访问木马的地…

可靠性:MSTP 和 VRRP 配置实验

一、拓扑&#xff1a; 说明&#xff1a; 1、交换机 SW1、2、3 分别起 vlan 10、20&#xff0c;都以 trunk 方式连接 2、 PC1、2 分别属于 vlan 10、20 3、SW1、2 起 vlan 100 做为管理段&#xff0c;网关地址分别以 100.1.1.1/24 和 200.1.1.2/24 和 AR1相连 …

【日记】对这两天的总结,比赛止步 32 强(3338 字)

正文 这两天的事情非常多&#xff0c;一直也没来得及写。 这篇日记相当于对这几天的一个大总结吧。 2024 年 9 月 13 日 - 14 日 这两天都在培训&#xff0c;所幸最终考核卷子&#xff0c;题目出得不是很难。只给半个小时考试。我的天啊&#xff0c;我题目都没写完。 我印象中出…

即时通讯平台是什么?

即时通讯平台是一种软件或服务&#xff0c;用于提供实时的多媒体沟通和交流功能。它允许用户在任何时间、任何地点&#xff0c;通过文本、语音、图片、视频等方式与其他用户进行实时的双向交流。即时通讯平台在个人和企业间广泛应用&#xff0c;为用户提供了高效便捷的沟通工具…

虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)

文章目录 一、下载镜像源&#xff08;准备工作&#xff09;1、开源网站2、下载 二、VMware配置centos三、配置静态IP地址四、Finalshell使用1、下载Finalshell2、连接虚拟机 五、谢谢观看&#xff01; 一、下载镜像源&#xff08;准备工作&#xff09; 1、开源网站 有许多开源…

[DDCTF2018](╯°□°)╯︵ ┻━┻

贴个脚本在这 def split_and_convert(input_string):# 检查字符串长度是否为偶数if len(input_string) % 2 ! 0:print("字符串长度不是偶数&#xff0c;最后一个字符将被丢弃。")input_string input_string[:-1] # 丢弃最后一个字符# 使用列表推导式将字符串分隔为…

中位数贪心+分组,CF 433C - Ryouko‘s Memory Note

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 433C - Ryoukos Memory Note 二、解题报告 1、思路分析 改变 x 只会影响…

47.面向对象综合训练-汽车

//题目需求&#xff1a;定义数组存储3个汽车对象 //汽车的属性&#xff1a;品牌&#xff0c;价格&#xff0c;颜色 //创建三个汽车对象&#xff0c;数据通过键盘录入而来&#xff0c;并把数据存入到数组当中 1.标准的JavaBean类 public class Car {private String brand;//品…

Ubuntu使用docker安装Oracle23aiFree

Oracle 安装docker安装部署 官网&#xff1a;Oracle23AI 功能亮点 AI战略搜索 Oracle AI Vector Search专为人工智能&#xff08;AI&#xff09;工作负载而设计&#xff0c;允许您基于语义而不是关键字查询数据。 JSON 关系二元性 数据可以作为 JSON 文档或关系表透明地访问和…

『功能项目』第二职业法师的平A【57】

我们打开上一篇56制作提示主角升级面板的项目&#xff0c; 本章要做的事情是制作法师平A的魔法球触碰到Boss后让Boss受到一个无视攻击力与防御力的一个&#xff08;100&#xff09;左右随机的一个伤害值 修改脚本&#xff1a;PlayerCtrl.cs 将法师职业生成的魔法球的标签Tag设…

2019-2023(CSP-J)选择题真题解析

1&#xff0c;了解的知识 中国的国家顶级域名是&#xff08; &#xff09;【2019年CSP-J初赛选择题第一题】 A…cn B…ch C…chn D…china 【答案】&#xff1a;A 以下哪个奖项是计算机科学领域的最高奖&#xff1f;&#xff08; &#xff09;【2019年CSP-J初赛选择题第…

项目实训:CSS基本布局理解——WEB开发系列38

对CSS学习已经接近尾声&#xff0c;下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。 题 1&#xff1a;基于栅格布局的现代博客首页设计 题目要求&#xff1a; 创建一个博客首页布局&#xff0c;包含一个顶部导航栏、一个主要的内容区域&#xff08;左侧为博客文…

PumpkinRaising靶机详解

靶机下载地址 https://www.vulnhub.com/entry/mission-pumpkin-v10-pumpkinraising,324/ 靶机配置 端口扫描 nmap -sV -A -T4 192.168.229.162 访问网页 http://192.168.229.162/ 查看页面源码 base64解密 发现base64解码后的信息不重要 发现一个html网页&#xff0c;访问 …

【C++】C++的多态

目录 多态的使用 多态的概念 多态的定义和实现 虚函数 构成多态的条件 特殊情况&#xff1a;协变 析构函数的重写 怎么实现 为什么实现 override和final关键字 override final 重载/重写/隐藏的对比 纯虚函数和抽象类 纯虚函数 抽象类 多态的实现 虚函数表指针…

【C++】vector详解,模拟实现

目录 1. vector的介绍 2. vector的使用 2.1 构造函数 2.2 遍历方式 2.3 reserve与resize 2.4 shrink_to_fit 2.5 insert&#xff0c;erase&#xff0c;find 3. vector模拟实现 3.1 初始结构 3.2 析构函数 3.3 获取容量和元素个数 3.4 扩容reserve 3.5 resize改变…

方法引用(Java)

把已经有的方法拿过来用&#xff0c;当做函数式接口中抽象方法的方法体 1.引用处必须是函数式接口 2.被引用的方法必须已经存在 3.被引用的方法形参的返回值需要跟抽象方法保持一致 4.被引用方法的功能要满足当前需求 package function;import java.util.Arrays;public cl…

C++基础(3)——类和对象(中)

目录 1.类的默认成员函数 ​编辑 2. 构造函数 3. 析构函数 4. 拷⻉构造函数 5. 赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 ⽇期类实现 6. 取地址运算符重载 6.1 const成员函数 6.2 取地址运算符重载 1.类的默认成员函数 简介&#xff1a;默认成员函数就…

day21JS-axios数据通信

1. 什么是axios axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端&#xff0c;简单的理解就是ajax的封装&#xff0c;只不过它是Promise的实现版本。 特性&#xff1a; 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转…