Python绘制Logit动态演化博弈的演化趋势图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

针对交通方式选择研究中基于Logit动态的演化博弈模型,利用Python代码绘制演化趋势图。

Python代码

1.引入库

代码如下:

import numpy as np
from scipy.integrate import odeint    #求解微分方程用到
import matplotlib.pyplot as plt
%matplotlib inline

2.设置参数

设置字体、字号,表格刻度方向等参数

plt.rcParams['font.sans-serif']=['TimesSong']  
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['xtick.direction'] = 'in'  # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'  # 将y轴的刻度方向设置向内
plt.rcParams['font.size'] = 14          

上面的‘TimeSong’是自定义的字体,可以实现中文宋体,英文Times New Roman字体的效果,需要先设置好,具体可以参照:https://www.yii666.com/blog/376794.html,网上也有其他的实现方式。

3.动态演化方程

Logit动态演化博弈具体的理论推导在此不作详细分析,需要研究的小伙伴可以参考相关论文[1][2]。这里直接给出动态演化方程的最终形式:
在这里插入图片描述
其中,
u i :选择第 i 种交通方式的收益函数; u_i:选择第i种交通方式的收益函数; ui:选择第i种交通方式的收益函数;
u j :选择第 j 种交通方式的收益函数; u_j:选择第j种交通方式的收益函数; uj:选择第j种交通方式的收益函数;
x i :选择第 i 种交通方式的比例。 x_i:选择第i种交通方式的比例。 xi:选择第i种交通方式的比例。
以轨道交通(方式1)和私人小汽车(方式2)出行为例,仅考虑出行方式的时间和费用,分别记为 t 1 t_1 t1 t 2 t_2 t2 m 1 m_1 m1 m 2 m_2 m2。则两种方式的收益函数可以表示为:
u i = − t 1 − m 1 u_i=-t_1-m_1 ui=t1m1
u j = − t 2 − m 2 u_j=-t_2-m_2 uj=t2m2
因为时间和费用都是出行的成本,因此在收益函数中都是负的。

4.求解微分方程

代码如下:

def modechoice(Fy,t,t1,t2,m1,m2):
    x1, x2 = Fy.tolist()
    return 1/(1+np.e**(t1-t2+m1-m2))-x1,\
            1/(1+np.e**(t2-t1+m2-m1))-x2
#这里return后面的两部分其实就是前面公式给出的动态演化方程,
将方式1和方式2的收益函数分别带入,并将分数部分做进一步的化简。

5.计算绘图

代码如下:

fig,ax=plt.subplots(figsize=(10,6), dpi=300)  #设置图片尺寸和清晰度
t = np.arange(0, 10, 0.1)  #设置演化周期和步长,即def modechoice(Fy,t,t1,t2,m1,m2)中的参数t。
args=(41,39.7,9.8,9.7)     #设置出行方式时间和费用的初始值,这里值是随便取的,但注意变量顺序必须与def modechoice(Fy,t,t1,t2,m1,m2)中的对应。

for i in np.arange(0,1.1,step=0.1):	 #设置循环,以不同的出行比例为起点开始进行演化计算并绘图。
    track = odeint(modechoice, (1-i, i), t,args)
    plt.plot(t, track[:,0], '--',color='black', linewidth=1)
    plt.plot(t, track[:,1], '-',color='black', linewidth=1)
plt.xticks(np.arange(0,10.1,step=1))
plt.yticks(np.arange(0,1.1,step=0.1))
plt.legend(labels=('轨道交通','私人小汽车'),loc=7,frameon=False)
ax.set_xlabel("演化周期",labelpad=10)
ax.set_ylabel("出行方式比例",labelpad=10)
ax.set_xlim(0,10)
ax.set_ylim(0,1)
plt.show()

运行之后便得到了演化趋势图。
在这里插入图片描述

总结

演化博弈是交通方式选择分析中一种方法,相对于离散选择模型具有能够进行动态分析的优势。以上是自己在学习过程中的一些总结,有不对的地方欢迎大家批评指正,如果对大家的学习有所帮助,也请点赞收藏,谢谢!

相关文献

[1]Zhang Yu, Li Leiming. Research on travelers’ transportation mode choice between carsharing and private cars based on the logit dynamic evolutionary game model[J]. Economics of Transportation, 2022, 29.
[2]Lin Xiaomei , Shao Chunfu, Qian Jianpei ,et al. Evolution dynamic of the expressway toll-free policy impact on the mode choice in a bimodal transportation network during holidays[J]. Advances in Mechanical Engineering, 2017, 9(7): 1-14.

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值