Sunday, February 27, 2011

Modelul cercurilor de adevăr

Menţionam la finalul postului anterior că sociologilor/antropologilor le-ar fi lesne să detecteze inadvertenţa modelului informatic al „cercurilor de adevăr” din enunţul propus atunci.

Da, “excentricitatea” cercurilor din succesiunea generată/modelată nu poate fi atât de dispersă ca în acel enunţ de problemă. (Aveam două variabile care asigurau dispersie atât radială cât şi unghiulară.) Ori – într-o realitate socială – asta ar însemna diferenţe prea disfuncţionale între indivizi.



Presupunând că cercurile de adevăr sunt generate într-o ordine firească (şi probabil că geolocalizarea ne apare cea mai naturală succesiune), atunci cetăţenii cuprinşi în oricare segment al coloanei mondiale de adevăruri trebuie să fie un pic mai “semeni”, să aibe mai mult(e) în comun.
Dispersia n-ar putea fi constant excesivă.
Dacă am fi avut o dispersie atât de aleatorie, atunci – ne zice istoricul – nu am fi avut popoare (şi nici războaie, zic eu). De fapt, n-am fi avut societate (ne confirmă sociologul): conjuncţia cercurilor de adevăr trebuie să fie nu doar nenulă (cum sugera enunţul problemei), ci şi suficient de substanţială ca lucrurile să se lege, ca ele să merite…
 Acu’, ne mai rămân două provocări în demersul modelării (cibernetice):
  1. Să aflăm o regulă (algoritmizabilă, sau măcar sistemică) de domolire a dispersiei aleatorii în generarea succesivă a cercurilor. (Oricât de excentric ar fi cetăţeanul, el să aibă totuşi suficientă aderenţă la cei din aceeaşi cetate.)
  2. O inversiune a problemei: Să ne imaginăm – in extremis – un criteriu concret de ordonare „pe verticală” a cercurilor generate, pentru care acea dispersie excesiv aleatorie (propusă iniţial), să fie totuşi acceptabilă. (Aici, cred că o soluţie ar fi “data şi ora naşterii”, în schimbul geolocalizării. Iar o falsă soluţie ar fi ordonarea alfabetică după nume, ce are totuşi valenţe culturale/geopolitice.)

Pentru cei interesaţi, iată nucleul progrămelului meu de rezolvare a problemei iniţiale (în limbaj AutoLISP):

(defun cerc()
 (setq _raza 30)
 (setq _z 0)
 (repeat 500
  (setq _x (rand 0 _raza))
  (command "cylinder" (list _x 0 _z) _raza "1")
  (setq _spin (rand 0 360))
  (command "rotate" "last" "" "0,0,0" _spin)
  (setq _z (1+ _z))
 )
)