m
ytCHc           @   s7   d  Z  d k l Z d k l Z d f  d     YZ d S(   sE   2D cellular automaton simulation engine for BML Model of bike traffic(   s   zeros(   s   randintt   ca2dc           B   s2   t  Z d  Z d   Z d   Z d   Z d   Z RS(   s'   Two-Dimensional Cellular Automata classc         C   s  | |  _  | |  _ | |  _ t | | f  |  _ t | | f  |  _ x t |  D] } t	 d | d  } t	 d | d  } xC |  i | | d j o* t	 d | d  } t	 d | d  } q Wd |  i | | <qR Wx t |  D] } t	 d | d  } t	 d | d  } xC |  i | | d j o* t	 d | d  } t	 d | d  } qWd |  i | | <q W|  i |  i (d  S(   Ni    i   i   (   t   sizet   selft   vbikest   hbikest   zerost   currt   nxtt   xranget   it   randintt   rowt   colt   j(   R   R   R   R   R   R   R	   R   (    (    tM   /Users/chaos/Presentations/NonlinearPhysics 2008/Software/Part10_Code/ca2d.pyt   __init__   s0    			    c         C   s+   x$ t  |  i  D] } |  i | GHq Wd S(   s&   Print out the current state of the CA.N(   R   R   R   R	   R   (   R   R	   (    (    R   t   disp+   s      c         C   s   x t  |  i  D] } x t  |  i  D] } |  i | | d j o | |  i d j oJ |  i | | d d j o* d |  i | | d <d |  i | | <q q |  i | d d j o& d |  i | d <d |  i | | <q q& q& Wq W|  i |  i (d S(   s/   Incremental step for horizontal-moving vehiclesi   i    N(   R   R   R   R	   R   R   R   (   R   R	   R   (    (    R   t   steph0   s       !c         C   s   x t  |  i  D] } x t  |  i  D] } |  i | | d j o | |  i d j oJ |  i | d | d j o* d |  i | d | <d |  i | | <q q |  i d | d j o& d |  i d | <d |  i | | <q q& q& Wq W|  i |  i (d S(   s-   Incremental step for vertical-moving vehiclesi   i   i    N(   R   R   R   R	   R   R   R   (   R   R	   R   (    (    R   t   stepvG   s       !(   t   __name__t
   __module__t   __doc__R   R   R   R   (    (    (    R   R       s
    			N(   R   t   numpyR   t   randomR
   R    (   R   R    R
   (    (    R   t   ?   s   