dinamica traficului, un model

duminică, 5 aug. 2012, 17:29

DEX dă termenului de trafic o definiție particulară și cvasi-improprie:

TRAFÍC, traficuri, s. n. 1. Totalitatea transporturilor de mărfuri sau de persoane care se fac pe o anumită cale de comunicație, cu anumite mijloace de transport, într-un interval de timp și în condiții precizate. ♦ Totalitatea legăturilor de telecomunicație stabilite într-un anumit interval de timp și în anumite condiții tehnice.

În fapt traficul este sinonim cu conceptul abstract de transport, care presupune un spațiu S al cărui obiect o (nu neapărat unicul) poate fi mutat de la un punct x_1 către un alt punct x_2. Mutarea va duce astfel la transformarea lui S într-un alt spațiu, tot S, însă cu poziția lui o schimbată [i]. Ținând cont de faptul că două obiecte distincte o_1, o_2 \in S nu pot ocupa aceeași poziție la un moment dat – sau, dacă ar fi să ne luăm după definiție, în același spațiu dat -, dorim să modelăm transportul unei mulțimi (posibil infinite) de obiecte prin S.

Complexitatea deloc redusă a problemei prezentate mai sus mă obligă să îi aduc simplificări acesteia din urmă. Cazul particular ilustrativ în acest sens este o găselniță a unor matematicieni și calculatoriști celebri – printre care se numără și John von Neumann -, anume automatul celular – mai cu seamă cel unidimensional, ale cărui proprietăți le voi enunța în cele ce urmează.

Fie S un șir – posibil infinit – de celule \dots, c_{-1}, c_0, c_1, c_2, \dots, deci o mulțime peste care există o relație de ordine totală pe care nu o vom numi aici. Fiind dată o celulă oarecare c \in S, pot fi deci determinate imediat „celula din stânga” c_l și „celula din dreapta c_r în raport cu c. Ideea de „stânga” și „dreapta” poate fi generalizată la distanțe arbitrare față de o celulă dată, însă pentru simplitate vom considera că fiecare celulă își cunoaște doar vecinii din stânga și din dreapta.

Fiind dată o celulă oarecare c \in S, c poate avea la un moment dat una din două stări posibile: „liberă” și „ocupată”. Notăm celula „liberă” cu 0 și pe cea „ocupată” cu 1 și definim (printr-un ușor abuz de notație) o funcție s : S \to \{0,1\} care asociază fiecărei celule din S „valoarea” sau starea ei la un moment dat. Observăm două aspecte importante:

  • Starea, sau „valoarea” celulei nu este o proprietate inerentă acesteia, ci obiectului care (posibil) o populează. Puteam la fel de bine să definesc un codomeniu cu o singură stare – caz destul de neinteresant – sau cu trei, patru sau o infinitate de stări – fapt ce ar fi crescut considerabil complexitatea reprezentării. Motivația alegerii a fix două valori posibile este aceea că mapează în mod natural modelul pe cel al atomului.
  • Șirul de mai sus începe să se asemene extrem de mult cu un vector ordinar de biți. Acest fapt vine cu unele implicații, pe care le vom menționa mai târziu.

În fine, dorim să imprimăm o dinamică sistemului de mai sus, să îl facem să evolueze în timp, motiv pentru care vom defini o măsură numită „timp”, împreună cu o variabilă t \in \mathbb{N} reprezentând momentul curent de timp. Valorile S și s [ii] la momentul t = 0 sunt cunoscute. În cazul cel mai general ar trebui să cunoaștem și forma unei funcții F : \mathbb{N} \times \Sigma \to \Sigma – unde \Sigma este mulțimea funcțiilor s – care, primind ca argumente momentul curent de timp t și o funcție s, să stabilească forma funcției s la momentul t + 1 [iii]. Adineauri am presupus însă că o celulă dată își „cunoaște” doar vecinii din stânga și din dreapta, motiv pentru care putem lucra sub simplificarea că valoarea imediat următoare a unei celule depinde doar de valoarea sa anterioară și de valorile anterioare ale vecinilor din stânga și din dreapta.

Definim astfel o funcție f : \{0,1\} \times \{0,1\} \times \{0,1\} \to \{0,1\}, care are următoarea semnificație: fiind date, pentru un c oarecare, valorile la un moment dat ale lui c_l, c și c_r în această ordine, f întoarce valoarea lui c la momentul imediat următor. Constatăm că f este invariantă, nefiind dependentă de S; deci nu depinde de poziția celulelor, ducând în mod implicit la determinarea formei lui s la momentul t + 1, ținând cont de respectarea ipotezei simplificatoare de mai sus – aceea că celulele nu depind în mod arbitrar unele de altele.

