У меня есть две партии A = 1 и B = 0, которые используются в модели распределения голосов для каждой партии в 2d массиве. В моем коде я установил правила, согласно которым, если большинство соседей в окрестности с девятью ячейками вокруг центральной ячейки (включая центральную ячейку), тогда центральная ячейка будет голосовать с большинством.
Эта часть работает нормально, но следующий шаг, который я пытаюсь реализовать, заключается в том, что когда эта система достигнет равновесия, мы должны изменить правила.
Мне трудно понять, как определить равновесие. Первоначально я думал, что это будет, когда 50% ячеек будут голосовать за A, а остальные за B. Но после изучения системы я заметил, что у нее часто были стабильные состояния, где распределение не было 50 50.
Так что теперь я думаю, что вместо этого я должен измерить скорость изменения? И скажем, что когда скорость изменения A равна скорости изменения b, тогда система достигнет равновесия. Я, кажется, реализую это неправильно, хотя (или, возможно, эта идея вообще не будет работать), есть ли в python уже существующая функция, которая может дать мне скорость изменения, или мне придется построить какую-то функцию для ее вычисления ?
Редактировать: я добавил свой код ниже, извините, что не поднял его изначально. Я не очень плодотворный постер на этом конкретном обмене стеков, поэтому я не был уверен, сколько я должен выложить
def update_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
Так что, как только я нажму это состояние прерывания, я хочу, чтобы система запустила эти новые правила
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