見出し画像

人工生命アート'ExCell'の実装完了-公開

久々にnoteを更新します。
非エンジニアでもない私(ワードプレスがかろうじて触れるくらい/コードは書けません)がChatGPTの到来とともに、LLMをフル活用しながら人工生命を実装しようという無謀な試みを初めてから半年が経過しました。

そして完成しました。

何度挫折しかけたことか。でもやり遂げたよ!


概要/仕様

※読むのが面倒くさい方は飛ばしてください↓公開版があります

人工生命アート Artificial Life Generated Art

ExCell

Functional requirement 

ExCellの概要

ExCellは生命誕生から、その生命同士が一定の法則の中で複雑かつ有機的な挙動を行う実験的なアートシュミレーションである。ExCell(エクセル)はこのプログラムの進化する生命体("Ex")と細胞("Cell")の概念を組み合わせた名称である

ExCellの環境

ExCellは描画サイズ500*500の2次元マトリクス(座標)で構成されおり、横軸x値と縦軸y値により座標を特定できる

ExCellの進行について

ExCellは単位yearsの時間的進行により制御する

  • 1秒間で30years進行する

exオブジェクトについて

  • exは生と死、移動、成長、捕食、自己複製により相互に干渉し合いながら双発的様相を表現する

  • exの個体ステータスは特定のアルゴリズムにより遺伝し、変容を繰り返すことで種の繁栄を目指す 

exのステータス

※オブジェクトexは以下のステータスを持つ。ステータスはexの個性であり変動するパラメータである 

<ステータス>

exの寿命

  • exLife = exが生存できるyears

  • exColor = exの色(誕生時にランダムで決定)

  • exSpeed = exが1座標の移動にかかるyears

  • exMove = exの移動方向順序(1〜9が並んだ10桁の整数、0は含まない) (初期値:9999999999) 

  • exは1yearに3つ、ExCellのいずれかの座標にランダムに誕生する

  • exLifeはExCellが1year進行するごとに1づつ減る

  • exLifeが0となったexは消滅する 

exの移動

exは、exSpeedの倍数にあたるyearにのみ、 exMoveの方向に1座標づつ移動する 

  1. : createVector(0, -1), // 上

  2. : createVector(1, -1), // 右上

  3. : createVector(1, 0), // 右

  4. : createVector(1, 1), // 右下

  5. : createVector(0, 1), // 下

  6. : createVector(-1, 1), // 左下

  7. : createVector(-1, 0), // 左

  8. : createVector(-1, -1), // 左上

  9. : createVector(0, 0) // 動かない

  • exは自分の座標を中心として、隣接する周囲8座標に自分より大きいexLifeを持つexがいた場合、そのexがいる方向を移動方向から除外し、反対方向へ移動する。反対方向へ移動した次のyearで元の移動順序に戻る

  • exがExCell描画エリア外に移動した際、反対側の座標から出現するトーラス的な移動となる

ex同士の接触

  • 2つ以上のexが移動により隣接する座標にいた場合、ex同士のステータス変更が発生

  • 異なるcolorを持ったex同士(異種)の場合は移動スピードが遅くなる

  • 同じcolorを持ったex同士の場合は移動スピードが速くなる

  • exの自己複製

  • exは一定期間経過で自身を複製する

  • 複製する際、自身の現在のステータスを一部引き継ぎ、ランダムで追加のステータス変更を行う

 できたもの

個人的に独学で人工生命について本を読んだりしましたが、正直あまりに専門的すぎてほぼ理解できておらず、これが人工生命と呼んでいいものか懐疑的ではあります。

しかしながら特に気をつけた点としては

  • 個々の振る舞いが影響し合い、全体として"生物的"な動きをする

  • 特定のパターンに収束せず、絶えず進行し続ける

  • 遺伝変容により、個体差がある

  • 衰退と反映を繰り返す

これらは全て表現できたかな。と思います。
多少制御が強引だったり、CPU負荷の問題で泣く泣く制限をかけたりしている部分はありますが、あくまで一つのジェネレイティブアート作品としては形になったと思います。

※より詳しく仕様を知りたい方はこちら

リリースしました

こちらから実際にシュミレーションしていただけます。

https://wwwn.life/ExCell/index.html

 

Tips/Points

  • 始めて生成されたexはexMoveが999999999のため、移動することはない。死ぬまでの間に自己複製することで移動可能なexが生成される

  • 移動方向、戦闘状況、仲間との適切な距離感、適度な捕食など、かなりの条件が揃わなければexの繁栄は起こらない

  • exの繁栄後、新種(新しい色を持つex)が生成され、それが勢力を逆転することも稀にある

  • 同時多発的に複数の種が、各地で繁栄を始めることもある

  • 移動方向が遺伝するため、同じ色を持つexは同じような移動方法を持つ傾向にある

  • 同種のex同士は移動スピード(能力)を減らす傾向にあるため、仲間が近すぎると衰退する

  • スピードが遅いと次世代の寿命が伸びる そして スピードが早いと次世代の寿命が縮む

  • つまり、他種を攻撃しながら次世代へlifeを継承し、適度な移動方法を獲得し続ける種が生き延びる


黄緑と赤色の勢力争い。こんなことになったりします


ぜひご意見お待ちしております!!!何卒


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

−Tips/Points

・       始めて生成されたexはexMoveが999999999のため、移動することはない

死ぬまでの間に自己複製することで移動可能なexが生成される(exMoveの変容で再び9が選択されれば複製されたexも動けない)

・       移動方向、戦闘状況、仲間との適切な距離感、適度な捕食など、かなりの条件が揃わなければexの繁栄は起こらない

・       exの繁栄後、新種(新しい色を持つex)が生成され、それが勢力を逆転することも稀にある

・       同時多発的に複数の種が、各地で繁栄を始めることもある

・       移動方向が遺伝するため、同じ色を持つexは同じような移動方法を持つ傾向にある

・       同種のex同士は移動スピード(能力)を減らす傾向にあるため、仲間が近すぎると衰退する

・       スピードが遅いと次世代の寿命が伸びる そして スピードが早いと次世代の寿命が縮む

・       つまり、他種を攻撃しながら次世代へlifeを継承し、適度な移動方法を獲得し続ける種が生き延びる

 

 

 

−Version/System/Release note

<dev ver>

World1.3_2023_10_26_09_08_33 →点滅追加

World1.3_2023_11_02_07_30_22 →exが重ならない

Slime_isthmus_2023_11_06_08_03_17 →自己複製

Slime_isthmus_2023_11_09_08_58_14 →移動方向決まってる

Sugary_epoch_2023_11_13_01_54_45.zip →いい感じ、大量発生時のみ処理落ち

wwwn_4.1.0_2023_11_14_01_16_58 →とりあえず完成

 

<release ver>

ExCell_ver1.0_2023_11_15_02_04_21

公開URL:https://wwwn.life/ExCell/index.html

 

---

※バージョン/修正管理 内容記載

---

いいなと思ったら応援しよう!