Forma funcției f ne permite de asemenea să lucrăm foarte ușor cu șiruri de biți. Dat fiind faptul că f primește drept argument un 3-tuplu de biți, numărul de valori posibile pe care le poate lua acesta este 2^3 = 8. În plus, putem reprezenta funcția sub forma unei tabele de adevăr. O convenție în domeniul automatelor celulare unidimensionale este aceea a reprezentării funcției sub forma unui număr pe opt biți. De exemplu automatul celular 42 are semnificația în binar a șirului de biți 00101010, care șir se referă la valorile lui f, după cum urmează: bit-ul cel mai din dreapta este cel mai nesemnificativ bit, deci are asociat index-ul zero, adică argumentul 000. Bitul imediat următor (de la dreapta la stânga) e bitul unu, deci 001, apoi doi (010) și așa mai departe, până la bitul 111. Există deci în total 256 de automate celulare 1D binare posibile.

După această lungă introducere, definiția automatului celular modelator de trafic devine banală: acesta are asociat numărul 184 și este recunoscut pentru capacitatea sa de a simula (printre altele) dinamica traficului, chestie pe care o vom analiza și noi imediat. Regulile care definesc automatul celular 184 sunt următoarele:

  • (r0) 000 \to 0 – șoseaua liberă rămâne liberă.
  • (r1) 001 \to 0 – idem (r0).
  • (r2) 010 \to 0 – obiectul care are liber în dreapta va elibera celula curentă.
  • (r3) 011 \to 1 – invers față de (r2), obiectul care nu are liber în dreapta va rămâne pe loc.
  • (r4) 100 \to 1 – obiectul din stânga care găsește celula curentă liberă o va ocupa.
  • (r5) 101 \to 1 – idem (r4).
  • (r6) 110 \to 0 – idem (r2).
  • (r7) 111 \to 1 – idem (r3).

Astfel obținem un automat foarte simplu care simulează fluxul traficului printr-o „țeavă” (discretă). Acestea fiind date, putem începe să analizăm comportamentul modelului în raport cu diverse situații inițiale, să observăm cum se comportă acesta în funcție de cardinalitatea șirului de celule sau am putea chiar să îmbunătățim modelul pentru a trata cazuri mai complicate legate de dinamica traficului. De exemplu în traficul auto o bună parte din ambuteiaje sunt cauzate de proasta funcționare sau proiectare a intersecțiilor, astfel că putem să gândim un sistem de „intersecții” bazat pe modelul dat mai sus. Bineînțeles, putem face toate astea într-un articol viitor.

  1. A se observa că definiția face complet abstracție de natura spațiului sau a obiectelor aflate într-însul. La urma urmei nu ne interesează dacă avem de-a face cu vaci, saci de făină sau biți, elementele ce țin de detaliu – cum ar fi de exemplu un protocol de transport – fiind lăsate în totalitate implementării. []
  2. E totuși impropriu spus că s are o „valoare”. Mai degrabă este definit printr-o expresie care se schimbă în timp. []
  3. De fapt dacă facem abstracție de argumentul asociat timpului, putem spune că F este o funcțională, adică un functor. []

Comments

  • Faci și simulare, filmulețe/grafice smth?

  • spyked spune:

    Am în plan ceva de genul, dar vreau să explic tot procesul de construire. Că tot suntem aici, ai avut de-a face până acum cu vreo bibliotecă de Haskell pentru desenat care să scoată direct imagine la output? Ceva simplu, cât să nu aducă cine știe ce overhead față de output-ul în mod text. Oricum dacă folosesc ceva de genul o să trebuiască să împart articolul în două. 🙂

  • Am vrut de câteva ori să mă joc cu Diagrams[1] dar n-am apucat. Asta pare a se potrivi.

    [1]: http://projects.haskell.org/diagrams/

    • spyked spune:

      Thanks, pare să știe să facă o groază de lucruri, o să mă uit oleacă peste ea.

      Până una alta m-am uitat un pic și peste binding-urile pentru biblioteca GD (aia pe care o folosea și generatorul de captcha pentru SSL), și pare să scoată destul de simplu imagini gen gif/png. Ideea ar fi să scot cât mai ușor un gif animat cu un automat celular.

  • […] de reprezentare care stă la baza lor. Am arătat deja cum putem modela cu ajutorul acestora un fenomen comun prezent în natură și în mediile sociale, ne mai rămâne doar să punem în practică […]

  • […] de a lucra cu funcții în formă curry [v]: putem defini automatul celular prezentat în „dinamica traficului” folosind o construcție în genul: rule184 :: [Cell] -> [Cell] rule184 = step […]

  • […] unui simulator de automate celulare și apoi am ajuns la o implementare funcțională conform unor specificații. Pe scurt, am obținut o mașinărie capabilă de a primi la intrare un șir de celule „goale” […]

  • Comentariile sunt dezactivate.