第1章:世界は収束へ向かう
序章において、ChatGTPと協力しながら無事世界の構築が完了。
生命らしく振る舞う無数のドットと、養分となるエネルギー源の存在が交響し、一見複雑で創発し合ういい感じの世界観ができました。
さぁできたと思って、その後各種変数の値をいじりながら世界がどのような変化をもたらすのかを観察してみたのです。
要件のおさらい
実際に私がどの変数をいじったかを理解いただくために、改めて仕様を確認しておこう。多少仕様を変更した箇所がいくつかありますので、変更がない箇所は割愛します。序章をぜひご覧あれ。
Worldの仕様
・1400×800ので表現された四角いエリアが表示されている。これをworldと呼ぶ
・各マスはマトリクスになっており、ドットそれぞれは黒色=null、白色=ex、水色=hxの3つの状態のみが存在する
・worldは1秒を1ターンとして毎秒変化が起こる。これをdayと呼ぶ。2秒以上であればdaysである
hxの定義
・hxは1dayにいずれかのnullの座標にランダムに同時に15個出現する
exの定義
・worldには1daysに一回、いずれかのnullにexが1個出現する
・exの寿命は初期設定で3000daysである
exの移動
・exは誕生から100日経過後、上下左右、左上、左下、右上、右下(8方向)のいずれかに1dayに1ドットづつ移動をし続ける
exの捕食
・移動先にhxが存在する場合は、その座標に移動し、hxを食べ、hxは消滅。exは寿命が500日延長される
・ex同士が接触すると、双方の寿命が1/2になる
exの自己複製
・exは寿命が15000daysを超えると、次のdaysにexを複製する
・複製されたexと複製したexは、誕生から10daysは自己複製できない
ーーーここまで
実は序章から、Worldのサイズや移動方向などを少しアップデートしています。
この仕様の中で変更可能なパラメータは、誕生速度や移動速度、寿命や攻撃力などになりますので、それらをちょこちょこいじりながら世界の変化を傍観しました。
(序章では局所的な人口爆発が起こっていましたが、自己複製の箇所にバグがあり暴発していただけでした)
世界のはじまりは、exよりhxの生成スピードが速いがためにhxが増える。
動かないhxはexにより食べられ、exがhxの数を上回ります。大体これくらいで飽和します。ある程度のバランスを保つ。
exの誕生速度や捕食スピードを上げたところで、exが増えて拮抗するだけ。
やはりどこかに収束する。
いずれかのパラメータを変更したところで、exとhxの数は均衡を保ち、以降大幅な変動は起こらない。
そりゃそうなのかな・・・
個人的な浅はかな期待としてはもっとダイナミックに世界が変動すると思っていたのだが、個々の振る舞いにある程度規則性があるのなら、乱数でもって個々の動きがバラついたところで、やはりどこかに安定してしまう。
そりゃそうなのかな?という印象です。
つまらん。(もっと算数とか勉強しておけばよかった)
ChatGPT的にも、パラメータをいじったとして、ある程度の傾向や偏りはあるにせよどこかに収束していくかもしれないとの回答。
ん〜悩ましい。
もっと局所的な変化や、予想外の変化が時間の進行と共に訪れると思っていたのだがそうでもない?らしい。気がする・・。全然自信ない。
チャッピーと議論
さすがチャッピー!勉強になるし、頭の体操にいいね!
でもまだ因子を増やしたくない。最低限のルールだけで豊かな世界を表現したい。複雑にしたくはないのだ。
サードインパクトにはまだ早い。
世界をちょっと有機的にアップデート
というわけで、チャッピーとの熱い議論ののち、それぞれの振る舞いを少々有機的にアップデートしてみました。
最新の仕様
太字部分がアップデート箇所
worldの定義
・1400×800のドット(座標)で表現された四角いエリアが表示されている。これをworldと呼ぶ
・worldは1秒を1ターンとして毎秒変化が起こる。これをdayと呼ぶ。2秒以上であればdaysである
hxの定義
・hxは水色のドットで表現する
・hxは1dayにいずれかのnullの座標にランダムに同時に20個出現する
exの定義
・worldには1daysに一回、いずれかのnullにexが1個出現する
・exの寿命は初期設定で3000daysである
exの移動
・exは誕生から100日経過後、上下左右、左上、左下、右上、右下(8方向)のいずれかに1dayに1ドットづつ移動をし続ける
・移動先がworld外である場合は、そちらには移動をしない。別の方向へ移動する
・どの方向にも移動できない場合、移動しない
・各exは自分を中心として周囲1ドットの範囲にいるhxとexを視認可能
・hxが視認可能範囲内にいる場合、exはhxに向かって移動するための方向を優先的に選択する
・hxが視認可能範囲内にいない場合、exが視認可能範囲内にいるかどうかを調べる。exがいれば、その反対方向に移動する
・それ以外の場合、exはランダムな方向に移動する
・exは寿命により以下のように移動速度が変化する
-寿命が15000以下の場合、毎日移動
-寿命が15001~20000の場合、2日に1回移動
-寿命が30001以上の場合、5日に1回移動
exの捕食
・移動先にhxが存在する場合は、その座標に移動し、hxを食べ、hxは消滅。exは寿命が100日延長される
・ex同士が接触すると、寿命の大きいexは寿命が半分に減り、寿命の小さいexは1/4になる
exの自己複製
・exは寿命が15000daysを超えると、次のdaysにexを複製する
・複製されたexは、複製元のexに隣接するいずれかのマスに出現する
・複製されたexは、複製元のexと同じ寿命を初期値として持つ
・複製されたexと複製したexは、誕生から10daysは自己複製できない
・exは1体につき1度までしか自己複製できない
Status monitorについて
・worldエリア外に現在のworldの状態を表示する
status monitor
days = [現在のdays数]
null = [現在のnull数]
ex = [現在のex数]
hx = [現在のhx数]
max life ex = [現存する最大寿命をもつexの寿命]
ーーーーここまで
どうだ!
exに視界を実装しました。目が悪いのでお隣の座標しか見えないけどw
hxを捕捉し、そちらへ移動して食べます。
exがいたら逃げます。
寿命によって移動速度が低下。老化します。
ちょっと有機的になった気がしますね。しかし、やはりどこかでバランスし収束する。
うむ。この問題でしばらく悩みたいと思います。
ぜひご意見ください!
こちらに制作したworldを公開しています。
超絶暇な方はぜひ一度ご覧いただき物申していただけると嬉しいです。
序章:https://wwwn.life/world/silence_w.html
第1章:https://wwwn.life/world2/silence_w.html