You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

离散时间模型构建与代码排错:党派支持率动态模拟

支持率动力学模型:报错修复、实现与分析

1. 代码报错根源与修复

你的代码存在5个核心错误,逐一修正如下:

  • 覆盖内置函数:第一行max=()将内置的max()函数覆盖为元组,导致调用max()时报错tuple object is not callable,直接删除该行。
  • 初始值不合法:初始化时pr=1.、pd=1.、pi=1.总和为3,违反支持率总和为1的约束,需改为符合pr+pd+pi=1的初始值(如pr=0.4, pd=0.3, pi=0.3)。
  • 未定义变量:update()函数中nextpi未定义,需根据支持率定义nextpi = 1 - nextpr - nextpd补充计算。
  • 变量名不匹配:绘图时使用rresult、dresult、iresult,但实际存储结果的变量是prresult、pdresult、piresult,需统一变量名。
  • 动力学方程错误:原方程未正确实现“从X转向Y的比例与(pY-pX)成正比”的规则,需重新推导转换逻辑。

2. 离散时间动力学模型推导

根据规则,定义比例系数k(控制转换速率,设为0.1),每类转换的计算逻辑如下:

若pY > pX,则X中转向Y的比例为k*(pY-pX);否则无转换。

基于此,推导三个群体的支持率更新公式:

  • 共和党支持率更新:
    nextpr = pr 
    - pr * k * max(pd - pr, 0)  # 共和党转民主党(民主党支持率更高时)
    - pr * k * max(pi - pr, 0)  # 共和党转无党派(无党派支持率更高时)
    + pd * k * max(pr - pd, 0)  # 民主党转共和党(共和党支持率更高时)
    + pi * k * max(pr - pi, 0)  # 无党派转共和党(共和党支持率更高时)
    
  • 民主党支持率更新:
    nextpd = pd 
    - pd * k * max(pr - pd, 0)  # 民主党转共和党(共和党支持率更高时)
    - pd * k * max(pi - pd, 0)  # 民主党转无党派(无党派支持率更高时)
    + pr * k * max(pd - pr, 0)  # 共和党转民主党(民主党支持率更高时)
    + pi * k * max(pd - pi, 0)  # 无党派转民主党(民主党支持率更高时)
    
  • 无党派支持率更新:
    直接由总和约束推导:nextpi = 1 - nextpr - nextpd

3. 修正后的完整仿真代码

from pylab import *

# 转换速率系数,控制立场转换的快慢
k = 0.1

def initialize():
    global pr, pd, pi, prresult, pdresult, piresult
    # 初始化支持率,满足pr+pd+pi=1
    pr = 0.4
    pd = 0.3
    pi = 0.3
    prresult = [pr]
    pdresult = [pd]
    piresult = [pi]
    
def observe():
    global pr, pd, pi, prresult, pdresult, piresult
    prresult.append(pr)
    pdresult.append(pd)
    piresult.append(pi)

def update():
    global pr, pd, pi
    # 计算下一轮支持率
    nextpr = pr - pr * k * max(pd - pr, 0) - pr * k * max(pi - pr, 0) + pd * k * max(pr - pd, 0) + pi * k * max(pr - pi, 0)
    nextpd = pd - pd * k * max(pr - pd, 0) - pd * k * max(pi - pd, 0) + pr * k * max(pd - pr, 0) + pi * k * max(pd - pi, 0)
    nextpi = 1 - nextpr - nextpd
    # 更新当前支持率
    pr, pd, pi = nextpr, nextpd, nextpi

# 初始化并运行仿真
initialize()
for t in range(100):
    update()
    observe()

# 绘制结果
plot(prresult, 'm-', label='Republican')
plot(pdresult, 'g--', label='Democrat')
plot(piresult, 'y-.', label='Independent')
legend()
xlabel('Time Step')
ylabel('Support Rate')
show()

4. 稳态结果分析

由于共和党与民主党吸引力无差异,长期稳态会呈现以下特征:

  • 两党支持率相等:pr = pd = 0.5,此时两党之间无立场转换(pY-pX=0)。
  • 无党派支持率归零:当pr=pd=0.5时,无党派支持率pi始终小于0.5,因此无党派人群会持续向两党转换,最终pi=0。
  • 收敛速度:由系数k决定,k越大,收敛到稳态的速度越快。

内容的提问来源于stack exchange,提问作者Jeffery Benson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:15:47