Как определить равновесие между двумя противоборствующими политическими партиями - PullRequest
0 голосов
/ 05 мая 2018

У меня есть две партии 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
...