Collective motion on triangular lattice with Vicsek Model

三角格子上に制限された線素の運動を考えるために,まずは三角格子を生成し,そのクラスが適切に作られているか確かめてみることにする。

例題として,三角格子状でのVicsekモデルを考えてみる。

Zoltán Csahók and Tamás Vicsek. Lattice-gas model for collective biological motion. Phys. Rev. E, Vol. 52, pp. 5297-5303, November 1995.

上の論文を参考に,三角格子を実現するところから。

まず,一般に格子,あるいはネットワークについて考えるとき,ノードに与えられた情報とノード間のエッジがどのように張られているかが問題となる。

この視点から考えると,2次元平面上の三角格子は,(x, y)の2つの変数を持ち,周囲には等距離,等間隔に6つのノードが存在するネットワークと捉えることができる。

したがって,これをプログラムで扱いやすい形にするためには,一旦2×2の行列を考え,行列の上下左右のみでなく,さらに二つの点が隣接していると捉えるように拡張することによって,その位置関係を表すことができる。

また,これらそれぞれの点に(x, y)の座標が割り振られるが,これはある点の座標とノード間の距離を定めることによって決められる。

クラスの設計としては,

  • 隣接関係を拡張
    • ある格子点のインデックスが渡されたときに,その隣接する6つの点のインデックスの組を返す
  • インデックス化された行列から2次元平面上へのマップ

の2つの要素が必要なことが分かる。以上をふまえて,LatticeTriangularクラスを以下のように作成した。

LatticeTriangular(lattice=None, boundary='periodic', scale=10, x0=0, y0=0)

lattice: (ndarray) 格子点の初期条件 boundary: ('periodic' or 'boundary') 格子の境界条件を周期境界条件にするか,反射境界条件にするか scale: (int or float)