środa, 1 marca 2017

Wpływ społeczny - reguła większości

Przyszła pora zaimplementować pierwszy prawdziwy model symulacyjny z psychologii społecznej. Będzie to najprostsza forma modelu dynamicznego wpływu społecznego w postaci probabilistycznego automatu komórkowego 2D.
Komórki automatu (w modelach psychologicznych częściej zwane agentami, ale w tym przypadku byłoby to ewidentnie "na wyrost") posługują się bardzo prostą regułą:
"Dopasowujesz swój stan -1 lub 1 do stanu WIĘKSZOŚCI twoich sąsiadów w sąsiedztwie Moora" co jest implementacją psychologicznego prawa konformizmu:
"Jednostka dopasowuje swoją postawę do postawy dominującej w jej otoczeniu".
Jak widać na powyższym obrazku symulacja ma cyklicznie (w procedurze draw() ) do wykonania trzy zadania: wizualizację, obliczanie statystyk (w Count() ) oraz właściwy model (DoMonteCarloStep()).

  • Wizualizacja przegląda wszystkie komórki i te w stanie 1 rysuje w kolorze czerwonym, a inne, zakładamy że w stanie -1 w kolorze białym. Tym razem nie posługujemy się jednak pojedynczymi pikselami, ale prostokątami (rect(x,y,w,h)), a właściwie kwadratami bo oznaczające szerokości i wysokość parametry trzeci i czwarty są równe S. Także pozycjonując komórki posługujemy się tym parametrem, dzięki czemu ich "rogi startowe" oddalone są o wielokrotności S.
  • Statystyka jest na razie bardzo prosta - jedynie zliczamy liczbę agentów w stanie 1 czyli czerwonych.
  • Wreszcie sam krok modelu polega na wykonaniu tzw. "kroku Monte Carlo" czyli wykonaniu tylu losowań ile jest komórek. Dla każdej komórki sprawdzamy w podwójnej pętli stan jej i jej sąsiedztwa Moora sumując stany komórek. Ponieważ jest to 9 komórek,  to w sumie wychodzi nam albo liczba dodatnia albo ujemna i znak tej liczby staje się nowym stanem wylosowanej komórki centralnej. Warto zwrócić uwagę, że przy obliczaniu prawdziwych współrzędnych komórki zakładamy że świat symulacji zamknięty jest w torus (temu służą operacje modulo %)
Oczywiście program jest jeszcze niekompletny. Potrzebujemy tradycyjnie ;-) deklaracji i inicjalizacji zmiennych w procedurze setup():
Główne zadanie tej części programu polega na utworzeniu tablicy świata (linia 12) i jej zainicjowaniu liczbami -1 i 1 w proporcji zadanej parametrem Ones.
Oczywiście musimy ustalić też rozmiar okna, ale ze względu na sposób wizualizacji nie musi być on równy rozmiarowi tablicy. Wręcz przeciwnie - lepiej żeby był większy. Do wpasowania wizualizacji tablicy świata w okno służy współczynnik S, który obliczamy dzieląc szerokość okna przed długość wiersza tablicy (w linii 18).
Na koniec wprowadzamy jeszcze funkcję exit() obsługująca zakończenie działania programu. Na razie nie robi ona nic istotnego, poza wywołaniem swojego super odpowiednika i powiedzeniem "Do widzenia", ale w dalszych częściach kursu będzie nam się przydawać.
Nie pokaże na razie zrzutu ekranu - sami się przekonajcie co wychodzi :-)
I pomyślcie jak przerobić ten program, żeby dopuszczalny był też stan 0 - "komórka jeszcze nic nie wie, więc nie nie ma zdania".
Więcej o teorii związanej z tym modelem w poblikacjach naukowych profesora Nowaka, ale jest też przystępna wersja polska: WPŁYW SPOŁECZNY JAKO MODEL ROZPRZESTRZENIANIA SIĘ MEMÓW