L-systemとは
L-system(エルシステム、Lindenmayer system)は形式文法の一種で、植物の成長プロセスを初めとした様々な自然物の構造を記述・表現できるアルゴリズムである。自然物の他にも、反復関数系(Iterated Function System、 IFS)のようないわゆる自己相似図形やフラクタル図形を生成する場合にも用いられる。L-System は1968年、ハンガリーユトレヒト大学の理論生物学者にして植物学者であったアリステッド・リンデンマイヤー(Aristid Lindenmayer)により提唱され、発展した。
wikipedliaの引用だが、要は自己相似図形、フラクタル図形作成に利用でき、植物の成長モデルなど、自然の構造を記述できるアルゴリズムだ。また、構造は以下の通り
L-system の文法は en:Unrestricted grammar のものに似ている(→ チョムスキー階層)。現在では、以下のような四ツ組によって定義されることが多い。G = {V, S, ω, P},
各要素は、
簡単にまとめると
| 要素 | 説明 |
| V | 「置換規則」Pで置換される文字 |
| S | 不変の文字 |
| ω | 「初期状態」の文字列。 |
| P | 「置換規則」。置換前文字列→置換後文字列。 |
pythonで実装
pythonで以下の例で実装してみる。
| 要素 | 実装例 |
| V(置換規則で置換される文字) | A B |
| S(不変の文字) | + – |
| ω(初期状態) | A |
| P(置換規則) | A→A+B,B→B+B–A |
| repeat(繰り返す回数) | 3 |
コードは以下の通り
omega = "A"
P = {"A":"A+B","B":"B+B--A"}
repeat = 3
result = omega
for i in range(repeat):
result = result.translate(str.maketrans(P))
print(result)
結果は以下の通り
A+B
A+B+B+B--A
A+B+B+B--A+B+B--A+B+B--A--A+B

