【High 翻天】Higer-order Networks with Battiston Federico (8)


传播与社会动力学(2)

在本节将讨论一些观点和文化动力学模型,它们基于物理和数学文献启发、用简单规则来描述社会动态。

Opinion and cultural dynamics

Voter model

选民模型的起源于统计物理文献,是最简单的观点动力学模型之一1。该模型由位于晶格位置上的 N N N 个相互作用的个体组成,每个个体都被赋予一个二进制变量 σ i = { − 1 , 1 } \sigma_{i} = \{−1,1\} σi={1,1} 代表投票或意见。其基本机制依赖于节点更新规则:在每个时间步中,随机选择的节点复制随机选择的邻居的意见;这种动态不断迭代,直到达到完全一致的状态之一。尽管模型很简单,但它呈现了一种导致非平凡行为的非平衡动力学。将选民动态从晶格扩展到网络需要改变视角,将节点更新规则转向链路更新规则。如果我们让节点变量取两个以上的值,结果选民动态就变成了一个颜色协调游戏。

这是因为网络中可能存在的程度异质性会使相邻节点的随机选择偏向于连接最紧密的节点,最终使“游戏顺序”变得重要。

在这里插入图片描述
网络科学中另一个突出的研究课题是研究直接影响网络结构的动态过程。当涉及到社会系统建模时,这种网络结构的共同演化及其上发生的动态尤其相关,其中节点的状态或行为变化可能会迫使网络通过改变其连接模式来做出反应。二元观点的选民模型在这个方向上得到了广泛的扩展,许多版本的自适应选民模型被提出。

Majority models

Majority models 最初由Galam2提出。在最基本的公式中,个体被赋予了表示意见的二元状态变量,并且在没有特定拓扑约束的情况下相互作用。这些模型的行为类似于上面讨论的类似选民的模型,但在更新规则上有一个根本的不同:复制机制被确定性多数规则所取代。

Continuous models of opinion dynamics

到目前为止讨论的不同模型描述了具有离散意见的相互作用代理的动态,这些方法适用于个人只能对某一主题有明确和明确的意见的情况。然而,离散的意见变量可能限制太多,只留下“黑或白”的两极分化选项。在这些情况下,一个人的意见可以用一个连续变量 x i ∈ [ 0 , 1 ] x_{i} \in [0,1] xi[0,1] 来更好地表示。基于此提出的想法具有三体相关作用的动力学特征。

Cultural dynamics

由 Robert Axelrod 3提出的另一类文化模型将个人的文化特征定义为矢量而不是标量。这种方法对模拟多元文化的出现很有用,它将同质性和社会影响这两种基本机制纳入了现在所谓的阿克塞尔罗德模型 (Axelrod model)。在这个模型中,个体通过社交网络的链接相互模仿,即通过复制邻居的特征向量的一个元素来进行交互。模仿概率与两个节点之间所谓的文化重叠成正比,在原始模型中,文化重叠对应的是共同文化特征的比例。


  1. T.M. Liggett, Interacting Particle Systems, vol. 276, Springer Science & Business Media, 2012. ↩︎

  2. S. Galam, Minority opinion spreading in random geometry, Eur. Phys. J. B 25 (4) (2002) 403–406. ↩︎

  3. R. Axelrod, The dissemination of culture: a model with local convergence and global polarization, J.Confl.Resolut. 41 (2) (1997) 203–226. ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的汽车租赁系统的代码实现,包含了上述要求: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>汽车租赁系统</title> <style> .container { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; margin-top: 20px; } .vehicle { margin-right: 20px; margin-bottom: 20px; width: 200px; height: 200px; border: 1px solid black; text-align: center; cursor: pointer; } .vehicle:hover { background-color: lightgray; } .details { margin-top: 10px; text-align: center; } .form { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; height: 200px; border: 1px solid black; background-color: white; text-align: center; display: none; } .form h3 { margin-top: 20px; } .form input { margin-top: 20px; } .form button { margin-top: 20px; } </style> </head> <body> <div class="container"> <button id="loadBtn">加载车辆信息</button> </div> <div class="form"> <h3>请输入租用天数</h3> <input type="number" id="daysInput" placeholder="请输入天数"> <button id="confirmBtn">确定</button> </div> <script> // 定义车辆类 class Vehicle { constructor(brand, rent) { this.brand = brand; this.vno = `粤B${Math.floor(Math.random() * 10000).toString().padStart(4, '0')}`; this.rent = rent; } calcRent(days) { return days * this.rent; } } // 定义轿车类 class Car extends Vehicle { constructor(brand, rent, type) { super(brand, rent); this.type = type; } } // 定义客车类 class Bus extends Vehicle { constructor(brand, rent, seat) { super(brand, rent); this.seat = seat; } } // 定义货车类 class Truck extends Vehicle { constructor(brand, rent, weight) { super(brand, rent); this.weight = weight; } } // 创建一些示例车辆 const car1 = new Car('Toyota', 200, 'Camry'); const car2 = new Car('Honda', 180, 'Accord'); const bus1 = new Bus('Yutong', 300, 50); const bus2 = new Bus('Higer', 280, 40); const truck1 = new Truck('Dongfeng', 400, 10); const truck2 = new Truck('Foton', 380, 8); // 将车辆添加到数组中 const vehicles = [car1, car2, bus1, bus2, truck1, truck2]; // 获取DOM元素 const loadBtn = document.getElementById('loadBtn'); const form = document.querySelector('.form'); const daysInput = document.getElementById('daysInput'); const confirmBtn = document.getElementById('confirmBtn'); // 加载车辆信息 loadBtn.addEventListener('click', () => { const container = document.querySelector('.container'); container.innerHTML = ''; for (let vehicle of vehicles) { const div = document.createElement('div'); div.classList.add('vehicle'); div.innerHTML = `<h4>${vehicle.brand}</h4><p>${vehicle.vno}</p>`; div.addEventListener('mouseover', () => { const details = document.createElement('div'); details.classList.add('details'); details.innerHTML = `<p>日租金:${vehicle.rent}元</p>`; if (vehicle instanceof Car) { details.innerHTML += `<p>型号:${vehicle.type}</p>`; } else if (vehicle instanceof Bus) { details.innerHTML += `<p>座位数:${vehicle.seat}</p>`; } else if (vehicle instanceof Truck) { details.innerHTML += `<p>载重量:${vehicle.weight}吨</p>`; } div.appendChild(details); }); div.addEventListener('mouseout', () => { const details = div.querySelector('.details'); if (details) { div.removeChild(details); } }); div.addEventListener('click', () => { form.style.display = 'block'; confirmBtn.addEventListener('click', () => { const days = Number(daysInput.value); if (isNaN(days) || days <= 0) { alert('请输入有效天数'); } else { const rent = vehicle.calcRent(days); alert(`租用${vehicle.brand},共${days}天,费用为${rent}元`); form.style.display = 'none'; daysInput.value = ''; } }); }); container.appendChild(div); } loadBtn.style.display = 'none'; }); </script> </body> </html> ``` 这个系统通过创建Vehicle、Car、Bus、Truck四个类来实现不同类型的车辆,并在页面上展示它们的品牌、车牌、日租金等基本信息。当鼠标悬停在某个车辆上时,会显示出该车辆的详细信息,包括型号、座位数或载重量。当点击某个车辆时,会弹出一个输入框,询问租用天数,并计算出费用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值