我有两个政党A=1和B=0,用在一个模型中,每个政党的选票分布在一个二维数组中。在我的代码中,我设置了一个规则,如果在一个中心单元格(包括中心单元格)周围的九个单元格的邻居的大多数,那么中心单元格将与大多数人一起投票
这一部分很好,但下一步我要做的是,当这个系统达到平衡时,我们必须改变规则
我搞不清楚如何定义平衡。最初我以为会有50%的细胞投票给A,剩下的细胞投票给B。但在研究了这个系统之后,我注意到它通常有稳定的状态,分布不是50
所以现在我认为我应该测量变化率?当A的变化率等于b的变化率时,系统将达到平衡。我似乎没有正确地实现这一点(或者这个想法可能根本不起作用),python中是否有一个预先存在的函数可以给我一个变化率,或者我是否需要构建某种函数来计算它
编辑:我已经在下面添加了我的代码,很抱歉没有把这个原来我不是一个真正的多产海报在这个特殊的堆栈交换,所以我不知道我应该把多少
def update\u world(frameNum,world,N):
# copy grid since we require 8 neighbors for calculation
# and we go line by line
newworld = world.copy()
broken=False
for i in range(N):
for j in range(N):
# compute 8-neghbor sum using toroidal boundary conditions
# x and y wrap around so that the simulation
# takes place on a toroidal surface
Num_neighbours = int((world[i, (j-1)%N] + world[i, (j+1)%N] +
world[(i-1)%N, j] + world[(i+1)%N, j] +
world[(i-1)%N, (j-1)%N] + world[(i-1)%N, (j+1)%N] +
world[(i+1)%N, (j-1)%N] + world[(i+1)%N (j+1)%N]+world[i,j]))
equal= np.sum((world))
if [i, j] == 1:
if Num_neighbours >= 5:
newworld[i, j] = 1
elif Num_neighbours <5:
newworld[i,j] =0
else:
if Num_neighbours <5 :
newworld[i, j] = 0
elif Num_neighbours >=5:
newworld[i,j] =1
#break from the sytem when status quo hits equibrium
if equal ==N/2:
broken = True
break
if broken == True:
break
所以一旦我点击了这个break语句,我希望系统开始运行这些新规则
for i in range(N):
for j in range(N):
if [i, j] == 1:
if Num_neighbours >= 6:
newworld[i, j] = 1
elif Num_neighbourse <6:
newworld[i,j] =0
else:
if Num_neighbours <4 :
newworld[i, j] = 0
elif Num_neighbours >=4:
newworld[i,j] =1
world[:] = newworld[:]
return world
目前没有回答
相关问题 更多 >
编程相关推荐