基于蒙特卡洛方法的谢林隔离模型实现
谢林隔离模型
在研究社会上人类种群的空间分布问题时,社会学家们发现了同质性对自然的空间特征产生的影响,即人们倾向于与其相似的人群居住在一起。
托马斯谢林(Thomas Schelling)发明了一个著名的模型,描述的是同质性对于空间隔离的影响与作用,此模型大致描述如下:在一个二维网格中居住着一群代理(agent),这个代理可能是A型,也可能是B型,这描述了一个社会空间中存在的两个不同类型的人,接下来定义一个门槛值t,这个门槛值表示如果某个代理当前同类型邻居的数量小于这个值时,就会发生移动,直到他找到合适位置可以使他的同类型邻居数量大于等于门槛值为止。
蒙特卡洛方法
蒙特卡洛方法也称统计模拟方法,对于本身具有随机性的事件,可以利用蒙特卡洛方法随机产生一系列样本点,通过大量重复随机试验得到统计规律。
在谢林隔离模型中的应用是为模型初始化产生随机的样本点,并且在代理移动的过程中为代理随机产生目标位置,这样经过有限多次循环过程,模型可以最终达到稳定,产生种群隔离的结果。
Python语言实现
具体实现步骤如下:
1.随机初始化二维矩阵:
class SchellingModel(object):
def __init__(self,length,t):
self.matrix = np.zeros((length)*(length)).reshape((length,length))
self.t = t #threshold value
self.space = 0 #0 indicates that there is no people
self.red = 1 #red and blue represent 2 kind of people
self.blue = 2
self.length = length
self.population = 0
for i in range(length):
for j in range(length):
self.matrix[i][j] = random.randint(0,2)
if self.matrix[i][j] != 0:
self.population += 1
2.根据门槛值判断当前代理是否满意自己的位置
def is_satisfied