2013年2月23日土曜日

等価なウルフラムコード

4点を参照する1次元セルオートマトンについて,気になったので調べている.

しかし,ルールの数がunsigned short変数で表せられる限界の2^(2^4)=65536もあるので,分類するには,ちょっと多すぎて収拾が付かない.そこで,等価なルールは何かを考えてみた.特にセルが左右で周期境界条件であったり,壁面から十分離れていて,境界の影響が現れない場合で,入力がランダムな場合について考えてみる.

ランダムな入力なら,入力の0と1が逆のものに同じ出力をする2つのルールは2ステップで周期的になるだけだから同じものだ.同じ入力に対して出力の01が反転している場合も同じとみなしていい.左右逆の入力に同じ出力をする場合も,基本的には同じものだ.そうすると考慮すべきルールは65536/(2*2*2)=8192にまで最大減らせる.

ところで,ウルフラムコードって16進数とかの方が便利かもしれない.ただ,今さら変更するのも邪魔臭いのでそのままにする.

さて,ウルフラムコードを入力するとそれと等価なコードを最大7つ返すプログラムを作った.
equiv_4ca.cpp
シェルで整理するときに便利だと思う.

追記:
どうもどこか間違ってるっぽい.理由はちょっと納得できていないが,入出力ともに01を反転させたコードが等価のようだ.等価なコードは最大4つだな.そうすると,考慮すべきルールは16634個になる.多いな.
 equiv_4ca.cpp

0 件のコメント: